1

我正在尝试从 TED 视频嵌入代码中提取视频缩略图。为什么?好吧,我正在使用一个 WordPress 主题,它使用自定义字段来处理视频,但该字段的缩略图功能不是为 TED 构建的。我正在尝试重新调整它。

这是视频缩略图检索功能(其中涵盖了 YouTube 和 Vimeo):

function woo_get_video_image($embed) {

    $video_thumb = '';

    /* Let's start by looking for YouTube, then Vimeo */
    if ( preg_match( '/youtube/', $embed ) ) {

      // YouTube - get the video code if this is an embed code (old embed)
      preg_match( '/youtube\.com\/v\/([\w\-]+)/', $embed, $match);

      // YouTube - if old embed returned an empty ID, try capuring the ID from the new iframe embed
      if( !isset($match[1]) )
        preg_match( '/youtube\.com\/embed\/([\w\-]+)/', $embed, $match);

      // YouTube - if it is not an embed code, get the video code from the youtube URL
      if( !isset($match[1]) )
        preg_match( '/v\=(.+)&/',$embed ,$match);

      // YouTube - get the corresponding thumbnail images
      if( isset($match[1]) )
        $video_thumb = "http://img.youtube.com/vi/".$match[1]."/0.jpg";

    } else if ( preg_match( '/vimeo/', $embed ) ) {

      // Vimeo - get the video thumbnail
      preg_match( '#http://player.vimeo.com/video/([0-9]+)#s', $embed, $match );

      if ( isset($match[1]) ) {

        $video_id = $match[1];

        // Try to get a thumbnail from Vimeo
        $get_vimeo_thumb = unserialize(file_get_contents_curl('http://vimeo.com/api/v2/video/'. $video_id .'.php'));

        $video_thumb = $get_vimeo_thumb[0]['thumbnail_large'];

      }

    }

    // return whichever thumbnail image you would like to retrieve
    return $video_thumb;

 }

这是一个典型的 TED 嵌入:

<iframe    
    src="http://embed.ted.com/talks/andy_puddicombe_all_it_takes_is_10_mindful_minutes.html" 
    width="560" height="315"
    frameborder="0"
    scrolling="no"
    webkitAllowFullScreen mozallowfullscreen allowFullScreen>
</iframe>

如果有帮助的话,还有 TED API 文档:http: //developer.ted.com/API_Docs

我似乎无法自定义 preg_match 和/或 $get_vimeo_thumb 部分(至少这是我认为正在发生的事情)。基本上,我正在学习 PHP 的这一部分,而且很坎坷。

4

2 回答 2

2

你可以试试这个

    $source = 'http://www.ted.com/talks/andy_puddicombe_all_it_takes_is_10_mindful_minutes';
$tedJson = json_decode(file_get_contents('http://www.ted.com/talks/oembed.json?url='.urlencode($source)), TRUE);
    pr($tedJson);

你会得到json作为回应

于 2018-01-09T11:54:00.750 回答
0

我不知道是什么让我回答了这个问题,但这是一个(经过测试的工作)又快又脏的。您可能想在某处进行一些验证。如果我为此获得报酬,它将不会使用file_get_contents,我可能会使用DOMDocument.

$embed = '<iframe    
    src="http://embed.ted.com/talks/andy_puddicombe_all_it_takes_is_10_mindful_minutes.html" 
    width="560" height="315"
    frameborder="0"
    scrolling="no"
    webkitAllowFullScreen mozallowfullscreen allowFullScreen>
</iframe>';

function getThumbnail($embed){
    preg_match("/src\=\"(.+)?\"/", $embed, $matches);
    $uri = $matches[1];
    preg_match("/posterUrl\s=\s\'(.+)?\'/", file_get_contents($uri), $matches);
    echo $matches[1];
}

getThumbnail($embed);

我们正在获取srciframe,获取内容,并废弃 JS 嵌入变量以获取他们用于缩略图的图像。

显然你不会回显输出,谁知道这是否违反他们的 TOS。事实上,我敢打赌,除非您保留徽标(事实并非如此),否则他们至少不会让您使用它。使用风险自负。

于 2013-06-29T01:05:12.240 回答