LoginSignup
2
4

More than 3 years have passed since last update.

Rails TwitterAPI を利用して自動投稿をする

Last updated at Posted at 2021-04-24

自分の備忘録として、TwitterAPIをRailsで利用するまでの手順をまとめました。

事前準備

Twitterアカウントの作成

Twitterアカウントがないと、Twitter Developerに登録できません。
※手順は端折ります。
image.png

Twitter Developerに登録

「Apply」をクリック。
image.png
「Apply for a development acoount」をクリック。
image.png
Hobbyist -> Making a bot. -> 「Get started」をクリック。
image.png
各種情報を入力します。
スクロールするといくつか質問事項がありますので、適宜入力してください。
※Twitterアカウントにメールアドレスの登録ができている必要があるようです。
image.png

ここが一番面倒ですが、TwitterAPIの使用目的などを記載します。
google翻訳などを駆使して何とか入力しましょう。
入力不要な項目はチェックを外すことで入力欄がなくなります。
image.png

入力した内容を確認します。
image.png

利用規約に同意する場合はチェックを入れて、「Submit application」をクリック。
これでTwitter Developerに登録されますが、審査に時間がかかる場合があるようです。
※余程変な内容でなければ審査は普通に通ると思います(たぶん・・・)。
image.png

追記:
この審査結構厳しいようで、私の場合は2回再提出してくれメールが届きました・・・。
こちらの記事を参考になんとか乗り越えました。

■ Twitter Developerでプロジェクトを作成

というわけでTwitter Developerのトップページから早速プロジェクトを作成してみます。
「Developer Portal」をクリック。
image.png

「Create Project」をクリック。
image.png

プロジェクトの名前を入力して「Next」をクリック。
image.png

使用目的の確認ですかね、私の場合はボット・・・というかとりあえず自動投稿をしたかったので、「Making a bot」を選択しました。そして「Next」をクリック。
image.png

プロジェクトの説明を入力して「Next」をクリック。
image.png

アプリの名前を入力して「Complete」をクリック。
image.png

最後に重要そうな認証情報が表示されますが、これは結局この後の手順で作り直さないといけないので、とりあえず無視します。まずこれでプロジェクトの作成は完了です。
image.png

■ 作成したプロジェクトの設定を変更

さてプロジェクトが作成できたので、Railsアプリに組み込みたいところですが、このまま進めてしまうと投稿をするときにエラーになります(エラーの内容は後ほど)。なので一部設定を変更します。
※この辺りの説明は公式のREADME.mdに書いています。

App permissionsの変更

デフォルトの設定では読み込みの権限しか許可されていないため、その設定を変更します。
アプリの設定から「App permissions」の項目を「Read Only」から「Read and Write」に変更します。
image.png

API KEYの再発行

App permissionsを更新したので、API KEYも再発行します。
鍵マークをクリック。
image.png
そうすると以下の画面が表示されますので「Regenerate」をクリックすると再発行ができます。
image.png
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メソッドを実行すると投稿されます。
引数は投稿内容です。
image.png
無事に投稿されました。

ちなみに前回投稿した内容と全く同じ内容を投稿しようとすると、投稿はされません。
これは公式のリファレンスにも記載がありますが、同じ内容の投稿が連続する場合は投稿しないという制限があるようです。

このとき、「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のサービスを利用するとこのようなイメージです。
※コントローラに接続するための認証情報を必須とした実装にしています。

image.png

一番楽なのは前述の投稿処理をrakeタスクに実装して定期的に実行する方法です。
Herokuの場合はHeroku schedulerを使うと手っ取り早いと思います。
※但し、Heroku schedulerを使用する場合はHerokuにクレジットカードの登録をする必要があります。

参考にさせていただいた記事

コピペでできる RailsでTwitterAPIを使う 準備編

twitterのAPI審査期間は3日で通る?合格例文でも3回落ちた1つの原因【完全攻略】

2
4
0

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
2
4