LoginSignup
8
9

More than 3 years have passed since last update.

Twitterの「画像の説明」をテキストとして取得

Last updated at Posted at 2016-03-30

「画像の説明」

本日、 Twitter から以下のような発表がありました。

HTML における画像の ALT テキストに対応するものだと思います。非常に有意義です。

ただ、別の方向に考えてしまう人(私)は居るもので。

そして試しにやってみました。

ですがツイートしても画面に出ません。
何故だろう、と悩みました。
ちゃんと書いてありました。

視力が弱い方々がテキストを読み上げてくれるような補助技術アプリを利用いただくと、この画像の説明テキストも読み上げられるようになり、画像についての情報も得ることができます。
より多くの方に画像をお届けするために | Twitter Blogs

つまり 読み上げ のための説明テキストであって、表示されるようになっていないわけです。

でもその続きがありました。

サードパーティーのTwitterクライアントでこの機能を追加されたい場合、REST APIとTwitter Cardsでも利用いただけるようにしました。

よし。 REST API でアクセスしてみよう。

REST API で「画像の説明」を取得

REST API としての取得方法は以下の通りです。

REST API

Consuming Alt Text
Alt text is accessible to any Twitter app and is requested using the include_ext_alt_text parameter.

Request

GET /1.1/statuses/show.json?id=696049944105320448&include_ext_alt_text=true

Response

The alt text will appear as a top-level key of each media object in the extended_entities object. For example:

"extended_entities": {
  "media": [
    {
      "id_str": "696049944105320448",

     ...

     "ext_alt_text": "A Faema Urania lever espresso machine"
    }
  ]
}

If alt text isn’t available for a given image, the value for the property will be null.
Alt text support for Twitter Cards and the REST API | Twitter Blogs

Twitter gem (バージョン5.16.0)でアクセス

メソッドが無くてもある程度対応出来るのが Twitter gem のありがたいところです。オプションに include_ext_alt_text: true を追加すれば、画像の説明を含むレスポンスが返ってきます。
Twitter::Entities#media メソッドは "extended_entities""media" の配列を返しますので、その中身を Twitter::Base#attrsTwitter::Base#to_h) で出し、さらに :extended_entities を取り出してやれば目的の作業は終了です。
追記:2017/9/26にアルファベットでのツイート文字数が280文字に増加したことにより Twitter API が変更されました。このため、この日 以降 のツイートに対しては、上記のオプションだけでは足りず、 include_ext_alt_text: true, tweet_mode: "extended" にする必要があります。

client = Twitter::REST::Client.new(
  consumer_key: "YOUR_CONSUMER_KEY",
  consumer_secret: "YOUR_CONSUMER_SECRET",
  access_token: "YOUR_ACCESS_TOKEN",
  access_token_secret: "YOUR_ACCESS_TOKEN_SECRET",
)
client.status(715018877592150016, include_ext_alt_text: true).media.first.attrs
#=> {
 :id=>715018850065055744,
 :id_str=>"715018850065055744",
 :indices=>[45, 68],
 :media_url=>"http://pbs.twimg.com/media/CexB2xXWAAAokfz.jpg",
 :media_url_https=>"https://pbs.twimg.com/media/CexB2xXWAAAokfz.jpg",
 :url=>"https://t.co/s6yUUUevzt",
 :display_url=>"pic.twitter.com/s6yUUUevzt",
 :expanded_url=>"http://twitter.com/riocampos/status/715018877592150016/photo/1",
 :type=>"photo",
 :sizes=>
  {:large=>{:w=>1024, :h=>768, :resize=>"fit"},
   :thumb=>{:w=>150, :h=>150, :resize=>"crop"},
   :medium=>{:w=>600, :h=>450, :resize=>"fit"},
   :small=>{:w=>340, :h=>255, :resize=>"fit"}},
 :ext_alt_text=>
  "国宝 鬼切丸\n長 二尺七寸九分二厘\n作者 安綱 在銘\n銘は一見すれば國綱と見ゆるは後代「安」の周囲に囗を加刻したるものなり\n伝来 源家の重宝なり旧所有主最上家の伝によれば後三年役に源義家奥地鎮護の霊剱として宗家に請い之を携行し終にその裔最上家に伝わり徳川時代には世々将軍の上覧を恒例とせり明治に至り故ありて滋賀県令籠手田安定氏の尽力に頼り有志者相集り之を北野天満宮に奉納したるものなり"
}

client.status(715018877592150016, include_ext_alt_text: true).media.first.attrs[:ext_alt_text]
#=> "国宝 鬼切丸\n長 二尺七寸九分二厘\n作者 安綱 在銘\n銘は一見すれば國綱と見ゆるは後代「安」の周囲に囗を加刻したるものなり\n伝来 源家の重宝なり旧所有主最上家の伝によれば後三年役に源義家奥地鎮護の霊剱として宗家に請い之を携行し終にその裔最上家に伝わり徳川時代には世々将軍の上覧を恒例とせり明治に至り故ありて滋賀県令籠手田安定氏の尽力に頼り有志者相集り之を北野天満宮に奉納したるものなり"


ということで取得した「画像の説明」がこちらです。

国宝 鬼切丸
長 二尺七寸九分二厘
作者 安綱 在銘
銘は一見すれば國綱と見ゆるは後代「安」の周囲に囗を加刻したるものなり
伝来 源家の重宝なり旧所有主最上家の伝によれば後三年役に源義家奥地鎮護の霊剱として宗家に請い之を携行し終にその裔最上家に伝わり徳川時代には世々将軍の上覧を恒例とせり明治に至り故ありて滋賀県令籠手田安定氏の尽力に頼り有志者相集り之を北野天満宮に奉納したるものなり

そのうち Twitter gem が更新されて client.status(tweet_id, include_ext_alt_text: true).media.map(&:ext_alt_text) とかで取得出来るようになるんじゃないかと思います。

個人的つぶやき

「画像の説明」をクライアントで気軽に見れるようになれば良いのになあ。

おまけ更新

「画像の説明」が見れるサイトを作ってみた。上記のツイートへのリンクへ行くようにしてあります↓
http://showyourtweetdescriptions.herokuapp.com/id/715018877592150016

8
9
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
8
9