RailsでTwitterログインしてつぶやく(つぶやく編)
昨日の続きです
概要
twitter というgemを使って、つぶやく部分の実装をしていきます
Twitter API v1.1 requires you to authenticate via OAuth, so you'll need to register your application with Twitter.
この記事を書くまで気づきませんでしたが、アプリケーションをTwitterに登録して、OAuth経由での認証しておくことが必要みたいですね。そうでないとPOSTができない(つまりつぶやけない?)っぽいです。
つぶやき機能実装のためには、consumer key/secret のペア(アプリをtwitterに登録した時に取得する値)と、OAuth access token/secretのペア(OAuth認証時に取得する値)が必要なようです。
その値を渡して以下のようにオブジェクトを生成して、update
メソッドを実行してやればそれだけでつぶやいてくれます。他にもフォロワー一覧を出力したり、タイムラインを取得できるようです。
client = Twitter::REST::Client.new do |config| config.consumer_key = "YOUR_CONSUMER_KEY" config.consumer_secret = "YOUR_CONSUMER_SECRET" config.access_token = "YOUR_ACCESS_TOKEN" config.access_token_secret = "YOUR_ACCESS_SECRET" end client.update("I'm tweeting with @gem!")
実装
実際にRailsアプリで以下のように実装したら無事にtwitter上でつぶやくことができました。もっとスマートなやり方がある気がしてしょうがないですがとりあえずよしとします。
User#twitter_client
メソッドでオブジェクトを生成します。consumer key/secret は.env
ファイルのものを、access token/token_secretはuser自身が保持している値をそれぞれ割り当てています。そしてルーティングを追加して、SchedulesController
のtweet
アクションを実行するとparams[:text]
の値をtwitter上でつぶやいてくれます。
# app/models/user.rb def twitter_client @twitter_client ||= Twitter::REST::Client.new( consumer_key: ENV['API_KEY'], consumer_secret: ENV['API_SECRET'], access_token: token, access_token_secret: secret ) end # config/routes.rb resources :schedules do post 'tweet', on: :collection end # app/views/schedules/_modal.html.haml = button_to 'Tweet', { action: :tweet, params: { text: 'hoge' } } # app/controllers/schedules_controller.rb def tweet current_user.twitter_client.update(params[:text]) redirect_to schedules_path, notice: 'Tweeted!' end