获取Twitter视频MP4链接

7

问题:我现在正在使用Twitter API,当推文包含视频时,Twitter仅返回缩略图URL而不是主视频文件的URL。Twitter返回这样的JSON:

["media_url"]=> string(86) "http://pbs.twimg.com/ext_tw_video_thumb/../pu/img/p1R5iC_7fN-lqNuK.jpg" 
["media_url_https"]=> string(87) "https://pbs.twimg.com/ext_tw_video_thumb/.../pu/img/p1R5iC_7fN-lqNuK.jpg" 
["url"]=> string(22) "http://t.co/UViL9KykF*" 
["expanded_url"]=> string(63) "http://twitter.com/.../status/..../video/1" 

前两个是jpg格式的图片,其他的url直接跳转到帖子页面。 由于我使用php获取所有信息,对于vine.co网站,代码如下:

$dom = new DomFinder($media_url);
$video_cell = $dom->find("//meta[@property='twitter:player:stream']", 'content');

但是 Twitter 在 <head> 中没有这样的 meta 标签,而且我找不到访问视频文件的方法。也许有人知道如何获取 MP4 URL?

2个回答

9

Twitter员工在这里表示,他们不会支持使用搜索获取视频。您需要通过API的其他调用来获取视频。

假设您使用search/tweets获取了一个推文,并将其保存在$tweet中。

// Check if tweet has media
if (!empty($tweet->entities->media)) {
    $searchArray = array(
        "id" => $tweet->id, // id of the tweet we just fetched
        "include_entities" => true // tells twitter API to return videos and stuff
    );

    // Get extended_entities
    $extendedEntities = $connection->get("statuses/show", $searchArray);
    foreach($extendedEntities->extended_entities->media as $media){
        var_dump($media->video_info->variants);
    }
}

示例结果

array (size=6)
  0 => 
    object(stdClass)[265]
      public 'bitrate' => int 832000
      public 'content_type' => string 'video/webm' (length=10)
      public 'url' => string 'https://video.twimg.com/ext_tw_video/560049056895209473/pu/vid/480x480/gj_fzyk29R9dMPBY.webm' (length=92)
  1 => 
    object(stdClass)[266]
      public 'bitrate' => int 832000
      public 'content_type' => string 'video/mp4' (length=9)
      public 'url' => string 'https://video.twimg.com/ext_tw_video/560049056895209473/pu/vid/480x480/gj_fzyk29R9dMPBY.mp4' (length=91)
  2 => 
    object(stdClass)[267]
      public 'bitrate' => int 1280000
      public 'content_type' => string 'video/mp4' (length=9)
      public 'url' => string 'https://video.twimg.com/ext_tw_video/560049056895209473/pu/vid/720x720/S7F4BF2wKR2txCpA.mp4' (length=91)
  3 => 
    object(stdClass)[268]
      public 'content_type' => string 'application/dash+xml' (length=20)
      public 'url' => string 'https://video.twimg.com/ext_tw_video/560049056895209473/pu/pl/udxtIM8FytsAE4HQ.mpd' (length=82)
  4 => 
    object(stdClass)[269]
      public 'bitrate' => int 320000
      public 'content_type' => string 'video/mp4' (length=9)
      public 'url' => string 'https://video.twimg.com/ext_tw_video/560049056895209473/pu/vid/240x240/v5jqpUNnkaeuVZbx.mp4' (length=91)
  5 => 
    object(stdClass)[270]
      public 'content_type' => string 'application/x-mpegURL' (length=21)
      public 'url' => string 'https://video.twimg.com/ext_tw_video/560049056895209473/pu/pl/udxtIM8FytsAE4HQ.m3u8' (length=83)

1
在响应中添加选项tweet_mode:'extended'以获取extended_entities对象。响应中的此路径将具有视频URL:extended_entities.media[0].video_info.variants 示例:
[
  {
    content_type: 'application/x-mpegURL',
    url: 'https://video.twimg.com/ext_tw_video/1358226.........'
  },
  {
    bitrate: 832000,
    content_type: 'video/mp4',
    url: 'https://video.twimg.com/ext_tw_video/1358226.........'
  },
  {
    bitrate: 256000,
    content_type: 'video/mp4',
    url: 'https://video.twimg.com/ext_tw_video/1358226.........'
  }
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接