TwitterのAPIを使ってみました。
v2がリリースされたようでせっかくなのでこちらを。
What's New with Twitter API v2 | Docs | Twitter Developer Platform
手順
今回はとりあえずcurlでツイートを取得できるところまでやりたい。
- developerアカウントの作成
- developerコンソールでアプリの作成
- ツイートを取得する
developerアカウントの作成
手順は大体ここに載っている通り。
まず開発者アカウントを下記より作成する。
https://developer.twitter.com/en/apply/user.html
まず初めにAPIの利用目的を問われる。
※Twitterアカウントに紐づく形で開発者アカウントを発行するので、APIを使いたいアカウントにあらかじめログインしておく or 新しく作成しておく。
※元アカウントに電話番号やメアドの登録をしていない場合は開発者アカウントの作成ができないので、このページに入る前にあらかじめ登録しておいた方がスムーズ。
Individual developer account
→ 複数ユーザーで管理したい場合はTeam accountとして作ることができるっぽい。今回は自分用なのでこのまま。
What would you like us to call you?
→ 開発者アカウントの名前。好きなものWhat country do you live in?
→ 国を選択What's your current coding skill level?
→ コーディングレベルを選択。Some experienceにしておいた
この後スクショ撮り忘れちゃったけど、次のページでAPIをどんな目的で使うかとかをより細かく(※英語で)説明する。
そんなに難しく考えず、何の目的で、何の機能(ツイートの取得なのか、RTなのか、Likeなのか、DMなのか)をどう使うかを日本語で起こして翻訳アプリにお世話になれば問題無し。。
最後に利用規約に同意→メアド認証を経て開発者アカウントを作成する。
審査に数日かかったりするのかと思いきやすんなり作成できました。
developerコンソールでアプリの作成
メアド認証が済んで開発者アカウントが作成できたら、そのままプロジェクト&アプリの作成を促される(プロジェクト配下に複数のアプリを管理するイメージ)。
プロジェクトやアプリの名前は開発者用のコンソール上で確認するためのものなので好きなように入力。
このとき、アプリの説明の入力を促される場合があるので、さっき開発者アカウントを作成する際に入力したものと同じようなことを登録しておけばOK。
一番下に「Next,set up your App」とあるが今のところ必要ないので後回しでOK。
最後にアプリの完成と同時に各種トークンが発行される。一度しか表示されないのでどこかに控えておく。
ツイートを取得する
準備が整ったのでcurlを叩いてみる。
とりあえずクイックスタートで用意されているエンドポイントに、自分のBearer Tokenを入れ込んで実行すると
$ curl --request GET \ > 'https://api.twitter.com/2/tweets/search/recent?query=from:twitterdev' \ > --header 'Authorization: Bearer $BEARER_TOKEN'
{ "data": [ { "id": "1405608690493755392", "text": "In honor of #Pride month, @Meltwater is publishing a series each week highlighting important topics in the LGBTQ+ community. This week, they analyzed conversations on Twitter to better understand the challenges that the trans community faces. #Pride2021 https://t.co/SrwAJC1mMi" }, { "id": "1405586027088007170", "text": "Academic Researchers that use R 📊\n\nWe are excited to host Dr. Maria Rodriguez for our next livestream on exploratory data analysis in R with the #TwitterAPI v2\n\nTune in next Wednesday June23rd at 11 am EST on https://t.co/GrtBOXh5Y1 https://t.co/yXLl6vgPyB" }, { "id": "1405239016375545856", "text": "Want to understand what’s happening? Dip your toes into the global conversation.\nhttps://t.co/WoAf6ZXoJ5 https://t.co/7yuEJTzCmN" } ], "meta": { "newest_id": "1405608690493755392", "oldest_id": "1405239016375545856", "result_count": 3 } }
ほーん。
dataオブジェクトの中に3つツイートが返ってきた。
https://api.twitter.com/2/tweets/search/recent?query=from:twitterdev
recent
エンドポイントは過去7日間のツイートを拾ってくるらしい。かつ、query
でクエリの指定ができるっぽい。twitterdevさんによるツイートが過去7日間で3つあった模様。
In honor of #Pride month, @Meltwater is publishing a series each week highlighting important topics in the LGBTQ+ community. This week, they analyzed conversations on Twitter to better understand the challenges that the trans community faces. #Pride2021 https://t.co/SrwAJC1mMi
— Twitter Dev (@TwitterDev) June 17, 2021
{ "id": "1405608690493755392", "text": "In honor of #Pride month, @Meltwater is publishing a series each week highlighting important topics in the LGBTQ+ community. This week, they analyzed conversations on Twitter to better understand the challenges that the trans community faces. #Pride2021 https://t.co/SrwAJC1mMi" },
内容、ツイートIDともに一致している。
ちょっとまだちゃんと調べていないけど、テキスト以外の項目(添付画像や位置情報、RT情報など)も含めて取得したい場合はリクエスト送信時に他にもパラメーターが必要っぽかった。
Search Tweets reference index | Docs | Twitter Developer Platform
queryをいじってみた
https://api.twitter.com/2/tweets/search/recent?query=hoge
過去7日間の投稿のうちテキスト本文に「hoge」が含まれるツイートオブジェクトが10返ってきた(レスポンス長かったので割愛)。
特定のツイートのみを取得
https://api.twitter.com/2/tweets/1405608690493755392
特定のツイートを取得する場合はツイートIDをエンドポイントに含める。
{ "data": { "id": "1405608690493755392", "text": "In honor of #Pride month, @Meltwater is publishing a series each week highlighting important topics in the LGBTQ+ community. This week, they analyzed conversations on Twitter to better understand the challenges that the trans community faces. #Pride2021 https://t.co/SrwAJC1mMi" } }
Tweet Lookup reference index | Docs | Twitter Developer Platform
参考
各言語(Java/JS/Python/Ruby) のライブラリもあるみたいでした。