概要
PythonからTwitter APIを利用して下記を行います。
- 検索結果にヒットしたツイートの取得
- 指定ユーザーのツイートの取得
- タイムラインの取得
とても面倒だということで名高いAPIのアカウント申請についてはここでは取り扱いません。
バージョン情報
- Python 3.7.4
- python-twitter==3.5
インストール
$ pip install python-twitter
検索してみる
python-twitterを利用した検索の実行。
検索APIのTwitter側の仕様は下記を参照。これを書いている時点では15分につき180回打てるらしい。
https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets
まずはconsumer_keyやaccess_tokenを指定してtwitter.Apiインスタンスを取得。
CONSUMER_KEY = '{your consumer key}' CONSUMER_SECRET = '{your consumer secret}' ACCESS_TOKEN = '{access token}' ACCESS_TOKEN_SECRET = '{access token secret}' import twitter api = twitter.Api(consumer_key=CONSUMER_KEY, consumer_secret=CONSUMER_SECRET, access_token_key=ACCESS_TOKEN, access_token_secret=ACCESS_TOKEN_SECRET)
検索の実行。
from urllib.parse import urlencode query = urlencode({ 'q': '大相撲', # 検索ワード 'result_type': 'recent', # recent/popular/mixed 'count': 100 # 取得するツイート数(100が最大) }) result = api.GetSearch(raw_query=query) for status in result: print(status)
戻り値は twitter.models.Status 型で返ってきます。
Statusから取得できる主な項目は下記。
# ツイート本文 status.text # お気に入り数 status.favorite_count #=> 1 # retweet数 status.retweet_count #=> 0 # 投稿時間 status.created_at #=> 'Wed Nov 06 09:46:57 +0000 2019' # 言語 status.lang #=> 'ja'
ツイートと一緒にユーザーの情報についても取れる。
# ユーザーID(数値) status.user.id # ユーザー名(メンションやURLの末尾とかに使われるやつ) status.user.screen_name # ユーザー名(表示名) status.user.name # ユーザーのフォロワー数 status.user.followers_count # ユーザーのフォロー数 status.user.friends_count # ユーザーのこれまでの記事投稿数 status.user.statuses_count # ユーザーの事項紹介 status.user.description
検索のページネーション
上記のクエリでは最大で100件までしかツイートは取れない。
max_idを指定することで、そのID以前を取得することができる。
まずは先ほどのクエリの結果から1番小さいIDを取得する。
min_id = min([status.id for status in result])
取得したIDからをクエリパラメータの max_id に指定することで、1回目のクエリで取得したIDより以前のツイートだけ取得できる。
query = urlencode({ 'q': '大相撲', 'result_type': 'recent', 'count': 100, 'max_id': min_id - 1 }) result2 = api.GetSearch(raw_query=query) for status in result2: print(status)
指定ユーザーのタイムラインを取得する
result = api.GetUserTimeline( screen_name='取りたいユーザーのscreen name', count=100) for status in result: print(status)
上記はscreen_name指定で取得しているが、intのuser_idを指定することもできる。
また検索と同じでmax_idでページングも可能。
改定履歴
Author: Masato Watanabe, Date: 2019-11-07, 記事投稿