Mt.Log

編入、編入後の勉強

RailsでDeviseと用いてTweetしてみる

はじめに

前回、Deviseを使ってTwitter認証をしました。
mtryo1021.hatenablog.com


今回はこれを使ってTweetとDMをします。



Twitter Gemについて

今回、Twitter Gemを使います。

RubyTweetする記事は多くありますので参考にしました。

まず、Gemをインストールします。
Gemfile

gem 'twitter'
$ bundle install --path vendor/bundle

Twitter GemでできることはTweetだけではありません。詳しくは、下のサイトを参考にしてください。
sites.google.com

Tweetする

TweetするにはREST Clientを動かす必要があります。それにトークンがいるのでsessionで持っておきます。
以下をcallback_fromに追加します。
app/controllers/users/omniauth_callbacks_controller.rb

session[:oauth_token] = request.env['omniauth.auth']['credentials']['token']
session[:oauth_token_secret] = request.env['omniauth.auth']['credentials']['secret']

次にREST Clientを記述します。
今回はよく使うものなのでモジュール化してます。
lib/twitter_client.rb

module TwitterClient
  def rest_client
    Twitter::REST::Client.new do |config|
      config.consumer_key = ENV["TWITTER_CONSUMER_KEY"]
      config.consumer_secret = ENV["TWITTER_CONSUMER_SECRET"]
      config.access_token = session[:oauth_token]
      config.access_token_secret =session[:oauth_token_secret]
    end
  end
end

これで実際にTweetできるのでやってみます。
app/controllers/pages_controller.rb

def tweet
  rest_client.update(params[:content])
  flash[:notice] = "tweet: #{params[:content]}"
  redirect_to root_path
end

app/views/pages/tweet_form.html.erb

<h2>Tweet Page</h2>
<%= form_tag pages_tweet_path do %>
<label for="content">Content :</label><br>
<textarea name="content" id="content" rows="8" cols="80"></textarea><br>
<input type="submit" name="" value="Tweet">
<% end %>

先程作ったREST Clientをつかってupdateすると認証したアカウントからTweetできます。
また、DMを送りたいときは同じ要領で第1引数に送り先のID、第2引数に内容を入れるとDMを送れます。
DMは上に載せたdirect_message_createでは送信できませんでした。原因は不明...

rest_client.create_direct_message(params[:user_id], params[:content])

まとめ

ここまででRailsTwitter関連を触ることができたと思います。
コメント欄の作成もどんどん進めていきたいですね。
では、、、

参考サイト

kurome-stdio.hatenablog.com