Twitter API v2を利用してツイートを収集したい方向けに、
とりあえずサクッと試せるシンプルなコードを紹介します。
Twitter APIの種類についてはこちらの記事をご参照ください。
この記事の想定読者
- Twitter API(v2)を利用したツイート収集を試してみたい
- Pythonユーザー
筆者の環境
import platform
print(platform.platform())
# macOS-12.2.1-x86_64-i386-64bit
print(platform.python_version())
# 3.10.2
Visual Studio Codeのインタラクティブウインドウを利用しています。
結論: 今回のコード全文
まず今回使うコードの全文を記載します。1
詳細はこの後説明します。
import json
from typing import NamedTuple
import urllib3
URL = 'https://api.twitter.com/2/tweets/search/recent'
KEY = 'AAAAAAAAAAAAAAAAAAAAA***'
# ご自分のBEARER TOKENを入力してください
class RequestItems(NamedTuple):
http: urllib3.PoolManager
key: str
params: dict
def request_tweets(ritems: RequestItems):
headers = {'Authorization': 'Bearer '+ ritems.key}
return ritems.http.request('GET', URL, fields=ritems.params, headers=headers)
def simple_get_tweets(ritems: RequestItems):
res = request_tweets(ritems)
return res
http = urllib3.PoolManager()
params = {
'query':'ゴールデンカムイ -is:retweet',
'max_results':10,
}
ritems = RequestItems(http, KEY, params)
res = simple_get_tweets(ritems)
print(res.status)
# 200
print(res.reason)
# OK
print(res.headers)
# HTTPHeaderDict({'date': 'Sun, 24 Apr 2022 …(略)})
print(json.loads(res.data))
# id等は適当に***でマスキングしてます
# {'data': [{'id': '151817293***', 'text': 'ゴールデンカムイでなんか胸毛をむしるらしいから読んでみたいんですよ!!!!!!!!!'}, {'id': …(略)}],
# 'meta': {'newest_id': '15181729311***', 'oldest_id': '151817270348811***', 'result_count': 10, 'next_token': 'b26v89c19zqg8o3fpy***'}}
前準備
Twitter APIのBEARER TOKENを取得する
まだTwitter API v2の利用をしたことがない方は、以下のページが参考になると思います。
urllib3のインストール
urllib3
というライブラリをpip等でインストールしてください。
コードの実行
関数定義パート
引数をrequest_tweets()
に渡しやすいようにネームドタプルを使っています。
import json
from typing import NamedTuple
import urllib3
URL = 'https://api.twitter.com/2/tweets/search/recent'
KEY = 'AAAAAAAAAAAAAAAAAAAAA***'
# ご自分のBEARER TOKENを入力してください
class RequestItems(NamedTuple):
http: urllib3.PoolManager
key: str
params: dict
def request_tweets(ritems: RequestItems):
headers = {'Authorization': 'Bearer '+ ritems.key}
return ritems.http.request('GET', URL, fields=ritems.params, headers=headers)
def simple_get_tweets(ritems: RequestItems):
res = request_tweets(ritems)
return res
実行パート
ツイート検索(収集)用のパラメータを適当にセットして実行します。
-is:retweet
で単純なリツイートのツイートを除外しています。
Jupyterなどの対話的環境であれば、
res
の中身をいろいろと観察してみると面白いかもしれません。
statusが200の場合は成功ですが、それ以外の場合はツイート取得に失敗しています。
失敗した理由を調べるには、res.reason
などが参考になります。
ツイートのデータ本体はres.data
の中にあります。
日本語で読みたい場合にはjson.loads(res.data)
を使うとよいでしょう。
http = urllib3.PoolManager()
params = {
'query':'ゴールデンカムイ -is:retweet',
'max_results':10,
}
ritems = RequestItems(http, KEY, params)
res = simple_get_tweets(ritems)
print(res.status)
# 200
print(res.reason)
# OK
print(res.headers)
# HTTPHeaderDict({'date': 'Sun, 24 Apr 2022 …(略)})
print(json.loads(res.data))
# id等は適当に***でマスキングしてます
# {'data': [{'id': '151817293***', 'text': 'ゴールデンカムイでなんか胸毛をむしるらしいから読んでみたいんですよ!!!!!!!!!'}, {'id': …(略)}],
# 'meta': {'newest_id': '15181729311***', 'oldest_id': '151817270348811***', 'result_count': 10, 'next_token': 'b26v89c19zqg8o3fpy***'}}
まとめ
- Twitter API v2でBEARER TOKENを使ったツイート収集ができた!
今後の展開
この記事ではツイート収集のシンプルなやり方について説明しました。
次回以降(の記事を書くことがあれば)、この関数を利用して、
より多くのツイートを収集するコードを紹介します。2
next_token
をうまく利用することが鍵になります。