从嵌入式iframe获取YouTube图像


Get YouTube Image from Embed iframe

我在wordpress页面上为youtube嵌入了这个iframe。

所以我正在重新创建每个嵌入帧,我只需要剩下两件事:src和image

我有regexp来获取src:

function youtube($html) {
    if (strpos($html, "<iframe" ) !== false) {
        $frame = preg_match('/<iframe.*?'/iframe>/i', $html, $match2);
        $count = preg_match('/src=(["''])(.*?)'1/', $match2[0], $match);
        var_dump($match);
    } else {
        return $html;
    }
}
add_filter('bp_get_activity_content_body', 'youtube', 10);
add_filter('the_excerpt', 'youtube', 10);
add_filter('the_content', 'youtube', 10);

所以$match包含我的src。但我用图像叠加,这是一个iframe(我还删除了脚本部分,在我的副本中不会有太多作用)

<iframe width="591" height="332" src="http://www.youtube.com/embed/1lws4QPUL7I?feature=oembed" frameborder="0" allowfullscreen="">
#document
<html lang="en" dir="ltr" data-cast-api-enabled="true">
    <head>
        <title>Craig Ferguson   2013 06 20   Lewis Black, Matt Morales - YouTube</title>
        <link rel="canonical" href="http://www.youtube.com/watch?v=1lws4QPUL7I">
        <link id="css-1394124665" class="www-embed-player" rel="stylesheet" href="http://s.ytimg.com/yts/cssbin/www-embed-player-webp-vflC5nNwO.css" data-loaded="true">
    </head>
    <body id="" class="date-20130829 en_US ltr   ytg-old-clearfix site-left-aligned exp-watch7-comment-ui webkit webkit-537" dir="ltr">
        <div id="player" class="full-frame" style="width: 100%; height: 100%; overflow: hidden;">
            <embed name="player1" height="100%" width="100%" id="player1" tabindex="0" type="application/x-shockwave-flash" src="http://s.ytimg.com/yts/swfbin/watch_as3-vfldizVp8.swf" allowscriptaccess="always" allowfullscreen="true" bgcolor="#000000" flashvars="user_display_name=Radikal%20Edward&amp;iurl=http%3A%2F%2Fi1.ytimg.com%2Fvi%2F1lws4QPUL7I%2Fhqdefault.jpg&amp;ldpj=-10&amp;thumbnail_num_shards=1&amp;rel=1&amp;authuser=0&amp;hl=en_US&amp;probably_logged_in=1&amp;iurlsd=http%3A%2F%2Fi1.ytimg.com%2Fvi%2F1lws4QPUL7I%2Fsddefault.jpg&amp;length_seconds=2376&amp;idpj=-2&amp;cr=US&amp;video_id=1lws4QPUL7I&amp;is_html5_mobile_device=false&amp;user_display_image=https%3A%2F%2Flh4.googleusercontent.com%2F-PcXCu3dRJSk%2FAAAAAAAAAAI%2FAAAAAAAAAAA%2FoIo6fJTO2X4%2Fs28-c-k%2Fphoto.jpg&amp;allow_ratings=1&amp;iurlmaxres=http%3A%2F%2Fi1.ytimg.com%2Fvi%2F1lws4QPUL7I%2Fmaxresdefault.jpg&amp;fexp=939106%2C929117%2C929121%2C929906%2C929907%2C929922%2C929127%2C929129%2C929131%2C929930%2C936403%2C925726%2C925720%2C925722%2C925718%2C929917%2C906945%2C929933%2C920302%2C906842%2C913428%2C920605%2C919811%2C904830%2C919373%2C930803%2C908536%2C904122%2C938701%2C936308%2C909549%2C900816%2C912711%2C904494%2C904497%2C900375%2C906001&amp;view_count=260&amp;endscreen_module=http%3A%2F%2Fs.ytimg.com%2Fyts%2Fswfbin%2Fendscreen-vfl2YNgK7.swf&amp;playlist_module=http%3A%2F%2Fs.ytimg.com%2Fyts%2Fswfbin%2Fplaylist_module-vflie7hg5.swf&amp;enablejsapi=1&amp;avg_rating=5&amp;allow_embed=1&amp;el=embedded&amp;sk=puClsWoCKB-tDaeZo-YHXBSb1UkBB1wuC&amp;feature=oembed&amp;share_icons=http%3A%2F%2Fs.ytimg.com%2Fyts%2Fswfbin%2Fsharing-vflF4tO1T.swf&amp;title=Craig%20Ferguson%20%20%202013%2006%2020%20%20%20Lewis%20Black%2C%20Matt...&amp;sendtmp=1&amp;abd=1&amp;eurl=http%3A%2F%2Flocaldollars.ge%2F&amp;playerapiid=player1&amp;framer=http%3A%2F%2Flocaldollars.ge%2F">
        </div>
    </body>
</html>
</iframe>

同样在我函数的第一部分,我想检查iframe是否属于youtube(因为我也有不同的),我只检查iframe

 if (strpos($html, "<iframe" ) !== false)

我没有想出regexp,因为宽度和高度可能会改变

您只想使用视频ID。

代码

下面的SO回答解释了如何从视频ID中获取youtube图像。

然后,您可以使用以下PHP代码作为构建自定义html代码的指南。

function youtube($html) {
   $search = '#<iframe.+?src="http://www.youtube.com/embed/([a-zA-Z0-9_-]{11})[^"]*"[^>]+?>['S's]+?</iframe>#i';
   // Is it a youtube iframe ?
   if (preg_match($search, $html, $matches)) { // Yes
       $videoID = $matches[1];
       // Recreate your embed iframe here ...
   } else { // No
       return $html;
   }
}
add_filter('bp_get_activity_content_body', 'youtube', 10);
add_filter('the_excerpt', 'youtube', 10);
add_filter('the_content', 'youtube', 10);

REGEXP

您可以在此处查看regexp的作用:http://regexr.com?36hho