youtube api search.php ошибка цикла foreach
Мой результат поиска API YouTube получает скрипт php. Отображает ошибки:
search.php
<?php
$ytapi="http://gdata.youtube.com";
?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<meta content='width=device-width, initial-scale=1, maximum-scale=1' name='viewport'/>
<meta charset='UTF-8'/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Searching for videos by keyword - Muftatube</title>
<style>
p{font-size: 30px;color: #FFE131; font-weight: bold;}
td {
vertical-align: top;
}
td.line {
border-bottom: solid 1px black;
}a{color: #ff0000; font-weight:bold; text-size: 18px;}
a:hover {
background-color: yellow;
}</style>
</head>
<body
<form action="search.php" method="get">
Search:
<input type="text" name="vq" />
Items per page:
<select name="i">
<option value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
</select>
<input type="submit" name="submit" value="Search"/>
</form></div>
<div id="nav">
</div>
<div id="section" text-align="center">
<?php
// if form not submitted
// display search box
if (!isset($_GET['vq'])) {
echo "<h2>Welcome to FullMufta Tube</h2><br /> This Is Search Page Go to home To serch and browse Videos";
// if form submitted
} else {
// check for search keywords
// trim whitespace
// encode search string
if (!isset($_GET['vq']) || empty($_GET['vq'])) {
die ('ERROR: Please enter one or more search keywords');
} else {
$vqs = $_GET['vq'];
$vq = ereg_replace('[[:space:]]+', ' ', trim($vqs));
$vq = urlencode($vq);
}
// set max results per page
if (!isset($_GET['i']) || empty($_GET['i'])) {
$i = 10;
} else {
$i = htmlentities($_GET['i']);
if($i>100)exit;
}
// set start index
if (!isset($_GET['pageID']) || $_GET['pageID'] <= 0) {
$o = 1;
} else {
$pageID = htmlentities($_GET['pageID']);
$o = (($pageID-1) * $i)+1;
}
// generate feed URL
$feedURL = $ytapi."/feeds/api/videos?vq={$vq}&max-results={$i}&start-index={$o}";
// read feed into SimpleXML object
$sxml = simplexml_load_file($feedURL);
echo '<!-- $feedURL: '.$feedURL.' -->';
?>
<h1>Search results: </h1><h4><?php echo $vqs; ?></h4>
<table>
<?php
// iterate over entries in resultset
// print each entry's details
foreach ($sxml->entry as $entry) {
// get nodes in media: namespace for media information
$media = $entry->children('http://search.yahoo.com/mrss/');
// get video player URL
$attrs = $media->group->player->attributes();
$watch = $attrs['url'];
// get <yt:duration> node for video length
$yt = $media->children($ytapi.'/schemas/2007');
$attrs = $yt->duration->attributes();
$length = $attrs['seconds'];
// get <gd:rating> node for video ratings
$gd = $entry->children('http://schemas.google.com/g/2005');
if ($gd->rating) {
$attrs = $gd->rating->attributes();
$rating = $attrs['average'];
} else {
$rating = 0;
}
// get video ID
$arr = explode('/',$entry->id);
$id = $arr[count($arr)-1];
// print record
preg_match('#v\=(.*?)\&#',$watch,$vid);
$watch='watch/?vid='.$vid[1];
echo "<tr><td colspan=\"2\" class=\"line\"></td></tr>\n";
echo "<tr>\n";
echo "<td><a href=\"{$watch}\">
<img src=\"fullmuftaimg.php?vid=$vid[1]&sz=0\"/></a></td>\n";
echo "<td><a href=\"{$watch}\">
{$media->group->title}</a><br/>\n";
echo sprintf("%0.2f", $length/60) . " min. | {$rating} user rating |
{$viewCount} views<br/>\n";
echo $media->group->description . "<br/>\n";
echo "</td></tr>\n";
}
}
?>
</table>
</body>
</html>
Он работал раньше, но теперь не работает. Я изменил сервер и запустил его снова, но результаты поиска не отображаются.
Сообщение об ошибке
Устаревший: функция ereg_replace() устарела в /home/u691059747/public_html/search.php в строке 69 Предупреждение: simplexml_load_file(): http://gdata.youtube.com/feeds/api/videos?vq=dj&max-results=10&start-index=1:1: ошибка синтаксического анализатора: документ пуст в /home/u691059747/public_html/search.php в строке 92 Предупреждение: simplexml_load_file(): в /home/u691059747/public_html/search.php в строке 92 Предупреждение: simplexml_load_file(): ^ в /home/u691059747/public_html/search.php в строке 92 Предупреждение: simplexml_load_file(): http://gdata.youtube.com/feeds/api/videos?vq=dj&max-results=10&start-index=1:1: ошибка синтаксического анализатора: ожидается начальный тег, '<' не найден в /home/u691059747/public_html/search.php в строке 92 Предупреждение: simplexml_load_file(): в /home/u691059747/public_html/search.php в строке 92 Предупреждение: simplexml_load_file(): ^ в /home/u691059747/public_html/search.php в строке 92
Результаты поиска:
Предупреждение: неверный аргумент указан для foreach() в /home/u691059747/public_html/search.php в строке 101
1 ответ
Просто обратите внимание, что YouTube отключил получение информации с помощью API v2, и вам следует переключиться на версию 3.
Но в любом случае, когда я печатаю $feedURL
переменная в вашем search.php
Я получаю то есть:
http://gdata.youtube.com/feeds/api/videos?vq=dj&max-results=10&start-index=1
Просмотр этого URL дает вывод:
No longer available
Поэтому вам следует сначала попытаться выяснить, почему этот URL-адрес YouTube больше не работает (если не V2/3, то, возможно, имена параметров изменились / etc ...)
А поскольку приведенная выше строка является просто текстом, а не допустимой строкой XML, вы получаете ошибку PHP:
parser error : Start tag expected, '<' not found in