11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

私が遭遇した Twitter API の OAuth 認証はまりどころ

Last updated at Posted at 2016-03-23

概要

Java でライブラリを使わず OAuth 認証を実装に挑戦. しかし, ひたすら 401 ではじかれた(泣). 私の場合 URL エンコードが主な原因だったのでその対策を記載.

Java で URL エンコードする方法

URLEncoder クラスの encode メソッドでエンコードできます.


public static String urlEncode(String target){
    String encode = "";

    try{
        encode = URLEncoder.encode(target, StandardCharsets.UTF_8.toString());
    }catch(Exception e){
        e.printStackTrace();
    }

    return encode;
}


署名用文字列の確認方法

実際に Twitter API を通すことのできる署名用文字列のサンプルはツールから生成して確認することができます.

上記ページが Twitter API の公式リファレンス.
使いたい API を選択してページの最下部に表示すると OAuth Signature Generator があります. ジェネレーターから署名用文字列を生成できます.

※ ジェネレーターを使うには Application Management でアプリを作成する必要があります

はまったポイント

  1. クエリパラメーターを URL エンコードしていなかった
  2. 署名用文字列に追加するクエリパラメーターは URL エンコードされたものをさらにエンコードすることになる
  3. API の中には POST でも URL にクエリパラメーターを含めなくてはいけないものがある

1.クエリパラメーターを URL エンコードしていなかった

1に関してはまさにそのままの理由でした. テストで英文字しか使っていない場合, 意外と気づけなかったので注意.

2.署名用文字列に追加するクエリパラメーターは URL エンコードされたものをさらにエンコードすることになる

2は署名用文字列を生成する際の注意点. すでにクエリパラメーターの段階でエンコードされているからエンコードしないのではなく署名用文字列生成時には再度, 各クエリパラメーターに対して URL エンコード行う必要があるようです.

例)
艦これ → %25E8%2589%25A6%25E3%2581%2593%25E3%2582%258C

上記例だと2度エンコードされた結果 % がさらにエンコードされ %25 となっています. このことはジェネレーターで確認すると分かります.

3.APIの中にはPOSTでもURLにクエリパラメーターを含めなくてはいけないものがある

3はかなり悩まされました, API の statuses/update を例に挙げたいと思います.左記のエントリポイントはツイートの投稿に使えるのですがドキュメントでは POST で送信することになっています. そう思ってHTTPボディにクエリパラメーターを付加して送信しても 401 で失敗します.

これに関してはドキュメントの Example Request を見ると POST なのに URL にクエリパラメーターが付加されていることが分かります. Example Request 通りに POST でも URL にクエリパラメーターを追加すると投稿できました. どうやらエントリポイントの中には POST であっても URL にクエリパラメーターを含めなくてはならないものがいくつかあるようです.

ちなみに Streaming API 1statuses/filter のエントリポイントは POST 通信で URL にクエリを付加する必要がないなど色々バラバラでした.

結論

ドキュメントをしっかりと読まなくてはならない(小並感). この記事が何かの参考になれば幸いです. ご指摘などあればご遠慮なくお願いいたします.

  1. どうやら Streaming API は廃止された模様です 参考

11
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?