環境対応 #536
完了新規インストールしたmikutterが起動しない
0%
説明
新規インストール(~/.mikutterがない状態)のmikutterが以下の例外で起動しなくなりました。
(Twitter側の仕様変更?)
・事象
/Users/moguno/mikutter/core/lib/mikutwitter/query.rb:70:in `query!': 400 #<Net::HTTPBadRequest:0x2d68ad8> (MikuTwitter::Error)
from /Users/moguno/mikutter/core/service.rb:187:in `user_initialize'
from /Users/moguno/mikutter/core/service.rb:52:in `initialize'
from /Users/moguno/mikutter/core/service.rb:23:in `new'
from /Users/moguno/mikutter/core/service.rb:23:in `services_refresh'
from /Users/moguno/mikutter/core/service.rb:28:in `all'
from /Users/moguno/mikutter/core/service.rb:33:in `primary'
from /Users/moguno/mikutter/mikutter.rb:37:in `<main>'
・原因
http://api.twitter.com/1/account/verify_credentials.json
へのアクセスに対して、リザルトコード400で以下のようなjsonが返ってきていました。
{"errors":[{"message":"Bad Authentication data","code":215}]}
・対策
AdHocですが上記のjsonが返ってきた場合は、認証ウインドウを表示するようにしました。
パッチを添付しますので確認をお願いします。
ファイル
toshi_a 初音 さんが約12年前に更新
- トラッカー を 致命的 から 環境対応 に変更
- ステータス を パッチ適用待ち から 実装待ち に変更
- 担当者 を toshi_a 初音 にセット
- 優先度 を 通常 から 高め に変更
- 対象バージョン を 0.2 から 0.1.1 に変更
0.1.1でも再現しました(それ以下のバージョンの更新は終了しているので検証しません)。Twitterの挙動が変更されたことにより引き起こされているようです。よって、トラッカーは「環境対応」に変更します。
具体的には、従来、トークンが無効だった場合はHTTPレスポンスコード401を返すことになっていたのに対し、Twitter API 1.1では400と、エラーコード215を返すように変更されていますが、何故か現在、Twitter API v1.0を使用しているにも関わらず、Twitter API v1.1に準じたレスポンスを返しているようで、Twitterの不具合だろうと予想します。
これが恒久的なものかどうかはわかりませんが、現在のmikutterはトークンがなくてもとりあえずAPIリクエストを発生させて、401が返ってきた時に再認証ダイアログを表示する仕様になっています。これを、トークンがない時(≒初めて起動した時)にはリクエストを発行する前に問い合わせるように修正すれば解決します(トークンが失効した時の処理は別途必要ですが)。
頂いたパッチは現状うまく機能していますが、Twitter API v1.0の仕様どおりのレスポンスが帰ってきたら、規制された時にも認証ダイアログが表示されてしまうでしょう。現在の仕様にも上記のような問題があるので、こちらで対応してみます。
Error Codes & Response https://dev.twitter.com/docs/error-codes-responses
toshi_a 初音 さんが約12年前に更新
- ステータス を 実装待ち から 様子見 に変更
対応完了。Webでトークンを破棄した状態でAPIリクエストを発行した場合の対策については、v1.0の仕様通り401が返って来たので特にしませんでした。Twitter側の不具合が原因なのでしばらく注意して様子を見ます。
toshi_a 初音 さんが約12年前に更新
ありがとうございます。ただ、Twitterのバグが原因なので、Twitterの修正などが入ったタイミングでまたおかしくならないとも限りません。そんなことを言っていたらいつまでもクローズできないので適当なタイミングで閉じますが、もう少しだけ様子を見ます。