MADOCHAN BLOG

強いプログラマーを目指す30代のブログ



Rubyでツイッターへの投稿をする方法

ブログなどによくあるTwitteへの記事シェア機能。 今現在作成中の小説投稿サイトにもそういう機能をつけたいなーと思って、作ってみることに。 いろいろ四苦八苦したのでその辺のことをまとめていきたいと思います。

1 Twitter側の設定を行う

参考サイト:【開発メモ】RailsアプリにTwitterログイン認証機能を実装する方法

Twitterへツイートする際はconsumer_key、consumer_secret、access_token、access_token_secretの4つが必要となります。
参考のサイトに従って取得しました。

2 twitter gemをインストールする

ツイッターへの投稿機能はtwitter gemを使用して作成します。 そのためまずgemをインストールします。

Gemfileにgem 'twitter'を追加

gem 'twitter'

$ bundle installでgemをインストール

これで準備OKです。

3 Controllerにシェア機能のアクションを追加する

今回私は自分が投稿した小説をTwitterに「小説を投稿しました!」という形でシェアできるようにしたかったので、novel_posts.controller.rbにアクションを追加していくことにしました。

まずはgem twitterを使用できるようにrequire ‘twitter’とします。
novel_posts.controller.rb

require 'twitter'

class NovelPostsController < ApplicationController

private下にTwitterへの投稿のための設定アクションを記載します。

novel_posts.controller.rb

private

    def twitter_client
      Twitter::REST::Client.new do |config|
        config.consumer_key = Consumer Key (API Key)
        config.consumer_secret =  Consumer Secret (API Secret)
        config.access_token =  Access Token
        config.access_token_secret =  Access Token Secret
      end
    end

ちなみに取得した値は他者にみられてはこまるので、私は環境変数設定をしました。 環境変数についてもまたまとめたいと思いますが、とりあえず参考にさせていただいたサイトだけ載せておきます。

Ruby 環境変数を設定してプログラムから値を取得する

そしてツイートアクションを作成します。 アクション名はなんでもOKなのですが私はそのまんまtweetとしました。
novel_posts.controller.rb

  def tweet
    @novel_post = NovelPost.find_by(id: params[:id])
    twitter_client.update("小説を投稿しました #{@novel_post.title} | https://***/novel_posts/#{@novel_post.id}") # ***にはサイトのURLを入力
    flash[:success] = "ツイートしました!”
    redirect_to root_url
  end
@novel_post = NovelPost.find_by(id: params[:id])

ツイートするときに小説タイトルと小説へのリンクを一緒にツイートさせたかったので、該当小説の情報を引っ張っておきます。

twitter_client.update("小説を投稿しました #{@novel_post.title} | https://***/novel_posts/#{@novel_post.id}")

updateメソッドを使用することでツイッターへの投稿が可能となります。 update(“ツイートしたい内容”)というようにupdateメソッドの引数にツイートしたい内容を記入します。

4 tweetアクションに対応するルーティングをする

routes.rb

post '/novel_posts/:id/tweet' => 'novel_posts#tweet', as: :tweet

5 Viewページにツイートボタンを作成する

ツイートボタンを作成します。

<div class="tweet">
    <%= link_to '小説をツイートする', tweet_path, class: 'tweet-button', method: :post %>
</div>

このときmethod: :post とするのを忘れないようにします(method: :destroy と同じくらいよく忘れる)

以上で、ツイートボタンを押すと、小説のタイトルと小説へのリンクがTwitterへ投稿することができるようになりました!


参考サイト: 【開発メモ】RailsアプリにTwitterログイン認証機能を実装する方法
rubyでTwitterに画像付きツイートを投稿する
Rubyで簡単なTwitter クライアントをつくる