はまったこと
以下のチュートリアル通りにやっても、Twitterの情報を取得するボタンが一向に動作しないし、エラーも出ない。
Spring framework guide : Accessing Twitter Data
解決策
Twitter APIにアクセするためにアプリケーションを事前に登録する必要があるのですが、そのアプリケーション登録画面のSettingsタブにおいて、「Callback URL」を空白のままにせず、適当なURLで良いので何かしら入力しましょう。
以下の画像の赤枠部分。
私はこれで解決しました。
詳細
Javaのフレームワークである「Spring framework」を使用して、簡単にTwitterのデータにアクセスするチュートリアルがあります。チュートリアルには所要時間15分ぐらいと記載されていましたが、ハマってしまい4時間ぐらいかかりました。同じことでハマる人が一人でも少なくなればと思い、メモを残します。
なお、このエントリ内ではSpring frameworkについての詳細や、Eclipseのセットアップなどについての解説は行いませんのでご了承ください。
議題にしているチュートリアルについては、日本語の解説を書いてくれた方が他にいらしたので、そちらを参考にされると良いと思います。
Spring boot tutorialメモ - Accessing Twitter Data
開発環境
- MacOS X Yosemite
- JDK 1.8.0_60
- Eclipse Mars Release (4.5.0)
- Eclipse Plugin : Spring IDE 関連 (3.8.0)
Twitter APIを使用するためのアプリケーションの登録について
まず、あるアプリケーションからTwitter情報にアクセスするためには、Twitter APIにアプリケーションを登録する必要があります。
議題としているチュートリアルにおいても、「以下のチュートリアルを先に行ってね」と明示してありました。
なお、アプリケーションを登録するためのパスが変更になっているように思いました。
以下にアクセスすると「Create New App」ボタンがありますので、そこからアプリケーションを登録できると思います。
登録が完了すれば、登録したアプリケーションのIDとシークレット(パスワード)を使用してアプリケーションからTwitter APIにアクセスし、プロフィール情報やフォロワーの情報などを取得することができるようになります。
はまる
さてさて、アプリケーションを登録したので、これを設定ファイルに記載してさくっと試して。。。あれ。動きません。
Webページ内のボタンを押すと自分のTwitter情報にアクセスして、自分の名前とフォロワーの情報が取得できるというチュートリアルなのですが、ボタンを押してもうんともすんとも言いません。何より困ったのがエラーも出なかったことです。
認証情報はapplication.propertiesという設定ファイルに記載するのですが、本当に読み込まれているのか不安になったため、間違ったIDやシークレットに変更して実行してみましたが。それでも何もエラーが出なかったため、いよいよ原因がわからなくなりました。
ファイル名のタイポ、ファイルやディレクトリのパスなどなど、細かいことを確認しましたが、チュートリアル通りで、特に変わった点はありませんでした。
解決
数時間ぐらいはまって、もう諦めようかなと思ったその時。「findPrimaryConnection twitter spring」という検索ワードで、以下の記事をたまたま検索することができました。
私と全く同じ相談でした。
「Twitter APIを叩くためのアプリケーションを登録して、AppID, AppSecretも正しく記載したよ。全部チュートリアル通りにやってるけど動かない。エラーも出ないし、なんで?」
これです、これ!回答者曰く。
You need to set the Callback URL in your Twitter's application settings - that should be said in Spring guides.
For instance, I have my app working with this callback url:
http://127.0.0.1:3000/auth/twitter/callback
つまり、「Twitterにアクセするするアプリケーションの設定画面で、Callback URLをちゃんと入力する必要があるよ。これはチュートリアルに書いてあるべきだね。例えば、私は以下のURLを入力してちゃんと動いているよ。」とのことでした。
相談者のリプライです。
I filled up main web site URL but didn't set value of Callback URL that cause the problem for me. Thank you. It's working now.
「メインのサイトURLの方は入力したんだけど、そちらはしてなかったです。ありがとう。動くようになりました。」とな。
やってみよう
Callback URLはとりあえずは適当なものでよいらしいので、先の回答者の方と同じにしました。
もう一度試してみると。。。動きました!!
任意だったから入力しなかったんですが、まさかそれが原因とは。脱力です。
何かしら警告やエラーは出して欲しかったです。。。涙
Spring frameworkのチュートリアルにはぜひ加筆して頂きたいですね。
まとめ
Twitter APIや設定項目について、もう少し知識があればこんなにはまらなかったでしょう。反省です。
また、エラーログが出ない件の調査やデバッグは大変なので、自分が作るときはちゃんと親切なログを出そうと改めて思いました。
連休の最終日の時間を大きく消費してしまいました。とりあえず動いたし、Qiitaのエントリも久々に書くことができたので結果オーライということにしておきましょう。=)
どなたかのお役に立てば幸いです。ではでは。
Special Thanks
文中でもリンクを張りましたが改めて。ありがとうございました!!