声優統計第三号がC85に当選となったのでネタとしてはTwitterを解析しようと思った。
ということでまずはデータ取り(タイムライン取得)をやる。
結論としてはRでやるよりPythonでやるほうがよかった。あとはAPIがバージョンが変わったとかなんとかでたくさんのtweetを取得することができないらしいのでどうしようか悩む。
下準備として、Twitter Developerにアプリを登録して、Consumer key, Consumer secret, Access token, Access token secret をメモる。
PythonではTwythonが使いやすい。こちらとこちらを参考にして、オバマ大統領のタイムラインを取得してみる。結果はJSON形式で得られる。
from twython import Twython, TwythonError api = twython.setup(authtype="Basic", username="あなたのtwitter-name", password="あなたのtwitter-pass") twitter = Twython(app_key=CONSUMER_KEY, # ここらにそれぞれ app_secret=CONSUMER_SECRET, # developer でメモった oauth_token=ACCESS_TOKEN, # key を入力すると oauth_token_secret=ACCESS_TOKEN_SECRET) # 認証されるっぽい。 try: user_timeline = twitter.get_user_timeline(screen_name='BarackObama', count=30) # オバマ大統領のアカウントを30tweet取得する。 except TwythonError as e: print e for tweet in user_timeline: print tweet['text'] + "\n"
It's time to work together to get people covered. Join Team Obamacare: http://t.co/DiLZVfGBE5 Since President Obama took office in 2009, the national deficit has been cut by more than half: http://t.co/s0ByngWJcV Be a part of Team @Obamacare―help ensure millions of Americans have the info they need to get affordable health care: http://t.co/4GrX0ui3bg Don't let anyone scare you out of getting affordable health insurance. #GetCovered http://t.co/l85M6jeh8k Happy Halloween! http://t.co/HXk2zd2F8z
というわけで複数の人のtweetを取得するならば
import codecs import unicodedata import re from progressbar import * import time from twython import Twython wd = "/output/" # 出力ディレクトリ cv = [] # アカウント n_tweet = 4000 # 取得するtweet数 widgets = ["progress:", Percentage(), Bar()] pbar = ProgressBar(maxval=len(cv), widgets=widgets).start() w0 = codecs.open(wd + "tweet.tsv", "w", "utf-8") for i in cv: pbar.update(pbar.currval + 1) # 時間かかるようならプログレスバー try: # タイムラインの取得 user_timeline = twitter.get_user_timeline(screen_name=i, count=n_tweet) except TwythonError as e: print e for tweet in user_timeline: sub_text = re.sub("\n", "", tweet['text']) # 改行コードは削除しないと tsv が乱れる。 w0.write(i + "\t" + sub_text + "\n") # 書き込み w0.close() pbar.finish()
RではtwitteRでできる。が、R > 3.0 ではなんかうまくいかない。2.15.1 以下でないとうまく動かない(?)。
これがものすごい詳しそうな解説なのだが、なぜかubuntuにtwitteR入らないんだよな…
library(twitteR) reqURL <- "http://api.twitter.com/oauth/request_token" accessURL <- "http://api.twitter.com/oauth/access_token" authURL <- "http://api.twitter.com/oauth/authorize" consumerKey <- "CONSUMER_KEY" consumerSecret <- "CONSUMER_SECRET" oauthKey <- "ACCESS_TOKEN" oauthSecret <- "ACCESS_TOKEN_SECRET" twitCred <- OAuthFactory$new(consumerKey=consumerKey, consumerSecret=consumerSecret, oauthKey = oauthKey, oauthSecret = oauthSecret, requestURL = reqURL, accessURL = accessURL, authURL = authURL) options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))) twitCred$handshake(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")) # としたらアプリ認証のリンクを踏めと出るので、それを踏んでPINコードを入力する registerTwitterOAuth(twitCred) # TRUE なら多分認証が通っている。
これでタイムラインが取得できる。APIの問題でたくさん取得できないらしい。
tw <- userTimeline("BarackObama", n=3200) # 複数アカウントなら cv <- c("", ...) tw <- mapply(userTimeline, cv, n=3200)