Twitter4jのdestroyStatus(statusId)実行時にエラーになる

定期的にTweetするアプリで、前回Tweetした内容を削除してからTweetするような実装のアプリを作った。
※前回TweetしたときのステータスIDは、DBに保持して使いまわしていた。

アプリの利用者によっては、前回Tweetした内容を手動で削除する人もいるだろうと思い、手動で削除したあとに削除されたステータスIDでdestroyStatusメソッドを呼び出すとどうなるのか検証したところ、以下の例外が発生した。

——————————————
Caused by: 404:The URI requested is invalid or the resource requested, such as a user, does not exists. Also returned when the requested format is not supported by the requested method.
message – Sorry, that page does not exist
code – 34

Relevant discussions can be found on the Internet at:
http://www.google.co.jp/search?q=168a95bc or
http://www.google.co.jp/search?q=10e85352
TwitterException{exceptionCode=[168a95bc-10e85352], statusCode=404, message=Sorry, that page does not exist, code=34, retryAfter=-1, rateLimitStatus=null, version=4.0.1}
at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:164)
at twitter4j.HttpClientBase.request(HttpClientBase.java:53)
at twitter4j.HttpClientBase.post(HttpClientBase.java:82)
at twitter4j.TwitterImpl.post(TwitterImpl.java:1986)
at twitter4j.TwitterImpl.destroyStatus(TwitterImpl.java:243)
at com.otftr.aliveMonitterWeb.logic.impl.ResultContactControllerLogicImpl$ResultContactControllerThread.tweet(ResultContactControllerLogicImpl.java:243)
… 2 more
——————————————

例外の内容を読む限り、また調べる限り『APIが存在しない または サポートが終了したAPI』のように見えたので、Twitter4jのバージョンを最新にしてリトライしてみたが、結果同様の例外が発生した。

仕方なく、エラーコード34は、無視するように実装。
———————–
try {
twitter.destroyStatus(threadTwitterInfo.getBeforeTweetId());
} catch (TwitterException e) {
// 削除対象のステータスIDが存在しない場合は、エラーとせずに続行する
if (e.getErrorCode() != 34) {
throw new RuntimeException(e);
}
}
———————–

Twitterの公式をみると、エラーコード34はHTTPステータスの404と同じで、APIが存在しないときに発生するというようなことが書いてある。
https://dev.twitter.com/docs/error-codes-responses

なので、本当にこの対応で良いか不明なので、暫定対応ということで。
この実装にしておくと、APIが本当に存在しなくなったときに、対応が遅れそう!

 

コメントを残す

メールアドレスが公開されることはありません。