【Ruby on Rails】twitter apiを利用してoauth認証・タイムラインを表示する

2017年8月22日Rubyapi, oauth, Rails, REST API, Ruby, Twitter, タイムライン

スポンサーリンク

週末プログラミング、皆さんやっていますか?

こんにちは。現在、管理人はRuby on RailsでTwitterやFacebook、Instagramといった各種SNSのapiを叩き、oauth認証機能を利用したりタイムラインを引っ張ってきたりするプログラムを書いています。

後々は同じインターフェース内で全てのSNSのタイムラインを表示させるサービスを完成させる予定ですが、それまでの機能的な部分を切り取ってご紹介しています。

スポンサーリンク

twitter apiは構造自体は簡単!でもapi利用制限が多く、方法もたくさんあるために意外と難しかった

twitter apiは非常に利用制限が厳しく、15分間に15回までしか叩けない場合もあります。

また、Railsの場合gemを導入して簡単に実装するのが良いのですが、いかんせん多すぎてどれが良いのかよく分かりません。

僕の環境で動いた一例として、以下をお読みください。

Twitter apiを叩くための便利なgemを入れておこう

これらは問答無用で入れておきましょう。(環境:Rails 4.2.4, ruby 2.0.0p645 (2015-04-13 revision 50299) [universal.x86_64-darwin15])

Railsの良いところであり悪いところでもあるのですが、これらのgemを導入すると、簡単なコードを書くだけでtwitter apiを叩けます。

しかし、それぞれのメソッドが何をしているのか理解するために導入したgemのソースコードの中身を確認しておくことは必要です。

omniauth.rbを設定しよう(/config/initializers/omniauth.rb)(ファイル名も一致させないと動きません)

omniauth.rbにtwitterのconsumer_keyやconsumer_secretを設定してもいいのですが、それらはsecrets.ymlに格納しておくのがイケてる(らしい)です。

secrets.ymlに自身のconsumer_keyとconsumer_secretを書いておこう(/config/secrets.yml)

instagram apiをRuby on Railsで叩くでも紹介しましたが、twitter apiを叩く時に必要なconsumer_keyとconsumer_secretの取得方法を以下に紹介します。

Twitter開発者用ページ(https://dev.twitter.com/)にアクセス!

以下の白枠内をクリックすると、自分のappsページに飛べます。(これマジで分かりにくくて毎度探すのに時間かかるんだけど、Twitterさん何とかして)

次に、自分専用のアプリを登録します。

次はアプリの名前や説明、リダイレクト先等を入力しましょう。(Callback URLを適切に書かないと動作しません。)

最後にconsumer_keyとconsumer_secretを確認しましょう。

上記2項目をsecrets.ymlに書き込みましょう。

ちなみにpermissionは今は気にしなくてOKです。(ユーザーがoauth認証する際に聞かれるもので、基本Read and Writeに設定しておけば良いでしょう。ただし、不要なpermissionは要求しないようにするのがマナーです。)

routes.rbはこんな感じ(/config/routes.rb)(RailsのREST fulなルーティングが分かっていません。参考程度にしてください。)

一応簡易的なサインインとサインアウト機能作っておきました。

sessions_controller.rbでログインもどきの動き入れました。(/app/controllers/sessions_controller.rb)

内容としてはシンプルで、上記のコードで簡単にoauth認証を実装できています。gem最高。Rails最高。

これ、ちなみにPHPで書くとアホみたいにコード量増えます。びっくり。(参考:https://syncer.jp/twitter-api-matome)

tweet_controller.rbで実際にタイムラインを表示してみます。(/app/controllers/tweet_controller.rb)

後はviewを作っておけば、タイムラインを表示できます。

application.html.erbのリンク先だけ気をつけて!(/app/views/layouts/application.html.erb)

リンク先のpathを/auth/twitterに設定しておけば問題ありません。(必ず登録したURLに一致させましょう。)

いかがですか?

これで自分のタイムラインを表示することができたと思います。

Railsの場合、gemが優秀すぎてtwitter apiを扱うのは本当に手軽です。ぜひやってみてくださいね!

スポンサーリンク

2017年8月22日Rubyapi, oauth, Rails, REST API, Ruby, Twitter, タイムライン

Posted by 管理人