社会ノマド

備忘録と書きもの練習帳。とくに何らかのハンドリング系と、雑多な話題に関する読書録になるかなと思います。

pythonでツイート取得

 わかりやすいページが多いけれど練習と覚書きとして。python を用いて、ツイッターへアクセスしツイートを取得、テキストファイル(text.txt)に保存する。今後テキストを元に解析を行ってみる予定。

もくじ

  1. API認証
  2. python-twitter を用いてテキストの取得

1 API認証

使用するパッケージの選択

python における twitter では以下の3通りのパッケージが存在する。ざっと見た感じ twitter を用いているものが多い。今回は twitter パッケージを用いるが、いずれにせよどれかに統一して用いたほうがメソッド覚えやすい。

参照: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]) で一覧表示可能。結構使える。

反省と予告

  • twitterメソッドはやっぱりまとめておきたい
  • 取得したテキストデータを用いて分析