PythonでTwitter用のライブラリ等を使わずにRequestsでAPIを叩く方法のメモ.やりたいことは「ある一つのアカウントのツイートを定期的に通知したい」だけなので,Bearer tokenを取得して GET statuses/user_timeline API
を定期的に叩いて新しいツイートを取得すれば良い.
- TL;DR
- 手順
- Consumer Key (API Key), Consumer Secret (API Secret) の取得
- Bearer Tokenの取得
- User Timelineの取得
- まとめ
TL;DR
requestsでAPIを叩くコード.このコードではBearer Tokenの取得とTwitterアカウント「CVEnew」のタイムラインを取得している.コメントアウトしているcountの値で取ってくるツイート数を操作できる.
手順
以下のような手順で行います.1. がTwitter社のサイトで行うもので,2. 3.がプログラムで行うものです.
- Consumer Key (API Key), Consumer Secret (API Secret)を取得する為にTwitter appsでアプリを追加
- APIを叩くのに使うBearer tokenを
POST oauth2/token API
とConsumer Key (API Key), Consumer Secret (API Secret)を用いて取得 - Bearer tokenと
GET statuses/user_timeline API
を使って特定アカウントのツイートを取得
各手順の説明の前に,Twitter APIを使う際に必要になるkeyやtokenについて少しまとめておきます.
(違う部分がありましたらご指摘お願いします.)
keyやtoken
以下のようなkeyやtokenがあります.
Consumer Key (API Key)
Twitter APIを使うには認証 (ユーザ認証,アプリケーション認証)を行う必要がありますが,その認証に必要になるAPI Keyです.
Twitter appsにアプリケーションを登録し取得します.
Consumer Secret (API Secret)
Twitter APIを使うには認証 (ユーザ認証,アプリケーション認証)を行う必要がありますが,その認証に必要になるAPI Secretです.
Twitter appsにアプリケーションを登録し取得します.
Access Token
上述した認証のうちユーザ認証に使用します.Access TokenとAccess Token Secretを取得してユーザ認証を行うことができると,そのユーザの詳細な,あるいは非公開の情報にアクセスすることができます.
開発者自身のユーザ認証に使用するAccess TokenはTwitter appsに登録したアプリケーションのページから取得できます.開発者自身以外 (Twitter APIを使うサービスを利用するユーザなど)のAccess TokenはAPIを使って取得します.
Access Token Secret
上述した認証のうちユーザ認証に使用します.Access TokenとAccess Token Secretを取得してユーザ認証を行うことができると,そのユーザの詳細な,あるいは非公開の情報にアクセスすることができます.
開発者自身のユーザ認証に使用するAccess Token SecretはTwitter appsに登録したアプリケーションのページから取得できます.開発者自身以外 (Twitter APIを使うサービスを利用するユーザなど)のAccess Token SecretはAPIを使って取得します.
Bearer Token
上述した認証のうちアプリケーション認証に使用します.取得はPOST oauth2/token API
とConsumer Key (API Key), Consumer Secret (API Secret)を用いて行います.
アプリケーション認証はユーザ認証ではないので,ユーザの詳細な,あるいは非公開な情報にはアクセスできません.その代わり,公開情報 (鍵垢でないユーザのツイートなど)はBearer Token一つさえあれば取得することが可能です.
つまり,
- 公開情報にアクセスする場合はBearer Tokenを取得した上でAPIを使う
- ユーザの非公開情報にアクセスする場合は都度そのユーザのAccess Token, Access Token Secretを取得してAPIを使う
という使い分けになります.
そして今回私が行いたいのは,「鍵垢でないユーザのツイートを定期的に取得する」ことなので,アプリケーション認証を行うためのBearer Tokenが取得できれば良さそうです.
ここからは上述した手順の説明に移ります.
Consumer Key (API Key), Consumer Secret (API Secret) の取得
これらを取得するには,Twitter appsでアプリを追加する必要があります.他のサービスでもよくありますが,「このアプリでこのAPIを使うで」というのを登録し,そのアプリケーションに対してKeyやSecretを発行してもらいます.
登録手順とConsumer Key, Consumer Secretの取得方法については以下のサイトが参考になります.
(同じサイトの別セクションなので上の方をスクロールすれば下のもあります.)
Bearer Tokenの取得
Bearer Tokenの取得はPOST oauth2/token API
を使います.以下のように取得できます.
# ref: https://developer.twitter.com/en/docs/basics/authentication/api-reference/token headers = { "Content-Type" : "application/x-www-form-urlencoded;charset=UTF-8" } data = { "grant_type":"client_credentials" } oauth2_url = "https://api.twitter.com/oauth2/token" r = requests.post(oauth2_url, data=data, headers=headers, auth=(config.CONSUMER_KEY, config.CONSUMER_SECRET)) bearer_token = r.json()["access_token"] print("[*] Bearer token:", bearer_token, "\n")
Twitter appsで取得したConsumer KeyとConsumer Secretを使います.APIの詳細はコメントアウトのドキュメントをご覧ください.
User Timelineの取得
上で取得したBearer Tokenと,GET statuses/user_timeline API
を使って以下のように取得します.
# ref: http://benalexkeen.com/interacting-with-the-twitter-api-using-python/ # ref: https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-user_timeline.html username = "CVEnew" # anything url = "https://api.twitter.com/1.1/statuses/user_timeline.json" headers = { "Authorization": "Bearer {}".format(bearer_token) } params = { "screen_name": username, #"count": 1, } r = requests.get(url, headers=headers, params=params) tweets = r.json() print(tweets[0])
以上の手順を行うことで特定ユーザのタイムラインを取得できます.
一連の操作を行うプログラムは記事上部のTL;DRを参考にしてください.