Search code examples
phpvideotwitter

Get twitter video mp4 url


Question I am working with twitter API now and when post includes video. Twitter returns only thumbnails urls and not main video file url. Twitter returns such 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" 

And first two is jpgs, and other urls redirect straight to post. As I am using php to get all information, for vine.co there was such code:

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

But twitter doesn't have such meta tags in and I can't find a way to access video file. Maybe someone know how to get mp4 url?


Solution

  • Twitter staff has stated here that they won't be supporting fetching videos using search. You will have to fetch videos with an other call to the API.

    Let's say you have a tweet fetched using search/tweets saved in $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);
        }
    }
    

    Example result

    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)