ayumu_aoの日記

SIerから事業会社に転職したエンジニアが技術についてや組織論、本の話、今までの体験談などなどを個人的に垂れ流しています。

Ruby on RailsでTwitterAPIから添付ファイル(動画・画像)付き投稿をする際のサンプル

Ruby on RailsでTwitterAPIから添付ファイル付き投稿をする際のサンプル

今回実験してみて動画(mp4)と画像(jpeg/png/gif)でソースを切り替える必要があったのでメモ代わりにサンプルを!

Gemファイル追記

# Use Twitter
gem 'twitter'

ファイル展開用に読み込み

require 'open-uri'

Client設定

  @client = Twitter::REST::Client.new do |config|
      config.consumer_key = Twitterアプリ登録からのconsumer_key
      config.consumer_secret = Twitterアプリ登録からのconsumer_secret
      config.access_token = Twitterアプリ登録からのaccess_token
      config.access_token_secret = Twitterアプリ登録からのaccess_token_secret
  end

Twitterアプリ登録

apps.twitter.com

実処理

     ## ファイルオープン
     image = open(file_path)
      ## 拡張子チェック
      if File.extname(ile_path) == ".mp4" then
        ## 動画ファイルの場合
        file_size = File.size(image)
        ## media_id発行
        init_request = Twitter::REST::Request.new(@client, :post, "https://upload.twitter.com/1.1/media/upload.json", command: 'INIT', total_bytes: file_size,media_type: 'video/mp4').perform
        media_id = init_request[:media_id]
        ## ファイルアップロード
        Twitter::REST::Request.new(@client, :post, "https://upload.twitter.com/1.1/media/upload.json", command: 'APPEND', media_id: media_id, media: image, segment_index: 0).perform
        ## ファイナライズ
        Twitter::REST::Request.new(@client, :post, "https://upload.twitter.com/1.1/media/upload.json", command: 'FINALIZE',media_id: media_id).perform
        ## Twitter投稿
        @client.update("@#{twitter_screen_name}\n#{reply_text}", media_ids: media_id)

      else
        ## 画像ファイルの場合
        @client.update_with_media("@#{twitter_screen_name}\n#{reply_text}", image)
      end

備考

返信にしたい場合は

in_reply_to_status_id: 返信したい対象TweetのID

@client.update

の引数に追記