LoginSignup
5
4

More than 5 years have passed since last update.

【5.14.0で対応済】Twitter gem 5.13.0 ではまだ Twitter の Video API に対応していないため GitHub のブランチを使って bundle install(暫定対応)

Last updated at Posted at 2015-02-07

5.14.0リリース(2015/2/14追記)

VERSIONS: 5.14.0 - February 14, 2015 (73.5 KB)
twitter | RubyGems.org | your community gem host

5.14.0

  • Add Twitter::Media::Video, Twitter::Media::VideoInfo, and Twitter::Media::Variant
  • Add Twitter::Media::AnimatedGif media entity

twitter/CHANGELOG.md at master · sferik/twitter

ということで git 指定の bundle install を行わなくても、通常通り gem install twitter で OK です。

Videos on Twitter 始動

ツイッター公式 blog の記事に 1/27 に公開されたように、30秒以内の動画をツイート出来るようになりました。
Twitterの新機能:グループダイレクトメッセージと動画の投稿 | Twitter Blogs

ビデオ入りツイートの例

上記記事にも引用されている、今年のアカデミー賞の司会者ニール・パトリック・ハリス(@ActuallyNPH)のツイート

を例にして、具体的に見てみましょう。

client.status(560049149836808192).attrs
#=> {
 :created_at=>"Tue Jan 27 12:18:17 +0000 2015",
 :id=>560049149836808192,
 :id_str=>"560049149836808192",
 :text=>
  "Check out my Twitter video #Oscar exclusive! I gots me a scoop! http://t.co/SGQ3oJHDqZ",
 :source=>
  "<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>",
 :truncated=>false,
 :in_reply_to_status_id=>nil,
 :in_reply_to_status_id_str=>nil,
 :in_reply_to_user_id=>nil,
 :in_reply_to_user_id_str=>nil,
 :in_reply_to_screen_name=>nil,
 :user=>{  }
 :geo=>nil,
 :coordinates=>nil,
 :place=>nil,
 :contributors=>nil,
 :retweet_count=>2382,
 :favorite_count=>7590,
 :entities=>
  {:hashtags=>[{:text=>"Oscar", :indices=>[27, 33]}],
   :symbols=>[],
   :user_mentions=>[],
   :urls=>[],
   :media=>
    [{:id=>560049056895209473,
      :id_str=>"560049056895209473",
      :indices=>[64, 86],
      :media_url=>
       "http://pbs.twimg.com/ext_tw_video_thumb/560049056895209473/pu/img/apUFQOR0KnjekwfP.jpg",
      :media_url_https=>
       "https://pbs.twimg.com/ext_tw_video_thumb/560049056895209473/pu/img/apUFQOR0KnjekwfP.jpg",
      :url=>"http://t.co/SGQ3oJHDqZ",
      :display_url=>"pic.twitter.com/SGQ3oJHDqZ",
      :expanded_url=>
       "http://twitter.com/ActuallyNPH/status/560049149836808192/video/1",
      :type=>"photo",
      :sizes=>
       {:small=>{:w=>340, :h=>340, :resize=>"fit"},
        :thumb=>{:w=>150, :h=>150, :resize=>"crop"},
        :medium=>{:w=>600, :h=>600, :resize=>"fit"},
        :large=>{:w=>720, :h=>720, :resize=>"fit"}}}]},
 :extended_entities=>
  {:media=>
    [{:id=>560049056895209473,
      :id_str=>"560049056895209473",
      :indices=>[64, 86],
      :media_url=>
       "http://pbs.twimg.com/ext_tw_video_thumb/560049056895209473/pu/img/apUFQOR0KnjekwfP.jpg",
      :media_url_https=>
       "https://pbs.twimg.com/ext_tw_video_thumb/560049056895209473/pu/img/apUFQOR0KnjekwfP.jpg",
      :url=>"http://t.co/SGQ3oJHDqZ",
      :display_url=>"pic.twitter.com/SGQ3oJHDqZ",
      :expanded_url=>
       "http://twitter.com/ActuallyNPH/status/560049149836808192/video/1",
      :type=>"video",
      :sizes=>
       {:small=>{:w=>340, :h=>340, :resize=>"fit"},
        :thumb=>{:w=>150, :h=>150, :resize=>"crop"},
        :medium=>{:w=>600, :h=>600, :resize=>"fit"},
        :large=>{:w=>720, :h=>720, :resize=>"fit"}},
      :video_info=>
       {:aspect_ratio=>[1, 1],
        :duration_millis=>30008,
        :variants=>
         [{:bitrate=>832000,
           :content_type=>"video/webm",
           :url=>
            "https://video.twimg.com/ext_tw_video/560049056895209473/pu/vid/480x480/gj_fzyk29R9dMPBY.webm"},
          {:bitrate=>832000,
           :content_type=>"video/mp4",
           :url=>
            "https://video.twimg.com/ext_tw_video/560049056895209473/pu/vid/480x480/gj_fzyk29R9dMPBY.mp4"},
          {:bitrate=>1280000,
           :content_type=>"video/mp4",
           :url=>
            "https://video.twimg.com/ext_tw_video/560049056895209473/pu/vid/720x720/S7F4BF2wKR2txCpA.mp4"},
          {:bitrate=>320000,
           :content_type=>"video/mp4",
           :url=>
            "https://video.twimg.com/ext_tw_video/560049056895209473/pu/vid/240x240/v5jqpUNnkaeuVZbx.mp4"},
          {:content_type=>"application/x-mpegURL",
           :url=>
            "https://video.twimg.com/ext_tw_video/560049056895209473/pu/pl/udxtIM8FytsAE4HQ.m3u8"}]}}]},
 :favorited=>false,
 :retweeted=>false,
 :possibly_sensitive=>false,
 :lang=>"en"}

ということで、 entities には互換のために type"photo" で登録されサムネイル URL へのリンクが含まれており、実際の動画 URL は extended_entitiesvideo_info 以下に記載されています。こちら側の type は当然ながら "video" になっています。
また、色々な形式の動画へのリンクが張られていることも分かりますね。

  • WebM、サイズ480x480、ビットレート832Kbit/s
  • MP4、サイズ480x480、ビットレート832Kbit/s
  • MP4、サイズ720x720、ビットレート1.28Mbit/s
  • MP4、サイズ240x240、ビットレート320Kbit/s
  • M3U8(HLS/H264)(サイズ240x240、ビットレート320Kbit/s)

(なお、それぞれのビットレートは最大値だと思われます。)

Twitter::Tweet#media を呼び出すとエラーになる

動画が含まれたツイートを対象にして、 Twitter::Tweet#media (正確には Twitter::Entities#media) に含まれるメソッドを呼び出すとエラー( NameError - uninitialized constant Twitter::Media::Video )になります。
Twitter gem 5.13.0 では、例えばツイートに含まれる写真の URL を取得しようとするメソッドを作った場合、ビデオが含まれるツイートに対してそのメソッドを使うとエラーが発生します(2/8 訂正)。

2/8 訂正内容

上記行は

例として、ビデオが含まれるツイートを対象として、それに含まれる写真の URL を取得しようとすると、 Twitter gem 5.13.0 ではエラーが発生します。

と書いていましたが、

1ツイートに写真と動画を混ぜて投稿することはできない
Twitterの30秒動画の撮影機能(video.twimg.com)のiphoneアプリでの現状の仕様まとめ - Qiita

とのことなので訂正しました。

既に Video 対応したメソッドはプルリクされている

sferik/twitter at 3566739b46ba75abc55cca8cd99e3b56b4d11d18
ので、これを使えばいいですね。
今回は、 Video 対応のプルリクに加えて作者が若干変更したもの
sferik/twitter at 1ac62c40ab6a794d6974a36e2b8635aee167b326
を使います。

bundler を使う

bundler を使えば git を対象とした gem install を行えます。

Specify that a git repository should use a particular ref, branch, or tag

:git => 'https://github.com/rails/rails.git', :ref => '4aded'
:git => 'https://github.com/rails/rails.git', :branch => '2-3-stable'
:git => 'https://github.com/rails/rails.git', :tag => 'v2.3.5'

Specifying a ref, branch, or tag for a git repository specified inline works exactly the same way

gem 'nokogiri', :git => 'https://github.com/tenderlove/nokogiri.git', :ref => '0eec4'

Bundler: The best way to manage a Ruby application's gems

Gemfile
source "https://rubygems.org"

gem 'twitter', git: 'git@github.com:sferik/twitter.git', ref: '1ac62c40ab6a794d6974a36e2b8635aee167b326'

あとはご自身の必要な gem も Gemfile に登録しておいて下さい。

そして、 bundle install するのですが、今回は必ず --path オプションをつけて gem を置く場所を指定しておきましょう。

$ bundle install --path vender/bundle
Fetching git@github.com:sferik/twitter.git
Fetching gem metadata from https://rubygems.org/.........
Fetching additional metadata from https://rubygems.org/..
Resolving dependencies...
 :
Using twitter 5.13.0 from git@github.com:sferik/twitter.git (at 1ac62c4)
Using bundler 1.7.12
Your bundle is complete!
It was installed into ./vender/bundle
 :

これで bundle exec で実行すれば良いでしょう。

最後に

Twitter::Media::Video に加えて Twitter::Media::AnimatedGif というものにも対応するため、近々 5.14.0 が出るはずです。
uninitialized constant Twitter::Media::AnimatedGif · Issue #653 · sferik/twitter

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4