RailsでDeviseと用いてTweetしてみる
はじめに
前回、Deviseを使ってTwitter認証をしました。
mtryo1021.hatenablog.com
今回はこれを使ってTweetとDMをします。
Twitter Gemについて
今回、Twitter Gemを使います。
RubyでTweetする記事は多くありますので参考にしました。
まず、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])
まとめ
ここまででRailsでTwitter関連を触ることができたと思います。コメント欄の作成もどんどん進めていきたいですね。
では、、、