世の中の動向を知るのに使えないかと、Twitterのデータを、Twitter APIを使って取得してみました。
結論から言うと、Twitter APIの制限がキツイと噂には聞いていましたが、本当にキツ過ぎて使い物になりませんでした…。
Twitter APIでデータを取得するところまではやったので、Twitter APIの使い方メモとして記しておこうと思います。
はじめに
手順は下記記事を参考にしました。
ざっくり手順と注意点をまとめると、下記になります。
- Twitter APIを使うには、Twitterアカウントが必要
- Twitterアカウントは電話番号登録しておかないといけない
- Twitterアカウントで、Developer登録する
- Developerサイトで、アプリを登録する
- Twitter APIを使うだけなら、アプリ登録の「Enable Sign in with Twitter」のチェックはOFF
- アプリで「API key」「API secret key」「Access token」「Access token secret」を生成する
「API key」「API secret key」「Access token」「Access token secret」の4つの情報があれば、Twitter APIが使えます。
Developerサイトのアプリのトークン画面
「API key」「API secret key」「Access token」「Access token secret」が載っている
Twitter認証するサイトを作りたい時など、Twitterアカウントでログインした人のトークンを使って、Twitter APIをコールするようなアプリを作る際は、 アプリ登録の「Enable Sign in with Twitter」にチェックをONにします。
Google認証のサイトを作る時に、Googleにアプリを登録するのと同じやつですね。
使い方
認証周りがややこしそうなのですが、幸いJavaScriptに「twitter」という、Twitter APIを使うライブラリがあったのでそれを使いました。
どういうAPIがあって、どう使うかは、Twitter APIリファレンスを見て調べます。
例えば、米津玄師さんの最近のツイートを取得するのは、下記になります。
import * as Twitter from 'twitter'; const tw = new Twitter({ consumer_key: '<API key>', consumer_secret: '<API secret key>', access_token_key: '<Access token>', access_token_secret: '<Access token secret>' }); function twitterAPIGet(client: any, url: string, params: any) { return new Promise((resolve, reject) => { client.get(url, params, (error: any, response: any) => { if (!error) { resolve(response); } else { reject(error); } }); }); } (async () => { try { const url = 'statuses/user_timeline'; const params = { screen_name: 'hachi_08' }; const res = await twitterAPIGet(tw, url, params); console.log(res); } catch (err) { console.log(err); } })();
制限
噂には聞いていたのですが、想像以上に制限がキツかったです。
APIによって違うのですが、制限キツイものだと、15分の間に15回、つまり1分につき1回しかコールできません。
例えば、米津玄師さんのフォロワー(約230万人)のデータををTwitter APIで取得しようとすると、1分に1コール、1コールにつき200人までしか取得できないので
230万人÷200人÷60分÷24時間=約8日
かかります…。
また、時間を掛けさえすれば、全ての情報を取得できるかというと、そうでもありません。
例えば、指定したTwitterアカウントの全てのツイートを取得しようとしても、APIで取得できるのは、あくまで最近のツイートのみです。
ざっくりとAPIに目を通した感じ、Twitterとしては、外部の人間にTwitterから情報収集させる気はなさそうで、Twitter APIは、持っているもしくは、認証したTwitterアカウントの操作としての利用をメインで考えているようです。
有料プラン
いつくかお金を払うと使える機能があるので紹介します。
検索
ツイートを検索できるAPIが、別に有料で提供されています。
キーワードによるざっくりとした検索しかできず、新聞の記事検索のような使われ方を想定したAPIです。
自分に関すること
自分のツイートや、自分のフォロワーなど、自分に関する情報を取得する時でさえ、同じAPI制限がかかります。
お金を払ってでもいいから、自分の情報を取得したいというユーザー向けに、自分の情報を取得するためのAPIが、別に有料で提供されています。
- https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/overview
- https://developer.twitter.com/en/docs/metrics/get-tweet-engagement/overview
ただし、自分のエンゲージメントは全て取得できるのですが、他はアクティビティが発生した時にWebhookする仕様なので、過去に遡っての情報取得はできません。
取得手段は用意しない代わりに、データはリアルタイムでそっちに流すから、後は自分で保存しておけということですね。
感想など
色々Twitterから情報を集めたいなぁと思ったのですが、Twitter APIで広域に情報収集するのは現実的ではないですね。がっかり…。