2010-03-10 30 views
1

如何获取YouTube提供的YouTube嵌入代码并使用正则表达式将其转换为有效的FBML代码,也就是使用fb:swf标记?正则表达式解析YouTube嵌入代码

迄今为止正则表达式我已经想出是:

preg_replace('/<object(.*)<\/object>/i', "Whatever I need here...", $str); 

我知道这是跛,但它是我的第一次尝试。

PS:YouTube嵌入式代码样本,

<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/NWHfY_lvKIQ&hl=en_GB&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/NWHfY_lvKIQ&hl=en_GB&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object> 
+1

应该采取什么结果是给定的样本 – codaddict 2010-03-10 12:27:33

+0

我假设你问如何?从嵌入代码收集视频网址,然后你做你的事情,并得到你想要的任何东西,对吧? – Marcelo 2010-03-10 12:31:13

+0

http:// stackoverf low.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2010-03-10 12:40:29

回答

-2

至于我已经想通,想从嵌入的代码收集的视频网址,然后你做你的事,并得到任何你想用它。

假设整个嵌入式代码中只有两个URL(源和值),并且URL中没有引号(至少不是YouTube的),我使用的正则表达式是:

[^(src=")]http.*[^"] 

说明:http不是由precceeded“SRC =“”是得了直到有报价

0

我不得不这样做只是一天。下面是我写的,以获得影片ID的一个字符串/输入,并把它们放到一个数组的函数(你可以插入到你的嵌入对象):

preg_match_all('/\/vi?\/([A-Za-z0-9\+_-]+)/i', $str_containing_yt_ids, $yt_ids); 

然后

print_r($yt_ids); 

和如果您需要动态地获得标题:

function get_yt_title($clip_id){ 
    $feedURL = 'http://gdata.youtube.com/feeds/api/videos/' . $clip_id; 
    $entry = simplexml_load_file($feedURL); 
    $video= new stdClass; 
    $media = $entry->children('http://search.yahoo.com/mrss/'); 
    $video->title = ucwords(strtolower($media->group->title)); 
    return $video->title; 
}