Emergency Situation Sharing Tool

Abstract#

とにかくAndroidアプリケーションからできるだけRealtimeにTweetを取得できるように頑張ります。

Topics#

きっかけ:215 Bad Authentication data#

2018年7月に何かが変わって、APPSのページ[1]で”apply for a Twitter developer account ”をしないと新しいアプリが登録できなくなった。アカウントを登録しなおして、Twitter APIでのアプリを再登録したら、新たにいろいろ登録しないといけなくなって、あげくにいままで使えていたTimeline取得の部分が動かなくなった。ちょっと調査。エラーとしては、
 "errors": [{
        "code": 215,
        "message": "Bad Authentication data."
}]
ちゃんと認証されていないということか。Oauthの部分がちゃんと動いていないのかな。

Webhook Twitter Application#

まずは、WebhookでFilterされたTweetの一覧を簡単に表示するWebアプリケーションを作ることを目指してみよう。
  • なんとかWebhookでリアルタイムにTimelineが取得できないかなー
あとで読む[2][4]
自分の理解では、Webhookを登録するとTwitter側がターゲットとして設定するアドレスに何かJSONか何かを投げてくれると理解。そのほうが確かにTwitter側のサーバの負荷は、減るような気がする。受けるのをNodejsにするか、Jerseyにするか。。まずは、Node.jsにしてみるか。よって[2]に従いまずやってみる。
{
	"errors": [
		{
			"code": 200,
			"message": "Forbidden."
		}
	]
}
おっと、[2]をよく読むとwebhookアドレスってHTTPSしか許可していないような気がする。それって。。。ちょっとかんがえないと。Jerseyか。。。あと、Callback URLの設定を見直してみるか。
  • Jersey
Web Serviceで少し紹介しているが、Jerseyを使ってTomcatアプリとして、Webサービスを実装。Twitterから求められるハッシュして返す部分で必要になるHMACについては、要求内容は[6]を、実装方法は[3][5]を参照。作ったソースはhttps://github.com/tateshitah/webhook参照。
お!できた。
{
	"id": "******************",
	"url": "https://braincopy.org/{web app name}/{application path}/{path}",
	"valid": true,
	"created_timestamp": "2018-10-17 00:19:47 +0000"
}
"https://api.twitter.com/1.1/account_activity/all/{env name}/webhooks.json?url=https%3A%2F%2Fbraincopy.org%2F{web app name}/{application path}/{path}"のenv nameのところをAccount Activity APIのSandboxに作ったアプリケーションのApp Nameを使っていたが、Dev environment labelを使うべきだった。
なんかここでSubscriptできるのって、自分のアカウントの動きのみで、欲しかった他の人のツイートをリアルタイムで受け取ることはできないような気がしてきた。

Reference#

  1. [#1]Twitter, Inc., 2018, Twitter Apps, https://apps.twitter.com/
  2. [#2]sbtseiji, 2018年06月10日, TwitterのAccount Activity APIとwebhookを使用する, https://qiita.com/sbtseiji/items/7957de5db0987d9a6891
  3. [#3]@takaki@github, 2016年07月06日, HMACをいろんな言語で, https://qiita.com/takaki@github/items/8665e6c518e377840495
  4. [#4]@Fushihara, 2018年05月17日, TwitterのAccount Activity APIを叩くnodejsコード, https://qiita.com/Fushihara/items/79913a5b933af15c5cf4
  5. [#5]andypiper, 20 Jun 2017, CRC_Example.java, https://gist.github.com/andypiper/1aa7ed86429747bb025a4c3112669d0e
  6. [#6]Twitter, Inc., 2018, Securing webhooks, https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/guides/securing-webhooks