2010-12-05 54 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()是你必須牢記的!