LoginSignup
43

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-02-19

はじめに

今回は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の説明

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43