Twitter APIの使い方まとめ(認証情報の種類・Goサンプル実装)
TwitterのAPIを使ってみたので、その方法をまとめました🐈
- Twitter Developer Portalってなに?Projectって?Appって?
- アクセストークンの種類多くない?
- どのAPIを呼び出すにはどのアクセストークンが必要なの?
などなど、いろいろ調べてGo言語でサンプル実装してみたのでまとめました!
TwitterAPIの公式ドキュメントはこちらになります。
TL;DR
こちらのリポジトリを参考にしてください
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 Userに
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 Token
はTwitterDeveloperPortal上でAccess Token
の取得可能 - Twitter AppのオーナーではないのTwitter User(=不特定多数のTwitter User)の
Access Token
を取得するには、Twitter Sign-inによる認証をする必要がある
- Twitter AppのオーナーであるTwitter User(=自分)の
認証情報の発行手順
1, Twitter DeveloperでのAPIの利用申請をする
全てに回答すれば、APIの利用申請が完了します。
が見れるようになればOKです
2, ProjectとAppを作る
+Create Project
からプロジェクトを作ります
3, トークンを発行する
トークンの種類は全部で5つ
- Consumer Keys
- API key
- 勝手に発行されている
- 再発行可能
- Twitter APIをたたくのに必須
- API key secret
- 勝手に発行されている
- 再発行可能
- Twitter APIをたたくのに必須
- API key
- Authentication Tokens
- Bearer token
- 発行可能
-
Consumer Keys
を使って発行することもできるし、TwitterDeveloperPortal上で発行もできる。どちらもでよい
- Access token
- 発行可能
- Twitter App のオーナーのTwitter Userの認証情報
- Access token secret
- 発行可能
- Twitter App のオーナーのTwitter Userの認証情報
- Bearer token
全てのトークンに関する共通の仕様は
- 有効期限はない
- それぞれの種類のトークンは1つずつしか発行できない
- 再発行は可能だが、再発行した瞬間に過去のトークンは無効化される
- 利用可能なトークンは常に最新の発行してるトークンのみ
Twitter APIをたたくサンプル
[Twitter APIの使い方の3つのパターン](#Twitter APIの使い方の3つのパターン)で紹介した3つのパターンそれぞれのパターンでTwitter APIをたたきます
①Twitterユーザーの認証が不要なAPI
- curlでやる場合
TwitterDeveloperPortalでBearer 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でやる場合
TwitterDeveloperPortalでConsumer Keys
を発行する
こちらの実装を参考にしてください!(記事長くなっちゃうので割愛)
②TwitterAppのオーナーのTwitterユーザーの認証情報を利用したAPI
- curlでやる場合
OAuth 1.0a 認証を行う必要があり、signitureを自分で用意するのがめんどくさいので、やりませんでした。
気になる方はこの記事が参考になると思います
- goでやる場合
TwitterDeveloperPortalでConsumer Keys
Access Tokens
を発行する
こちらの実装を参考にしてください!(記事長くなっちゃうので割愛)
③不特定多数のTwitterユーザーの認証情報を利用したAPI
これが一番大変です
Twitter Sign-inによる認証を行い、認証したTwitterUserのAccess Tokensを使う必要があります
- goでの実装サンプル
TwitterDeveloperPortalでConsumer Keys
を発行する
こちらの実装を参考にしてください!(記事長くなっちゃうので割愛)
認証情報の取り扱いには十分お気をつけを!
Twitterも公式で気をつけてねって言ってます
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を実装する必要がある
参照
App作成の制限
Daily App Creation Limit Reached
Your daily allowance of 3 new Apps has been reached. Wait 24 hours before creating another.
いろいろ試してたら、こんな制限に引っかかりました。
いろいろ試す人はお気をつけください。
最後に
僕的な理解をまとめたので、間違ってるかもしれないです!
この記事の内容は鵜呑みにしないで、公式ドキュメントをしっかり読んでください🙇♀️
もし間違いを発見した方がいらっしゃいましたら、優しくご指摘いただけると嬉しいです。
Discussion