Проблема в представленном вами PHP-коде, по-видимому, связана с тем, что он создает URL-адрес RSS-канала YouTube. Это выглядит следующим образом:
<?php
// set feed URL
$lang = $_POST['language'];
$query = $_POST['query'] . "%20review";
switch($lang){
case "English":
$feedURL = <<<URL
http://gdata.youtube.com/feeds/api/videos
?q=<?php echo $query; ?>
&v=2
&format=5
&lr=en
URL;
break;
case "French":
$feedURL = <<<URL
http://gdata.youtube.com/feeds/api/videos
?q=<?php echo $query; ?>
&v=2
&format=5
&lr=fr
URL;
break;
case "Spanish":
$feedURL = <<<URL
http://gdata.youtube.com/feeds/api/videos
?q=$query;
&v=2
&format=5
&lr=es
URL;
break;
}
Есть две вещи, которые я вижу, это неправильно:
Строки URL;
в конце heredocs должны иметь , а не с отступом. Они должны выглядеть примерно так:
case "English":
$feedURL = <<<URL
http://gdata.youtube.com/feeds/api/videos
?q=<?php echo $query; ?>
&v=2
&format=5
&lr=en
URL;
break;
Не используйте <?php echo $query; ?>
внутри heredocs. Просто используйте $query
самостоятельно, как в блоке case "Spanish":
выше.
После исправления этих heredoc вы обнаружите, что код не будет делать то, что вы хотите. $feedURL
будет содержать много нежелательных пробелов, и это приведет к сбою вашего вызова на simplexml_load_file
. Но если вы внимательно посмотрите на URL-адреса каналов, вы заметите, что они все одинаковы, за исключением «языкового кода» (en
, fr
, es
) в конце. Я хотел бы использовать массив, который переводит названия языков в коды языков, и использовать его для добавления кода языка в URL канала. Например, что-то вроде следующего должно работать:
$lang_codes = array(
"English" => "en",
"French" => "fr",
"Spanish" => "es"
);
$feedURL = "http://gdata.youtube.com/feeds/api/videos?q=$&v=2&format=5&lr=" . $lang_codes[$lang];
Остальная часть вашего кода работает. После того, как я исправил получение URL-адреса RSS-канала, он с радостью получил его, вытащил из него URL-адрес YouTube и получил идентификатор видео.