2011-05-13 136 views
1

我使用一些正則表達式來解析wiki風格的文本。PHP YouTube API視頻標題解析

<?php 
function wikiParser($data){ 
$data = preg_replace('/\[\[Youtube:([a-zA-Z0-9_]+)\]\]/', getYoutubeTitle("$1"), $data); 
return $data; 
} 
?> 

該功能搜索等[[的Youtube:b32hRITAAew]串和卡列斯另一功能getYoutubeTitle(b32hRITAAew

<?php 
function getYoutubeTitle($hash){ 
$url = 'http://gdata.youtube.com/feeds/api/videos?v=2&q='.$hash.'&max-results=1&fields=entry(title)&prettyprint=true'; 
$fp = fopen($url, 'r'); 
$page = ''; 
while(!feof($fp)){ 
    $page .= fgets($fp, 4096); 
} 
$titre = eregi("<title>(.*)</title>", $page, $regs); 
return $regs[1]; 
} 
?> 

第二功能解析響應數據。在b32hRITAAew代碼的情況下,下面的URL訪問

http://gdata.youtube.com/feeds/api/videos?v=2&q=b32hRITAAew&max-results=1&fields=entry(title)&prettyprint=true

它輸出:

<?xml version='1.0' encoding='UTF-8'?> 
<feed xmlns='http://www.w3.org/2005/Atom'> 
    <entry> 
     <title>The Lord of the Rings Symphony (1) HQ</title> 
    </entry> 
</feed> 

的標題應該是魔戒交響樂團的主( 1)HQ。但由於未知的原因,它顯示我一些隨機攝影技巧 - 易於任何相機圖像穩定器。我一直在努力解決這個問題,但仍然無法解決這個問題。 getYoutubeTitle("$1")還有其他問題嗎?

回答

1

可以使用preg_replace_callback功能是這樣的:

function wikiParser($data){ 
$data = preg_replace_callback('/\[\[Youtube:([a-zA-Z0-9_]+)\]\]/', "getYoutubeTitle", $data); 
return $data; 
} 

function getYoutubeTitle($array){ 
// $array looks like this: Array ([0] => [[Youtube:b32hRITAAew]] [1] => b32hRITAAew) 
$hash = array_pop($array); 
$url = 'http://gdata.youtube.com/feeds/api/videos?v=2&q='.$hash.'&max-results=1&fields=entry(title)&prettyprint=true'; 
... 
} 
+0

感謝,這作品! – 2011-05-13 18:04:19