1. TOPTOP
  2. Webサービス
  3. Twitter

Twitter REST APIを使って30秒動画の取得。$tweet->extended_entities->media[0]->video_info->variants[0]->url

|

Twitter_logo_blue

2015年1月27日に、Twitterアプリに30秒動画の投稿機能が追加されとの発表がありました。

それに伴いTwitter developersの方でも、ひっそりとREST APIの仕様が拡張しています。1月27日の発表では、2月上旬に拡張というアナウンスでしたので、追加のツイートがあるかなと思いましたが。

video_infoが追加されたextended_entities

さておき、新しくなったextended_entitiesオブジェクトを確認しましょう。機能拡張に伴い、”video_info“(41行目)が追加されています。これが動画を呼び出す要素になります。

"extended_entities":{
  "media": [
    {
      "display_url": "pic.twitter.com\/31JoMS50ha",
      "expanded_url": "http:\/\/twitter.com\/twitter\/status\/560070183650213889\/video\/1",
      "features": {

      },
      "id": 5.6007013197639e+17,
      "id_str": "560070131976392705",
      "indices": [
        110,
        132
      ],
      "media_url": "http:\/\/pbs.twimg.com\/ext_tw_video_thumb\/560070131976392705\/pu\/img\/TcG_ep5t-iqdLV5R.jpg",
      "media_url_https": "https:\/\/pbs.twimg.com\/ext_tw_video_thumb\/560070131976392705\/pu\/img\/TcG_ep5t-iqdLV5R.jpg",
      "sizes": {
        "large": {
          "h": 576,
          "resize": "fit",
          "w": 1024
        },
        "medium": {
          "h": 337,
          "resize": "fit",
          "w": 600
        },
        "small": {
          "h": 191,
          "resize": "fit",
          "w": 340
        },
        "thumb": {
          "h": 150,
          "resize": "crop",
          "w": 150
        }
      },
      "type": "video",
      "url": "http:\/\/t.co\/31JoMS50ha",
      "video_info": {
        "aspect_ratio": [
          16,
          9
        ],
        "duration_millis": 30033,
        "variants": [
          {
            "bitrate": 2176000,
            "content_type": "video\/mp4",
            "url": "https:\/\/video.twimg.com\/ext_tw_video\/560070131976392705\/pu\/vid\/1280x720\/c4E56sl91ZB7cpYi.mp4"
          },
          {
            "bitrate": 320000,
            "content_type": "video\/mp4",
            "url": "https:\/\/video.twimg.com\/ext_tw_video\/560070131976392705\/pu\/vid\/320x180\/nXXsvs7vOhcMivwl.mp4"
          },
          {
            "bitrate": 832000,
            "content_type": "video\/webm",
            "url": "https:\/\/video.twimg.com\/ext_tw_video\/560070131976392705\/pu\/vid\/640x360\/vmLr5JlVs2kBLrXS.webm"
          },
          {
            "bitrate": 832000,
            "content_type": "video\/mp4",
            "url": "https:\/\/video.twimg.com\/ext_tw_video\/560070131976392705\/pu\/vid\/640x360\/vmLr5JlVs2kBLrXS.mp4"
          },
          {
            "content_type": "application\/x-mpegURL",
            "url": "https:\/\/video.twimg.com\/ext_tw_video\/560070131976392705\/pu\/pl\/r1kgzh5PmLgium3-.m3u8"
          }
        ]
      }
    }
  ]
}

動画を呼び出すための記述

で、動画を呼び出す書き方はどうなるかと言うと、こうなります。

<?php echo ($tweet->extended_entities->media[0]->video_info->variants[0]->url);?>

ただし、これだと文字列しか返ってきません。videoタグのsrc属性に、拡張子webmのファイル名を入れてあげます。widthやheightなどその他の属性はお好みでどうぞ。

video src="<?php echo ($tweet->extended_entities->media[0]->video_info->variants[0]->url);?>" width="320" height="180" controls loop preload="metadata"></video>

呼び出すときの配列番号に注意を

上記のjsonを頼りにすると、webmを呼び出すためには”variants[3]”となりそうですが、なぜかvariants[0]でないとダメな感じです。

  • [0] → .webm
  • [1] → .m3u8
  • [2] → .mp4
  • [3] → .mp4
  • [4] → なし

配列の番号と出力されるファイルの種類を比べると、例のとおりになってなくて、ちょっとクセがあります。

出力内容の確認

twitter_video_info

実際に出力してみると、こんな感じになります。もちろん、ツイート本文や画像を呼び出すとき同じく、twitterOAuthを使ってエンドポイントにアクセスする必要があります。”video_info”に至るまでのコードは、こちらの記事(新しいタブで開く)を参考にしてみたください。

ちなみに…

先日から、なぜかTwitter developersのUploading Mediaのページがアクセスできません。複数の画像の投稿や呼び出しに関する記述があったところです。

30秒動画の投稿機能が追加されたので、おそらくTwitterがそのうち書き換えるかもしれませんねー。

〔参考サイト〕