Twitter API v2 (Elevated) はいいけどよくないという話
故あって Twitter API を利用してデータを取得している。 netkeiba.com を スクレイピングするときのように、"餅から米を得る" みたいなことはしなくて済むのがありがたい。 ドキュメントも整理されており文句は無い……と言いたいが、痒いところに手が届かなかったので、その愚痴を纏める。
なお、本記事では公式のドキュメント以上の新しい情報は無い。 本当に使ってみた感想と、今後に期待する要望、それと少しの workaround があるかも〜程度である。
良いところ
いつのまにか発表されていつのまにか標準になっていた Twitter Developper API v2 だが、 v1.1 と比べて何がどうなったのか?
最も実感しやすいのが、レスポンスのスリム化だと感じた。 v1.1 では、不要な情報も全て JSON でドバッと返ってきた。 特に仕様を知らなくてもトークンさえ与えれば良い感じのデータを得られるので利用者側としては万々歳だが、データを捌くサーバ側からすると不必要な負担が増えこそすれ減らないという状況があったようだ。
v2 からは、リクエストに必要な最低限の情報を渡すと、本当に最低限のデータしか返ってこない。
例えば /2/tweets/search/recent
では、パラメタとして指定すべきは query
だけである。
これに対して返ってくるのは、以下のような JSON データだ。
実際のレスポンスデータ
{
"data": [
{
"id": "1373001119480344583",
"text": "Looking to get started with the Twitter API but new to APIs in general? @jessicagarson will walk you through everything you need to know in APIs 101 session. She’ll use examples using our v2 endpoints, Tuesday, March 23rd at 1 pm EST.nnJoin us on Twitchnhttps://t.co/GrtBOXyHmB"
},
{
"id": "1372627771717869568",
"text": "Thanks to everyone who joined and made today a great session! 🙌 nnIf weren't able to attend, we've got you covered. Academic researchers can now sign up for office hours for help using the new product track. See how you can sign up, here 👇nhttps://t.co/duIkd27lPx https://t.co/AP9YY4F8FG"
},
{
"id": "1367519323925843968",
"text": "Meet Aviary, a modern client for iOS 14 built using the new Twitter API. It has a beautiful UI and great widgets to keep you up to date with the latest Tweets. https://t.co/95cbd253jK"
},
{
"id": "1366832168333234177",
"text": "The new #TwitterAPI provides the ability to build the Tweet payload with the fields that you want. nnIn this tutorial @suhemparack explains how to build the new Tweet payload and how it compares with the old Tweet payload in v1.1 👇 https://t.co/eQZulq4Ik3"
},
{
"id": "1364984313154916352",
"text": "“I was heading to a design conference in New York and wanted to meet new people,” recalls @aaronykng, creator of @flocknet. “There wasn't an easy way to see all of the designers in my network, so I built one.” Making things like this opened the doors for him to the tech industry."
},
{
"id": "1364275610764201984",
"text": "If you're newly approved for the Academic Research product track, our next stream is for you.nnThis Thursday, February 25th at 10AM PST @suhemparack will demo how academics can use this track to get started with the new #TwitterAPInnJoin us on Twitch! 👀nhttps://t.co/SQziibOD9P"
}
],
"meta": {
"newest_id": "1373001119480344583",
"oldest_id": "1364275610764201984",
"result_count": 6
}
}
v1.1 でくっついていた様々なメタ情報が悉くスリム化されていることで、見やすいし読みやすい。
これだけじゃあ情報量少なすぎるという指摘はもっともだが、これは各種パラメータをどんどん増やすことで解決する。 必要な属性といらない属性をリクエスト時点で決められるというのが、利用者としても管理者としても都合のいい落とし所であると思った。
そして何よりドキュメントがきちんと整えられているのが好印象を残す。 無論最初は dev portal だの OAuth 2.0 だの Bearer Token だのよくわからん……という壁があったが、実は単に英語を読めていないだけというオチが待ち受けている(のできちんとじっくり読んでみよう)
よくない点
これは燦然と輝く大きなクソが一つある。
ツイート検索を API から行なうと、直近 3200 件までしか遡れない
これは Essential であろうと Elevated Standard であろうと同様である。 じゃあ Academic Research は……とおもったらこちらもまだダメであるらしい(?)
cf. https://twittercommunity.com/t/tweet-limit-at-3200/156391/4
上 述した /2/tweets/search
というエンドポイントから提供されうる上限がそこにあるということだろうか
ただし、 Academic Research であればどれだけ過去であっても「クエリを工夫すれば」アクセスすることは出来るようだ。
until:YYYY-MM-DD since:YYYY-MM-DD
をいちいちつけなきゃいけね〜ってのが、いまの API v2 のつれぇとこだよな〜〜
時点でクソなのは、 Tweet caps の存在である。 これは、一ヶ月あたりのツイート取得上限をさす。
Essential だと 500 K = 五十万ツイート である。 Elevated だとこれが 200 万、 Academic だと 1000 万まで緩和されるが、timeline だけでなく Like を探る場合でも枠が消費されてしまうらしい。
API を何らかのアプリに載せて手動でチマチマデータを得るだけなら十分に余裕のある数値だ。 しかし、 Rate Limit ギリギリを攻めながら膨大なデータを取得しようとする場合には、下手すれば 3~5 日程度で枠を使い切ってしまう。
今回は、必要なデータを試算したときにこの容量上限問題にぶち当たってしまった。 はちゃめちゃに大量のデータを取得しうるところまでは良いとして、実際にそれを集めようとすると無理なの悲しすぎる……
まとめ
っていうこの悩みも実は金を出せば解決できる可能性は高い。
Elevated であれ Academic であれ、すべて無償で提供されている API を活用しようとしたときに制限と戦うことになるわけだ。
Twitter が提供するビッグなデータで勝負したいと腹を決めたのなら、なんとかして課金するのも一つの手なのかもしれない。
ってなわけで、明日はどうすれば課金アクセスできるのか調べんとな……コストの見積もり出して算盤弾けてこそ、きちんとした価値ある社会人だと思うので(絶賛ニート無職並感)