pythonでツイート取得
わかりやすいページが多いけれど練習と覚書きとして。python を用いて、ツイッターへアクセスしツイートを取得、テキストファイル(text.txt)に保存する。今後テキストを元に解析を行ってみる予定。
もくじ
1 API認証
使用するパッケージの選択
python における twitter では以下の3通りのパッケージが存在する。ざっと見た感じ twitter を用いているものが多い。今回は twitter パッケージを用いるが、いずれにせよどれかに統一して用いたほうがメソッド覚えやすい。
- tweepy
- requests_oauthlib
参照:twitter,tweepy, requests_oauthlib
APIの認証
APIの使い方まとめにわかりやすくまとめられているので参照。基本はアカウント登録をし、ここから4つのキー及びトークンを得ることができればOK。最近ではアカウントの方で電話番号の認証を行わないとAPI登録できないようなので注意。
2 python-twitter を用いてテキストの取得
twitter パッケージをインポート。twitter パッケージのApiメソッドを用い、先ほど得たキーとトークンで認証を行う。この認証を行わないと public timeline 以外にアクセスできない。
import twitter # Apiメソッドでアクセス認証 api = twitter.Api ( consumer_key = 'ここに自分のものを1', consumer_secret = 'ここに自分のものを2', access_token_key = 'ここに自分のものを3', access_token_secret = 'ここに自分のものを4' )
以降はこの api のメソッドを用いることでTLや、お気に入り、フォロワーなどを得ることができる。以下では特定のアカウントのツイートをテキストファイルとして text.txt に保存している。
# 特定アカウントのツイートを得る userTL = api.GetUserTimeline(screen_name = "ここに特定アカウントID", count=200) k = 0 # 初期値 while k<19: # 繰り返しでツイート取得 tweets = [None]*len(userTL) # ここに取得したツイートをしまう for i in xrange(0, len(userTL)): f = open("text.txt" , "aw") tweets[i] = userTL[i].text.encode("utf-8") if "http" in tweets[i]: # URLカット tweets[i] = tweets[i].split("http", 1)[0] if "@" in tweets[i]: # リプライカット tweets[i] = tweets[i].split("@")[0] if "RT" in tweets[i]: # RTカット tweets[i] = tweets[i].split("RT")[0] f.write(tweets[i]) f.flush() f.close() k += 1 print k #これが19まで出ればうまくいってるはず maxid = userTL[len(userTL)-1].id userTL = api.GetUserTimeline( screen_name = 'ここに特定アカウントID', count=200, max_id=maxid)
api.GetUserTimeline()
で得たツイートは各ツイートごとに様々な属性を持っている(ツイート内容や、お気に入りの有無など)。そのため、テキストのアクセスにはuserTL[0].text
のような形でアクセスする必要がある。API制限によって3200ツイートしか取得できないため、while文のkを制限している(なぜ18回まで回るのか不明。19回以上回すとエラーが起きる)。中のfor文は取得したツイートのテキストを text.txt に保存している。1回で200ツイート取得、中のfor文で各ツイートのテキストをtext.txtに書き込む。その後取得したツイートの最後のツイートidをmaxidに入れて、while文でmaxidより古い次の200ツイートを取得以下同…。と回している。
text.txtに書き込む際、ついでにURないしRTを含むツイートと、リプライをカットしている。
うまくいけば、これでディレクトリにtext.txtにツイートがテキストファイルで保存されているはず。
おまけ
twitterパッケージの引数やら属性がいまいちわからない。いろんなパッケージを触ってしまったらなおのこと。引数を知りたいときはimport inspect
してinspect.getargspec(apiなど)
、属性を知りたいときは dir(userTL[0])
で一覧表示可能。結構使える。