Ejemplo n.º 1
0
    def get_location_history(self, ig_profile):
        '''
        Ottiene tutti i geotag dei post per uno specifico profilo Instagram.
        E' necessario essere loggati per usare questa funzione.

        Params:
        @ig_profile: Profilo Instagram (Instaloader) di cui recuperare i geotag

        Return:
        Lista di localitá (classes.location) individuate
        '''

        # Variabili locali
        locations_list = []

        # E' necessario essere loggati per usare questa funzione
        if not self.is_logged:
            self._manage_error(USER_NOT_LOGGED, None)
            return []

        # Ottiene l'elenco dei post del profilo Instagram
        try:
            post_list = ig_profile.get_posts()
        except PrivateProfileNotFollowedException as ex:
            self._manage_error(PRIVATE_PROFILE_NOT_FOLLOWED, ex)
            return []
        except Exception as ex:
            self._manage_error(WEBDRIVER_GENERIC_ERROR, ex)
            return []

        # Salva i geotag dei media selezionati
        post_with_location = [
            post for post in post_list if post.location is not None
        ]
        for post in post_with_location:
            loc = location.location()
            # Ottiene la locazione dalle coordinate
            if post.location.lat is not None and post.location.lng is not None:
                loc.from_coordinates(post.location.lat, post.location.lng,
                                     post.date_utc)
                locations_list.append(loc)
            elif post.location.name is not None:
                loc.from_name(post.location.name, post.date_utc)
                locations_list.append(loc)

        # Ordina la lista dalla locazione più recente a quella meno recente
        locations_list.sort(key=lambda loc: loc.utc_time, reverse=True)

        if self._logger is not None:
            self._logger.info('Found {} locations for user {}'.format(
                len(locations_list), generic.only_ASCII(ig_profile.username)))
        return locations_list
Ejemplo n.º 2
0
    def find_user_by_username(self, username):
        '''
        Cerca un profilo Twitter a partire dal nome utente.

        Params:
        @username: Nome utente del profilo

        Return:
        Profilo Twitter (profiles.twitter_profile) o None se il profilo non esiste (o il WebDriver non è inizializzato).
        '''

        try:
            # Get the data from Twitter
            profile = tws_Profile(username)

            # Convert the data to profiles.twitter_profile
            tw_user = twitter_profile()
            tw_user.username = profile.username
            tw_user.full_name = profile.name

            if tw_user.biography != '':
                tw_user.biography = profile.biography

            tw_loc = profile.location
            if tw_loc != '':
                loc = location.location().from_name(tw_loc)
                tw_user.locations.append(loc)
        except ValueError:
            # Profile not exists
            return None
        except Exception as ex:
            self._manage_error(WEBDRIVER_GENERIC_ERROR, ex)
            return None

        # Ritorna il profilo createo
        return tw_user
Ejemplo n.º 3
0
    def find_user_by_username(self, username, skip_verification=False):
        '''
        Cerca un profilo Facebook a partire dal nome utente.
        E' necessario aver effettuato il login.

        Params:
        @username: Nome utente del profilo
        @skip_verification [False]: Indica se saltare il controllo dell'esistenza del profilo

        Return:
        Profilo Facebook (profiles.facebook_profile) o None se il profilo non esiste (o non si è loggati).
        '''

        # Controlla se il profilo è bloccato
        if self.is_blocked:
            return None

        # Bisogna essere loggati per cercare gli utenti
        if not self.is_logged:
            ex = exceptions.UserNotLogged('In order to use this function the user need to be logged to Facebook')
            self._manage_error(USER_NOT_LOGGED, ex)
            return None

        # Variabili locali
        wait = WebDriverWait(self._driver, self._timeout)

        # Cerca l'utente
        if not skip_verification:
            if not self._find_user_page(username):
                return None

        # Utente esistente, estrapoliamo i dati..
        fb_user = facebook_profile()
        fb_user.username = username

        # Naviga nelle informazioni di contatto
        self._driver.get(INFO_CONTACT_SECTION.format(username))
        time.sleep(SLEEP_TIME_MEDIUM)
        self._request_manager()

        # Verifica che l'account non sia stato bloccato
        if self._is_blocked():
            ex = exceptions.FacebookAccountBlocked('The account has been blocked, you may have to wait for a day to use your account. The client will now be closed')
            self._manage_error(ACCOUNT_BLOCKED, ex)
            return None

        # Ottiene il nome completo
        try:
            fullname_div = wait.until(
                EC.presence_of_element_located(
                    (By.XPATH, NAME_DIV_XP)))
            fb_user.full_name = fullname_div.text.strip()
        except TimeoutException:
            pass

        # Ottieni telefono e abitazione
        try:
            phone_number_div = wait.until(
                EC.presence_of_element_located((By.XPATH, PHONE_INFO_XP)))
            fb_user.phone = phone.phone(phone_number_div.text)
        except TimeoutException:
            pass

        try:
            location_div = wait.until(
                EC.presence_of_element_located((By.XPATH, LOCATION_INFO_XP)))
            fb_user.location = location.location().from_name(location_div.text)
        except TimeoutException:
            pass

        # Naviga e cerca la biografia
        self._driver.get(BIO_SECTION.format(username))
        time.sleep(SLEEP_TIME_MEDIUM)
        self._request_manager()

        try:
            bio_div = wait.until(
                EC.presence_of_element_located((By.XPATH, BIO_DIV_XP)))
            fb_user.biography = bio_div.text.strip()
        except TimeoutException:
            pass

        # Ritorna il profilo createo
        return fb_user