PythonでTwitterのデータを取得する


はじめに

今回はPythonで
Python Twitter Tools (https://github.com/sixohsix/twitter)
というものを使って、TwitterAPIにアクセスしてみたものを載せておきます。

Twitter Developerへの登録

https://syncer.jp/Web/API/Twitter/REST_API/
が参考になります。
というか普通にAPIを叩く場合はここを見ればいけそう

Python Twitter Tools

https://github.com/sixohsix/twitter
でダウンロードします。

python setup.py install

でインストールできます。

Twitterクラス

from twitter import Twitter, OAuth

でインポートした後に、

t = Twitter(auth=OAuth(
        <access token>,
        <access token secret>,
        <consumer key>,
        <consumer secret>
    ))

でTwitterクラスを作ります。
このクラスを使って色々とTwitterのデータを取ることができるようになります。

例えば

searchTweets = t.search.tweets(q = "Qiita")

で「Qiita」についてのTweetを取得することができます。

friends = t.friends.ids()

で「自分のアカウント」がフォローしてるユーザのID群を取得できます。

なお出力結果は大変長いため載せませんが
https://dev.twitter.com/rest/public/rate-limits
に全て書いてあります。

サンプル:自分のフォローしてる人の情報を取得

remain = True
next_cursor = 0
while remain:
    friendsInfo = t.friends.list(cursor=next_cursor)
    for user in friendsInfo['users']:
        friendsNameList.append({
                'NumberID':user['id'],
                'userID':user['screen_name'],
                'userName':user['name']
            })
    next_cursor = friendsInfo['next_cursor']
    if(next_cursor == 0):
        remain = False
        print('Finish search')

TwitterAPIは一度に大量のデータにアクセスできず、代わりにcursorという方法をとっています。これは端的に言えば、各々のアクセスの時に「どこからデータを取り始めるか」ということを示すものです。

つまりfriends.listのcursor引数は、データを取り始める場所を指定していることになります。各ユーザデータにはnext_cursorというデータが入っており、それを次の引き数に持ってくれば、次々と新しいデータを取り込んでくれます。

サンプル2 あるユーザのTweetを取ってくる

remain = True #ループ判定
userTweets = [] #tweetの格納先
max_id = <一番新しいtweetID>
remainNum = 0
numberOfTweets = 500 #取ってくるtweetの数
count = 200 #一度のアクセスで何件取ってくるか
while remain:
    aTimeLine = t.statuses.user_timeline(user_id = <誰かのTwitterID番号>, count=count, max_id=max_id)
    for tweet in aTimeLine:
        userTweets.append(tweet['text'])
    max_id = aTimeLine[-1]['id']-1
    remainNum = numberOfTweets - len(userTweets)
    count = remainNum
    if len(userTweets)+1 > numberOfTweets:
        print('finish search')
        remain = False

max_id というのは先程のcursorと同じような使い方です。一度の全部取ってこれないので、TweetのIDを参照して取る場所を指定します。ちなみにこのコードは500件キレイに取るための初心者コード丸出しです・・・。 あと500件以下しかtweetしてないアカウントの場合アウトですね。
一応勉強の経過として載せておきます。

終わりに

色々なデータがあるTwitterですが、APIの制限は結構きつかったりします。けど、そのやり方さえ覚えてしまえば、後はドキュメントを参照すればほしいデータは取れる気がします。

Python Twitter Tools Github
Twitter Developer ドキュメント
cursorの説明