Twitter APIのアプリケーション認証でタイムラインを取得する方法

TwitterのAPIを利用するために認証が必要です。

認証方法には下記2つがあり、利用するAPIに応じて使い分ける必要があります。

  • ユーザ認証
  • アプリケーション認証

今回、アプリケーション認証に必要なパラメータを生成する方法と、タイムラインの情報を取得する方法を紹介します。

必要なパラメータを取得する

始めにアプリケーションの登録が必要となります。

登録がまだな方はこちらを参考に登録してください。

登録が完了したら下記パラメータを控えておきましょう。

  • Consumer Key (API key)
  • Consumer Secret (API secret key)

Bearer Tokenを取得する

Bearer Tokenってなに?って方はこちらの記事がわかりやすいです。

IdM実験室: Bearer Token とは?

トークンを利用した認証・認可 API を実装するとき Authorization: Bearer ヘッダを使っていいのか調べた – Qiita

公式サイトに記載されている情報を元に進めていきます。

Application-only authentication — Twitter Developers

環境

  • MacBook Pro(macOS High Sierra 10.13.6)

取得手順

例として、先ほど控えておいたConsumer KeyConsumer Secretを次の値に置き換えて説明します。

Consumer Key kkkkk
Consumer Secret sssss

まず2つの値を:(コロン)で連結します。


kkkkk:sssss

次に連結した値をBase64でエンコードします。
ターミナルを起動し、下記コマンドでエンコード可能です。


$ echo "kkkkk:sssss" | base64
a2tra2s6c3Nzc3MK

Base64エンコードされた値でアプリケーション認証を行い、Bearer Tokenを取得します。

POST oauth/access_token — Twitter Developers


$ curl https://api.twitter.com/oauth2/token -H "Authorization: Basic a2tra2s6c3Nzc3MK" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" -X POST -d "grant_type=client_credentials"
{"token_type":"bearer","access_token":"AAAAAAAAAAAAAAAAAAAAAO5C8QAAAAAA2FAAAAAAAAAAAAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}

a2tra2s6c3Nzc3MKはBase64エンコードした値と入れ替えてください。

無事に通過すれば上のように取得できます。

タイムラインを取得してみる

先ほど取得したBearer Tokenを使って自分のタイムラインを取得してみます。

リクエストヘッダに下記のようにBearer Tokenを指定します。


Authorization: Bearer <Bearer Token>

GET statuses/user_timeline — Twitter Developers

レスポンスはJSON形式で返されるため、パイプでjqコマンドに繋げます。
jq コマンドを使う日常のご紹介 – Qiita

実行してみます。


$ curl "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=yusukeito58&count=1&include_rts=false" -H "Authorization: Bearer AAAAAAAAAAAAAAAAAAAAAO5C8QAAAAAA2FAAAAAAAAAAAAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3651  100  3651    0     0  16595      0 --:--:-- --:--:-- --:--:-- 16595
[
  {
    "created_at": "Wed Aug 22 05:20:07 +0000 2018",
    "id": 1032135302863679500,
    "id_str": "1032135302863679488",
    "text": "プログラミングの学習をするときに参考書に書いてあることを覚えようと努力する必要は全くないです。\n\n旅行で新しい土地に行くときに地図を覚えてから行かないでしょ?アプリで地図や時刻表見ながら目的地に向かうはずです。\n\nコード書くときも同じです。参考書見ながら進めばいいんです。",
    "truncated": false,
    "entities": {
      "hashtags": [],
      "symbols": [],
      "user_mentions": [],
      "urls": []
    },
    "source": "<a href=\"https://tapbots.com/software/tweetbot/mac\" rel=\"nofollow\">Tweetbot for Mac</a>",
    "in_reply_to_status_id": null,
    "in_reply_to_status_id_str": null,
    "in_reply_to_user_id": null,
    "in_reply_to_user_id_str": null,
    "in_reply_to_screen_name": null,
    "user": {
      "id": 2999115013,
      "id_str": "2999115013",
      "name": "Yusuke Ito",
      "screen_name": "yusukeito58",
      "location": "東京",
      "description": "20代後半プログラミング未経験から転職し、現在はWEB系SE。DAppsやNEMの開発もやってます。EC-CUBE用かんたんNEM決済プラグインを公開中→ https://t.co/P9Z5yg9WrV 暗号通貨 / ブロックチェーン/ 筋トレ / ゴルフ",
      "url": "https://t.co/ayZt5PJ4gP",
      "entities": {
        "url": {
          "urls": [
            {
              "url": "https://t.co/ayZt5PJ4gP",
              "expanded_url": "http://i-yusuke.com",
              "display_url": "i-yusuke.com",
              "indices": [
                0,
                23
              ]
            }
          ]
        },
        "description": {
          "urls": [
            {
              "url": "https://t.co/P9Z5yg9WrV",
              "expanded_url": "https://goo.gl/u1FKVG",
              "display_url": "goo.gl/u1FKVG",
              "indices": [
                78,
                101
              ]
            }
          ]
        }
      },
      "protected": false,
      "followers_count": 261,
      "friends_count": 134,
      "listed_count": 7,
      "created_at": "Wed Jan 28 07:04:28 +0000 2015",
      "favourites_count": 720,
      "utc_offset": null,
      "time_zone": null,
      "geo_enabled": false,
      "verified": false,
      "statuses_count": 980,
      "lang": "ja",
      "contributors_enabled": false,
      "is_translator": false,
      "is_translation_enabled": false,
      "profile_background_color": "000000",
      "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
      "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
      "profile_background_tile": false,
      "profile_image_url": "http://pbs.twimg.com/profile_images/1011599765753225216/ZaMn-Z8p_normal.jpg",
      "profile_image_url_https": "https://pbs.twimg.com/profile_images/1011599765753225216/ZaMn-Z8p_normal.jpg",
      "profile_banner_url": "https://pbs.twimg.com/profile_banners/2999115013/1524126382",
      "profile_link_color": "1B95E0",
      "profile_sidebar_border_color": "000000",
      "profile_sidebar_fill_color": "000000",
      "profile_text_color": "000000",
      "profile_use_background_image": false,
      "has_extended_profile": false,
      "default_profile": false,
      "default_profile_image": false,
      "following": null,
      "follow_request_sent": null,
      "notifications": null,
      "translator_type": "none"
    },
    "geo": null,
    "coordinates": null,
    "place": null,
    "contributors": null,
    "is_quote_status": false,
    "retweet_count": 0,
    "favorite_count": 1,
    "favorited": false,
    "retweeted": false,
    "lang": "ja"
  }
]

無事取得できました!

まとめ

1度Bearer Tokenを生成すれば、他のアプリにも使うことができます。

ただ、不必要にアクセス権限を付与していると万が一流失した際に悪用されるので注意しましょう。

ではまた。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ABOUTこの記事をかいた人

Yusuke Ito

20代後半プログラミング未経験から転職し、現在はWEBエンジニアとして働いています。 バックエンドが本職ですが、1人でサービスを立ち上げるためフロントエンドも勉強中です。 最近はDAppsやNEMの開発に夢中です。