Python Twitterファイアホースの標準1%のシェル:
import sys
import tweepy
consumer_key=""
consumer_secret=""
access_key = ""
access_secret = ""
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)
class CustomStreamListener(tweepy.StreamListener):
def on_status(self, status):
print status.text
def on_error(self, status_code):
print >> sys.stderr, 'Encountered error with status code:', status_code
return True # Don't kill the stream
def on_timeout(self):
print >> sys.stderr, 'Timeout...'
return True # Don't kill the stream
sapi = tweepy.streaming.Stream(auth, CustomStreamListener())
sapi.filter(track=['manchester united'])
特定の場所からのツイートのみを解析するフィルターを追加するにはどうすればよいですか?他のTwitter関連のコードにGPSを追加する人々を見ましたPython=しかし、私はTweepyモジュール内でsapiに固有のものを見つけることができません。
何か案は?
ありがとう
ストリーミングAPIでは、場所とキーワードで同時にフィルタリングすることはできません。
境界ボックスは、他のフィルターパラメーターのフィルターとして機能しません。たとえば、track = Twitter&locations = -122.75,36.8、-121.75,37.8は、「Twitter」という用語を含むすべてのツイートに一致します(ジオ以外のツイートでも)ORサンフランシスコ地域から来ています。
ソース: https://dev.Twitter.com/docs/streaming-apis/parameters#locations
できることは、ストリーミングAPIにキーワードまたは検索されたツイートを要求してから、各ツイートを調べることでアプリ内の結果のストリームをフィルター処理することです。
コードを次のように変更すると、イギリスでツイートをキャプチャし、それらのツイートがフィルター処理されて、「manchester united」を含むもののみが表示されます
import sys
import tweepy
consumer_key=""
consumer_secret=""
access_key=""
access_secret=""
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)
class CustomStreamListener(tweepy.StreamListener):
def on_status(self, status):
if 'manchester united' in status.text.lower():
print status.text
def on_error(self, status_code):
print >> sys.stderr, 'Encountered error with status code:', status_code
return True # Don't kill the stream
def on_timeout(self):
print >> sys.stderr, 'Timeout...'
return True # Don't kill the stream
sapi = tweepy.streaming.Stream(auth, CustomStreamListener())
sapi.filter(locations=[-6.38,49.87,1.77,55.81])
フアンは正解を与えました。私はこれを使用してドイツのみをフィルタリングしています:
# Bounding boxes for geolocations
# Online-Tool to create boxes (c+p as raw CSV): http://boundingbox.klokantech.com/
GEOBOX_WORLD = [-180,-90,180,90]
GEOBOX_GERMANY = [5.0770049095, 47.2982950435, 15.0403900146, 54.9039819757]
stream.filter(locations=GEOBOX_GERMANY)
これは、他の国の一部を含むかなり粗雑な箱です。よりきめの細かいものが必要な場合は、複数のボックスを組み合わせて必要な場所に入力できます。
ただし、ジオタグでフィルタリングする場合、ツイートの数をかなり制限するに注意する必要があります。これは、テストデータベースからの約500万のツイートからのものです(クエリは、実際に位置情報を含むツイートの%ageを返す必要があります)。
> db.tweets.find({coordinates:{$ne:null}}).count() / db.tweets.count()
0.016668392651547598
したがって、1%ストリームのサンプルの1.67%のみにジオタグが含まれています。ただし、ユーザーの場所を把握する方法は他にもあります。 http://arxiv.org/ftp/arxiv/papers/1403/1403.2345.pdf