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
, andTwitter::Media::Variant
- Add
Twitter::Media::AnimatedGif
media entity
ということで git 指定の bundle install
を行わなくても、通常通り gem install twitter
で OK です。
Videos on Twitter 始動
ツイッター公式 blog の記事に 1/27 に公開されたように、30秒以内の動画をツイート出来るようになりました。
Twitterの新機能:グループダイレクトメッセージと動画の投稿 | Twitter Blogs
ビデオ入りツイートの例
上記記事にも引用されている、今年のアカデミー賞の司会者ニール・パトリック・ハリス(@ActuallyNPH)のツイート
Check out my Twitter video #Oscar exclusive! I gots me a scoop! pic.twitter.com/SGQ3oJHDqZ
— Neil Patrick Harris (@ActuallyNPH) January 27, 2015
を例にして、具体的に見てみましょう。
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_entities
の video_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
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