自分の備忘録として、TwitterAPIをRailsで利用するまでの手順をまとめました。
事前準備
■ Twitterアカウントの作成
Twitterアカウントがないと、Twitter Developerに登録できません。
※手順は端折ります。
■ Twitter Developerに登録
「Apply」をクリック。
「Apply for a development acoount」をクリック。
Hobbyist -> Making a bot. -> 「Get started」をクリック。
各種情報を入力します。
スクロールするといくつか質問事項がありますので、適宜入力してください。
※Twitterアカウントにメールアドレスの登録ができている必要があるようです。
ここが一番面倒ですが、TwitterAPIの使用目的などを記載します。
google翻訳などを駆使して何とか入力しましょう。
入力不要な項目はチェックを外すことで入力欄がなくなります。
利用規約に同意する場合はチェックを入れて、「Submit application」をクリック。
これでTwitter Developerに登録されますが、審査に時間がかかる場合があるようです。
※余程変な内容でなければ審査は普通に通ると思います(たぶん・・・)。
追記:
この審査結構厳しいようで、私の場合は2回再提出してくれメールが届きました・・・。
こちらの記事を参考になんとか乗り越えました。
■ Twitter Developerでプロジェクトを作成
というわけでTwitter Developerのトップページから早速プロジェクトを作成してみます。
「Developer Portal」をクリック。
使用目的の確認ですかね、私の場合はボット・・・というかとりあえず自動投稿をしたかったので、「Making a bot」を選択しました。そして「Next」をクリック。
最後に重要そうな認証情報が表示されますが、これは結局この後の手順で作り直さないといけないので、とりあえず無視します。まずこれでプロジェクトの作成は完了です。
■ 作成したプロジェクトの設定を変更
さてプロジェクトが作成できたので、Railsアプリに組み込みたいところですが、このまま進めてしまうと投稿をするときにエラーになります(エラーの内容は後ほど)。なので一部設定を変更します。
※この辺りの説明は公式のREADME.mdに書いています。
App permissionsの変更
デフォルトの設定では読み込みの権限しか許可されていないため、その設定を変更します。
アプリの設定から「App permissions」の項目を「Read Only」から「Read and Write」に変更します。
API KEYの再発行
App permissionsを更新したので、API KEYも再発行します。
鍵マークをクリック。
そうすると以下の画面が表示されますので「Regenerate」をクリックすると再発行ができます。
Railsアプリから自動投稿をするために必要な情報は
Consumer Keysの
- API Key
- API Secret Key
Authentication Tokens -> Access Token and Secretの
- Access Token
- Access Token Secret
になります。
Railsアプリに組み込む
さていよいよ自動投稿を実装します。
公式のREADME.mdを参考に作成していきます。
私の場合は既にRailsアプリが存在しているのでGemfileに
gem 'twitter'
を追記して、bundle installを実行します。
そして公式に記載がある通り、
client = Twitter::REST::Client.new do |config|
config.consumer_key = "YOUR_CONSUMER_KEY" # API Key
config.consumer_secret = "YOUR_CONSUMER_SECRET" # API Secret Key
config.access_token = "YOUR_ACCESS_TOKEN" # Access Token
config.access_token_secret = "YOUR_ACCESS_SECRET" # Access Token Secret
end
をどこでもいいので記載します。
私の場合は、検証としてとりあえずコントローラに書いています。
以下の部分ですが、
- YOUR_CONSUMER_KEY
- YOUR_CONSUMER_SECRET
- YOUR_ACCESS_TOKEN
- YOUR_ACCESS_SECRET
Twitter Developerで作成したアプリの認証情報を入力してください。
実際に運用する場合は直書きはNGですので、環境変数から取得できるように修正をします。
client = Twitter::REST::Client.new do |config|
config.consumer_key = ENV["YOUR_CONSUMER_KEY"] # API Key
config.consumer_secret = ENV["YOUR_CONSUMER_SECRET"] # API Secret Key
config.access_token = ENV["YOUR_ACCESS_TOKEN"] # Access Token
config.access_token_secret = ENV["YOUR_ACCESS_SECRET"] # Access Token Secret
end
このようなイメージですね。
そしてTwitter::REST::Clientのインスタンスが生成できたら
client.update("テスト投稿です!ご迷惑をおかけしてごめんなさい!")
updateメソッドを実行すると投稿されます。
引数は投稿内容です。
無事に投稿されました。
ちなみに前回投稿した内容と全く同じ内容を投稿しようとすると、投稿はされません。
これは公式のリファレンスにも記載がありますが、同じ内容の投稿が連続する場合は投稿しないという制限があるようです。
このとき、「App permissions」の設定が「Read Only」となっていると
Twitter::Error::Unauthorized: Read-only application cannot POST.
というエラーになりますので「App permissions」の設定を再確認してみてください。
Twitter::Error::Unauthorized: Invalid or expired token.
の場合は単純にAPI KEYの設定ミスです。
そして自動投稿
あとは実際投稿する処理をどこに配置するかで変わってきますが、
私はコントローラに実装したので外部からコントローラに対して定期的にPOSTしてあげるようにしています。
AWSのサービスを利用するとこのようなイメージです。
※コントローラに接続するための認証情報を必須とした実装にしています。
一番楽なのは前述の投稿処理をrakeタスクに実装して定期的に実行する方法です。
Herokuの場合はHeroku schedulerを使うと手っ取り早いと思います。
※但し、Heroku schedulerを使用する場合はHerokuにクレジットカードの登録をする必要があります。
参考にさせていただいた記事
コピペでできる RailsでTwitterAPIを使う 準備編
twitterのAPI審査期間は3日で通る?合格例文でも3回落ちた1つの原因【完全攻略】