2011-05-13 74 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