2018/05/17 01:02(JST)にTwitterのAccount Activity APIが一般公開されました。
https://twitter.com/TwitterDev/status/996782993200025600
nodejsで叩いてみたのでサンプルコードの説明をします。
リンク集
- API Reference — Twitter Developers API一覧のドキュメントはこちら。
- Dev Environments — Twitter Developers Account Activity APIを使う時にアプリを紐付ける。
やり方
エンドポイントのURLを決める。WebHookなので、外部から叩けるページ。
このサンプルではhttps://example.com/twitter-webhook-test/
とします。もちろんパス名はなんでもいい。
あと、アプリのラベル名も決める。これはurlの一部になるので1単語がよい。今回はtest
とする。
twitterのアプリにコールバックURLを設定する
Twitter Application Management よりアプリを登録。権限は全部入りの「Read, write, and direct messages」で。Callback URLの所に、エンドポイントのURLを入れる。ここではアプリのラベル名は使わない。
Add a callback urlのボタンを押してリストを増やすと、消すことが出来ないので注意。二個目は適当なURLを入れておけば問題は無いが、消す手段が無い。
4つのキーをメモする。以下のキーは全て作成し直しましたので無効です。
次に、上記でapps.twitter.comに登録したアプリを、developer.twitter.comに関連付ける。
Dev Environments — Twitter Developers
「Account Activity API Sandbox」を選んで
アプリのラベル名をここで入力し、apps.twitter.comで作成したアプリを選択する。
「Account Activity API Sandbox」の項目に反映される。
この画面でのアプリの登録はもちろん解除出来るが、アプリのラベル名は裏で覚えているらしく、登録解除後 再度同じ名前で登録しようとすると弾かれる。だから「test」という名前は慎重に使おう。
これでtwitterのwebページからの設定は終了。
次に自鯖での作業。上記で決めた、エンドポイントのドメインのサーバーで実行するとよい。nodejsの環境を作ること。
使うapiは一般と企業向けでURLが違い、公式のサンプルは使いにくかったので、描き直した。
https://github.com/fushihara/twitter-account-activity-api-sample をgit cloneする。
cloneしたフォルダに以下の4つのファイルがある事を確認する
cli.js
config.sample.json
package.json
server.js
config.sample.json
をconfig.json
にコピーする。上記でメモった情報を埋める。
この時点ではhookIdの項目は空文字でよい。expressWatchPathは、webhookUrlのパス部分と一致させる。
devLabelがアプリのラベル名。
{
"TWITTER_CONSUMER_KEY": "xxxxxx",
"TWITTER_CONSUMER_SECRET": "xxxxxx",
"TWITTER_ACCESS_TOKEN": "xxxxxx",
"TWITTER_ACCESS_TOKEN_SECRET": "xxxxxxx",
"devLabel": "test",
"hookId": "",
"webhookUrl": "https://example.com/twitter-webhook-test/",
"expressWatchPath":"/twitter-webhook-test/"
}
そしてnode server.js
を起動する。表示の通り5000番ポートで待ち受けるので、nginxの環境を変えるなり、待受ポートを80にして直で受けるなりする事。
[xxx@example.com twitter-webhook-sample]$node server.js
Node app is running on port 5000
webhookUrlにブラウザからアクセスするとError: crc_token missing from request.
というメッセージが表示されればOK。
もう一つターミナルを立ち上げる。
次はcli.js
を使う。上記のスクリプトがある同じディレクトリに移動して、cli.js
にregist subsc get-list と順番にパラメータを与えて実行する。これで受信準備OK
[xxx@example.com twitter-webhook-sample]$node cli.js regist
{"id":"900000000000000000","url":"https://example.com/twitter-webhook-test/","valid":true,"created_timestamp":"2018-05-16 19:07:54 +0000"}
[xxx@example.com twitter-webhook-sample]$node cli.js subsc
204 No Content
[xxx@example.com twitter-webhook-sample]$node cli.js get-list
[{"id":"900000000000000000","url":"https://example.com/twitter-webhook-test/","valid":true,"created_timestamp":"2018-05-16 19:07:54 +0000"}]
server.js
側のターミナルにreceive crc check. token=xxxxxxxx responce=xxxxxxxxxxxxx=
というログが出ている事も確認する。
その後、Twitterで自分のアカウントでツイートしたり、自分でお気に入りツイートをfavったりする。するとserver.js
のターミナルに今までのstreaming apiのようなjsonが流れてきます。
どうやら、他人のツイートは見れないっぽい。公式には無料ユーザーでも「15 subscriptions / period」と書いてあるけど、これは何が15件なんだろう・・・。
登録解除する時は、上記のターミナルで表示されたid 今回は900000000000000000
をconfig.jsonのhookIdの項目に記入する。そしてnode cli.js del
を実行。
これで登録→確認→削除 の流れは確認する事が出来たと思う。streaming apiの代替には全くならない。アナウンスの通り、2018/08/16にstreaming apiは終了される予定。
以上です。