コピペでできる RailsでTwitterAPIを使う ツイート編

# はじめに
サービスの各種告知やプロモーションにTwitterを利用する人は多いのではないでしょうか？
Railsで作られたWebシステムからのTwitter操作が思った以上に容易に実装できるので紹介します。
今回は、文字列のツイートを解説します。

このシリーズでは、ソースをコピペするだけで機能を実装できることを目標に記述しています。


# 事前準備
[コピペでできる RailsでTwitterAPIを使う 準備編](https://qiita.com/ayies128/items/80e1163caa2e1448ff9d)

# update
ツイートを行うオペレーションは``update``です。
http://www.rubydoc.info/gems/twitter/Twitter%2FREST%2FTweets:update
使い方はとてもシンプルで簡単！引数にツイートしたい文字列を渡すだけでOKです。
ちなみに改行は``\n``です。


```rb
class TwitterController < ApplicationController
  before_action :set_twitter_client

  def update
    @twitter.update("テスト1\nブログのためテストしています。(後で消します)")
    render plain: "Twitter.update"
  end

  private

  def set_twitter_client
    @twitter = 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
  end
end
```

``/twitter/update``を実行すると以下のようにツイートされます。

<img width="613" alt="スクリーンショット 2018-02-08 19.05.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/147005/d8802e65-973c-149f-cfcb-0d102fe5b4a0.png">

しっかりツイートされていますねー。簡単！

# update!
Twitterは同じ内容のツイートを連続で投稿できません。
また、同じ内容を連続での投稿を続けるとアプリケーションがBANされます。（経験談）

できるだけ``update``ではなく``update!``を使用してエラー処理をすることをオススメします。
http://www.rubydoc.info/gems/twitter/Twitter%2FREST%2FTweets:update!
ツイート内容が重複している場合にraiseしてくれます。


# ``update``と``update!``の動作比較
（先ほどのツイートの後に実行したものです）

```rb

class TwitterController < ApplicationController
  before_action :set_twitter_client

  def update
    begin
      @twitter.update("テスト1\nブログのためテストしています。(後で消します)")
    rescue => e
     error = e
    end
    render plain: error || "Twitter.update"
  end

  private

  def set_twitter_client
    @twitter = 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
  end
end
```
<img width="1551" alt="スクリーンショット 2018-02-08 19.11.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/147005/1b87d004-1b7c-9738-c6a7-efec02233e6f.png">

``update``はエラーがraiseされず、ツイートはされません。

```rb

class TwitterController < ApplicationController
  before_action :set_twitter_client

  def update
    begin
      @twitter.update!("テスト1\nブログのためテストしています。(後で消します)")
    rescue => e
     error = e
    end
    render plain: error || "Twitter.update"
  end

  private

  def set_twitter_client
    @twitter = 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
  end
end
```

<img width="1551" alt="スクリーンショット 2018-02-08 19.11.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/147005/e367767d-3c44-5757-79e7-e536b2009b14.png">

``update!``はエラーがraiseされて、ツイートはされません。

# 終わりに
拍子抜けするほど簡略化されていて、gem作成者には頭が上がりません！
``update``は第二引数に色々なオプションを指定できます。
その辺もおいおい説明できたらなと考えています！

ブログ記事で見たい方はこちら → [コピペでできる RailsでTwitterAPIを使う ツイート編](http://nabesys.com/article/2018/02/08371/)