Подтвердить что ты не робот

Очистить твиты по местоположению и местоположению твитов

Я пытаюсь использовать tweepy для загрузки твитов, используя местоположение твита, а не по местоположению пользователя. В настоящее время я могу загружать твиты с местоположением пользователя, но не могу получить местоположение твита, даже если geo_enabled возвращает True.

Например, предположим, что user_a из Нью-Йорка, но он читает из Калифорнии. Я хочу, чтобы и местоположение пользователя, и Нью-Йорк, и место твита, Калифорния.

код:

import tweepy
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import pandas as pd
import json
import csv
import sys
reload(sys)
sys.setdefaultencoding('utf8')

ckey = 'key'
csecret = 'secret'
atoken = 'token'
asecret = 'secret'
#csvfile = open('StreamSearch.csv','a')
#csvwriter = csv.writer(csvfile, delimiter = ',')

class StdOutListener(StreamListener):
    def __init__(self, api=None):
        super(StdOutListener, self).__init__()
        self.num_tweets = 0

    def on_data(self, data):
        self.num_tweets += 1
        if self.num_tweets < 5: #Remove the limit of no. of tweets to 5
            print data
            return True
        else:
            return False

    def on_error(self, status):
        print status


l = StdOutListener()
auth = OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)
stream = Stream(auth, l)
stream.filter(locations = [80.10,12.90,80.33,13.24] ) #user location 

Выход

userLocation, userTimezone, Coordinates,GeoEnabled, Language, TweetPlace
London,UK      Amsterdam                  FALSE      en         null
Aachen,Germany  Berlin                    TRUE       de         null
Kewaunee Wi                               TRUE       en         null
Connecticut, Eastern Time (US & Canada)   TRUE       en         null
                                          TRUE       en         null
Lahore, City of Gardens London            TRUE       en         null
NAU class of 2018.  Arizona               FALSE      en         null
                                          FALSE      en         null
    Pacific Time (US & Canada)            FALSE      en         null

Вышеупомянутый вывод - это очищенная версия массивных данных. Несмотря на то, что включен Geolocation, я не могу получить местоположение твита и co-ordinates.

4b9b3361

Ответ 1

  • Почему твиты с geo_enabled == True не указывают местоположение твита?

В соответствии с this, если местом или координатами является None, это означает, что пользователь не разрешил разрешение для этого твита. Пользователи с включенным geo_enabled по-прежнему должны предоставить явное разрешение на то, чтобы их точное местоположение отображалось. Кроме того, в документации указано:

geo_enabled: Когда true, указывает, что пользователь включил возможность геотегинга их твитов. Это поле должно быть истинным для текущего пользователя, который будет прикреплять географические данные при использовании статусов/обновлений POST.

  1. Как фильтровать по местоположению твита? Проверить здесь

Если вы отфильтруете по местоположению, будут включены только твиты, входящие в запрошенные ограничивающие поля, поле местоположения пользователей не будет использоваться для фильтрации твитов. Если координаты и место пусты, то твит не пройдет фильтр.

#filter all tweets from san francisco
myStream.filter(location= [-122.75,36.8,-121.75,37.8])
  1. Как фильтровать по местоположению пользователя и месту твита?

Вы можете захватить твиты из фильтра, а затем проверить расположение авторов в соответствии с интересующей вас областью.

class StdOutListener(StreamListener):
    def __init__(self, api=None):
        super(StdOutListener, self).__init__()
        self.num_tweets = 0

    def on_data(self, data):
    #first check the location is not None
        if status.author.location and 'New York' in status.author.location:
            self.num_tweets += 1
            print data
        if self.num_tweets < 5: #Remove the limit of no. of tweets to 5            
            return True
        else:
            return False
    def on_error(self, status):
        print status
  1. Как не ограничивать себя фильтрами API Twitter?

Помните, что фильтр разрешает все твиты до тех пор, пока он проходит один из параметров, поэтому, если вам нужно быть более строгим, просто включите условные предложения в def on_data(self, data), как это было в (3) для местоположения автора.