TwitterのStreaming APIを使ってみた
PythonでStreaming APIを使ったので、そのときのことをメモ。
目的
今回の目的は、リプライ かつ 日本語のツイートを取得することでした。
だから、guess_languageというライブラリを利用しています。
また、ファイルが大きくなるのを防ぐために1000ツイートで書き込むファイルを変えています。
コード
# -*- coding: utf-8 -*- import json import urllib2 import oauth2 as oauth import guess_language def is_japanese(text): """"ツイートが日本語かどうか判定する""" if guess_language.guessLanguage(text) == 'ja': return 1 return 0 def streaming(): """Streaming APIを利用してツイートを取得""" CONSUMER_KEY = '*****' CONSUMER_SECRET = '*****' ACCESS_TOKEN_KEY = '******' ACCESS_TOKEN_SECRET = '******' consumer = oauth.Consumer(key=CONSUMER_KEY, secret=CONSUMER_SECRET) token = oauth.Token(key=ACCESS_TOKEN_KEY, secret=ACCESS_TOKEN_SECRET) # エンドポイントURL url = 'https://stream.twitter.com/1/statuses/sample.json' params = {} request = oauth.Request.from_consumer_and_token(consumer, token, http_url=url, parameters=params) request.sign_request(oauth.SignatureMethod_HMAC_SHA1(), consumer, token) res = urllib2.urlopen(request.to_url()) i = 0 #ツイート数 j = 0 #ファイル番号 f = open('tweet/tweets.' + str(j) + '.tlg', 'w') for r in res: try: data = json.loads(r) reply_id = str(data['id']) reply_text = data['text'].encode('utf_8').replace('\n', '') tweet_id = str(data['in_reply_to_status_id']) except: continue if tweet_id != 'None' and is_japanese(reply_text): f.write(reply_id + '\t' + tweet_id + '\n' + reply_text + '\n\n') i += 1 if i % 1000 == 0: i = 0 f.close() j += 1 f = open('tweet/tweets.' + str(j) + '.tlg', 'w') f.close() if __name__ == '__main__': streaming()
例外処理を書いているのは、ときどきAPIが空のリクエストを返すらしいからです。
これとOauth認証でツイートの情報を取得を組み合わせると、ツイートとリプライの組みを取得できます。