2014年1月22日水曜日

Twitter4J で急に例外(TwitterException)が出るようになった件

タイトルの通り、開発中のアプリの Twitter 機能を久々に使ったところ
何をするにも TwitterException が発生し、全く使い物にならない状態と
なっていました。

 具体的には、
・OAuthAuthorization クラスの getOAuthRequestToken メソッド
・Twitter クラスの search メソッド
あたりを実行すると、

403:The request is understood, but it has been refused.

とか言われる始末。

わりと本気でパニックです。
何なんすか新年早々このタチの悪いドッキリは。
コレ頭にタライ落とされたほうがまだマシってもんです。

で、ネットを漁りまくったところ、

Restricting api.twitter.com to SSL/TLS traffic

要約:「2014/1/14以降、APIのアクセスはhttps限定にすっかんね。」

んな!?何コッソリ余計なことしてくれてんすか!!??



瞬間的に目の前にお花畑が広がりかけましたが、
まあ調べてみたら対応自体はそれほど難しくもないみたいで。

要は Configuration の UseSSL を true にしてやりゃいいみたいです。

参考) REST API, regarding 403 error code?

■認証オブジェクト作成(従来)
    Configuration conf = ConfigurationContext.getInstance();
    OAuthAuthorization oauth = new OAuthAuthorization(conf);

■認証オブジェクト作成(対応後)
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setUseSSL(true);
    OAuthAuthorization oauth = new OAuthAuthorization(cb.build());


■検索等で使用する Twitter オブジェクト作成(従来)
    Twitter tw = new TwitterFactory().getInstance();

■検索等で使用する Twitter オブジェクト作成(対応後)
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setUseSSL(true);
    Twitter tw = new TwitterFactory(cb.build()).getInstance();



ちなみに Twitter4J のバージョン 3.0.5 以降ならこの問題は
対応済みみたいです。

なのでライブラリ差し替え・リビルドでも対応できるんだとは思うけど、
開発中にサードパーティライブラリのバージョン変えるのって
他の挙動まで影響しないかなぁとかビビっちゃうあたりヘタレ全開。

0 件のコメント:

コメントを投稿