🐣

Twitter APIの使い方まとめ(認証情報の種類・Goサンプル実装)

2021/03/15に公開

TwitterのAPIを使ってみたので、その方法をまとめました🐈

  • Twitter Developer Portalってなに?Projectって?Appって?
  • アクセストークンの種類多くない?
  • どのAPIを呼び出すにはどのアクセストークンが必要なの?

などなど、いろいろ調べてGo言語でサンプル実装してみたのでまとめました!

TwitterAPIの公式ドキュメントはこちらになります。
https://developer.twitter.com/en/docs/twitter-api

TL;DR

こちらのリポジトリを参考にしてください
https://github.com/nekoshita/twitter-api-example-by-golang

Twitter APIの使い方の3つのパターン

  • ①Twitterユーザーの認証が不要なAPI
    • ユーザー認証が不要なAPIをたたくサンプル
    • ツイートを検索したり、ユーザーのタイムラインを取得するだけならこれ
  • ②TwitterAppのオーナーのTwitterユーザーの認証情報を利用したAPI
    • TwitterAppのオーナーのTwitterユーザー = 自分自身
    • 不特定多数のTwitter UserにTwitter Sign-inを要求しないが、ユーザー認証が必要なAPIを叩く場合はこれ
    • 自分のTwitterアカウントで、ツイートするAPIやいいねするAPIを叩く場合はこれ
  • ③不特定多数のTwitterユーザーの認証情報を利用したAPI
    • 不特定多数のTwitter UserにTwitter Sign-inを要求し、それぞれのTwitter UserのAccess Tokensを使ってユーザー認証が必要なAPIを叩く場合はこれ
    • たとえば、Twitter Sign-inをしてくれたTwitterユーザーに対して、フォローするAPIをたたいてあげる、みたいなことやる場合はこれ

Twitter APIをたたくために必要な認証情報について

  • 全てのTwitter APIをたたくには、TwitterDeveloperPortalで作成したTwitter Appの Consumer Keys による認証が必要
  • 特定のユーザーに対するアクション(フォローするなど)などのAPIを叩く場合は、Consumer Keys に加え、Twitter UserのAccess Tokenが必要
  • Twitter UserのAccess Tokenの取得方法
    • Twitter AppのオーナーであるTwitter User(=自分)のAccess TokenTwitterDeveloperPortal上でAccess Tokenの取得可能
    • Twitter AppのオーナーではないのTwitter User(=不特定多数のTwitter User)のAccess Tokenを取得するには、Twitter Sign-inによる認証をする必要がある

認証情報の発行手順

1, Twitter DeveloperでのAPIの利用申請をする

https://developer.twitter.com/en/portal/dashboard
にアクセスして、Twitterアカウントでログインすると、Developer申請をするためにいろいろ質問ます。
全てに回答すれば、APIの利用申請が完了します。

https://developer.twitter.com/en/portal/dashboard
が見れるようになればOKです

2, ProjectとAppを作る

https://developer.twitter.com/en/portal/dashboard
にアクセスし、+Create Project からプロジェクトを作ります

3, トークンを発行する

トークンの種類は全部で5つ

  • Consumer Keys
    • API key
      • 勝手に発行されている
      • 再発行可能
      • Twitter APIをたたくのに必須
    • API key secret
      • 勝手に発行されている
      • 再発行可能
      • Twitter APIをたたくのに必須
  • Authentication Tokens
    • Bearer token
      • 発行可能
      • Consumer Keysを使って発行することもできるし、TwitterDeveloperPortal上で発行もできる。どちらもでよい
    • Access token
      • 発行可能
      • Twitter App のオーナーのTwitter Userの認証情報
    • Access token secret
      • 発行可能
      • Twitter App のオーナーのTwitter Userの認証情報

全てのトークンに関する共通の仕様は

  • 有効期限はない
  • それぞれの種類のトークンは1つずつしか発行できない
  • 再発行は可能だが、再発行した瞬間に過去のトークンは無効化される
  • 利用可能なトークンは常に最新の発行してるトークンのみ

Twitter APIをたたくサンプル

[Twitter APIの使い方の3つのパターン](#Twitter APIの使い方の3つのパターン)で紹介した3つのパターンそれぞれのパターンでTwitter APIをたたきます

①Twitterユーザーの認証が不要なAPI

  • curlでやる場合

TwitterDeveloperPortalBearer tokenを発行する

# @nekoshita_yukiのタイムラインを取得する
# https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/api-reference/get-statuses-user_timeline
curl -H "Authorization: Bearer 発行したBearer token" \
'https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=nekoshita_yuki&count=10'
  • goでやる場合

TwitterDeveloperPortalConsumer Keysを発行する

こちらの実装を参考にしてください!(記事長くなっちゃうので割愛)
https://github.com/nekoshita/twitter-api-example-by-golang/tree/master/no-user-context-api

②TwitterAppのオーナーのTwitterユーザーの認証情報を利用したAPI

  • curlでやる場合

OAuth 1.0a 認証を行う必要があり、signitureを自分で用意するのがめんどくさいので、やりませんでした。
気になる方はこの記事が参考になると思います
https://qiita.com/kerupani129/items/ee9d894cc67101f16c3f

  • goでやる場合

TwitterDeveloperPortalConsumer Keys Access Tokensを発行する

こちらの実装を参考にしてください!(記事長くなっちゃうので割愛)
https://github.com/nekoshita/twitter-api-example-by-golang/tree/master/user-context-api-by-app-owner

③不特定多数のTwitterユーザーの認証情報を利用したAPI

これが一番大変です
Twitter Sign-inによる認証を行い、認証したTwitterUserのAccess Tokensを使う必要があります

  • goでの実装サンプル

TwitterDeveloperPortalConsumer Keysを発行する

こちらの実装を参考にしてください!(記事長くなっちゃうので割愛)
https://github.com/nekoshita/twitter-api-example-by-golang/tree/master/user-context-api-by-any-user

認証情報の取り扱いには十分お気をつけを!

Twitterも公式で気をつけてねって言ってます
https://developer.twitter.com/ja/docs/basics/authentication/guides/securing-keys-and-tokens

Twitter APIの豆知識

AppとProjectってなに?

  • ProjectはAppを内包する概念
  • Projectは最近できた概念
  • ProjectにAppを内包しなくてもよい
  • Projectに内包されていないAppはStandalone Appとなる
  • twitter API V2.0を使いたければ、AppをProjectに内包しないとダメ
  • 現状1ユーザーにつき、1Projectしか作れない
  • 現状1Projectにつき、1Appしか作れない
  • 現状Standalone Appは複数つくれる
  • ソース

Twitter APIのバージョン

  • 今はv1.1とv2.0が使えるよう
  • v2.0にあるAPIはまだ限られているので、v1.1に存在するけど、v2.0には存在しないAPIは多数ある
  • v2.0のAPIを使うのは、Project内にAppを作成、または移行する必要がある

トークンの種類と役割

  • Consumer Keys
    • どのTwitter AppがAPIを叩いているのか判別するためのAPI
    • Twitter APIを叩くには、このキーが必須である
    • 特定のユーザーに対するアクションは実行できない(ツイートする、フォローするなど)
  • Bearer token
    • Consumer Keysを使って発行するトークン
    • APIを叩く時は、Consumer Keysではなく、このBearer Tokenをヘッダーに付与する
    • Bearer TokenはTwitterDeveliperConsole上、または、API経由で発行可能
  • Access token & secret
    • どのTwitterユーザーがAPIを叩いているのか判別するためのAPI
    • このキーがあれば、特定のユーザーに対するアクションを実行できる(ツイートする、フォローするなど)
    • TwitterAppを作成したTwitterユーザーのAccess token & secretは、TwitterDeveloerConsole上から発行可能
    • TwitterAppを作成したTwitterユーザー以外のAccess token & secretを取得するには Twitter Sign-inを実装する必要がある

参照
https://developer.twitter.com/en/docs/twitter-api/enterprise/account-activity-api/guides/authenticating-users

App作成の制限

Daily App Creation Limit Reached
Your daily allowance of 3 new Apps has been reached. Wait 24 hours before creating another.

いろいろ試してたら、こんな制限に引っかかりました。
いろいろ試す人はお気をつけください。

最後に

僕的な理解をまとめたので、間違ってるかもしれないです!
この記事の内容は鵜呑みにしないで、公式ドキュメントをしっかり読んでください🙇‍♀️
もし間違いを発見した方がいらっしゃいましたら、優しくご指摘いただけると嬉しいです。

Discussion