PHP YouTube API Разбор названия видео - PullRequest
1 голос
/ 13 мая 2011

Я использую некоторые регулярные выражения для анализа текста в стиле вики.

<?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 Ответ

1 голос
/ 13 мая 2011

Вы можете использовать функцию 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';
 ...
}
...