2010-12-05 31 views
0

WordPress如何让您通过url嵌入youtube/dailymotion/vimeo视频?例如,如果您输入[youtube = http://www.youtube.com/watch?v = cXXm696UbKY],视频就会出现在那里。 反正有没有在php中使用markdown安全地做到这一点?允许将视频嵌入评论/文字

回答

2

大多数(所有?)的这些视频平台都提供了oEmbed支持。

例如对于YouTube视频http://www.youtube.com/watch?v=cXXm696UbKY它是http://www.youtube.com/oembed?url=http%3A//www.youtube.com/watch%3Fv%cXXm696UbKY

这将返回一个您可以用json_decode轻松解析的响应。

{ 
    "provider_url": "http:\/\/www.youtube.com\/", 
    "title": "Auto-Tune the News #8: dragons. geese. Michael Vick. (ft. T-Pain)", 
    "html": "<object width=\"425\" height=\"344\"><param name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/bDOYN-6gdRE?fs=1\"><\/param><param name=\"allowFullScreen\" value=\"true\"><\/param><param name=\"allowscriptaccess\" value=\"always\"><\/param><embed src=\"http:\/\/www.youtube.com\/v\/bDOYN-6gdRE?fs=1\" type=\"application\/x-shockwave-flash\" width=\"425\" height=\"344\" allowscriptaccess=\"always\" allowfullscreen=\"true\"><\/embed><\/object>", 
    "author_name": "schmoyoho", 
    "height": 344, 
    "thumbnail_width": 480, 
    "width": 425, 
    "version": "1.0", 
    "author_url": "http:\/\/www.youtube.com\/user\/schmoyoho", 
    "provider_name": "YouTube", 
    "thumbnail_url": "http:\/\/i3.ytimg.com\/vi\/bDOYN-6gdRE\/hqdefault.jpg", 
    "type": "video", 
    "thumbnail_height": 360 
} 

有趣的部分是html属性。

因此,我们所要做的就是搜索[YouTube=...]标签的文本,提取YouTube网址并通过oEmbed检索嵌入代码。

这里工作的例子:

<?php 
function getYouTubeCode($url) 
{ 
    $oembedUrl = 'http://www.youtube.com/oembed?url=' . urlencode($url); 

    // The @-operator suppresses errors if the YouTube oEmbed service can't handle our request 
    $data = @file_get_contents($oembedUrl); 

    // If $data contains invalid JSON code, it will return null 
    $data = json_decode($data); 

    // So if $data is not an object now, we abort 
    if (!is_object($data)) { 
     return ''; 
    } 

    // Otherwise we return the YouTube embed code 
    return $data->html; 
} 

$text = '<h1>Hi There</h1><p>You gotta watch this video:</p><p>[YouTube=http://www.youtube.com/watch?v=cXXm696UbKY]</p>'; 

$matches = array(); 

// We scan the $text variable for all occurrences of "[YouTube=<Any character except right squared bracket>]" 
if (preg_match_all('/\[YouTube=([^\]]+)\]/i', $text, $matches, PREG_SET_ORDER)) { 
    foreach ($matches as $match) { 
     // Eg. $match[0] is "[YouTube=http://www.youtube.com/watch?v=cXXm696UbKY]" 
     // and $match[1] is "http://www.youtube.com/watch?v=cXXm696UbKY" 
     $text = str_replace($match[0], getYouTubeCode($match[1]), $text); 
    } 
} 

echo $text; 
+0

是错在爱上一个答案? – jonnnnnnnnnie 2010-12-05 00:45:55

1

我真的不知道WordPress的问题,但基本的逻辑是搜索网址,并将其转换为Youtube嵌入代码,添加它周围的东西!我认为preg_replace()是你必须牢记的!