PHP error de Sintaxis con el API de Youtube:Parse error:error de sintaxis, inesperado T_ENCAPSED_AND_WHITESPACE, esperando T_STRING o T_VARIABLE o T_NUM_STRING
Pregunta
Sigo recibiendo este error en la línea 54 y no sé por qué.Todo lo que yo estoy tratando de hacer es el proceso de la primera entrada de el resultado de la consulta:extracto de una URL así como para la construcción de un vídeo embebido de objeto.
<?php
function extractID($youtubeURL)
{
//split off the final bit of the URL beginning with ‘=’
$youtubeID = strchr($youtubeURL,'=');
//remove that equals sign to get the video ID
$youtubeID = substr($youtubeID,1);
return $youtubeID;
}
?>
<?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=<?php echo $query; ?>
&v=2
&format=5
&lr=es
URL;
break;
}
// read feed into SimpleXML object
$sxml = simplexml_load_file($feedURL);
// get the first media entry &
// get nodes in media: namespace for media information
$media = $sxml->entry[0]->children('http://search.yahoo.com/mrss/');
// get video player URL
$attrs = $media->group->player->attributes();
// **THIS KEEPS CAUSING THE ERROR.**
$videoURL = $attrs['url'];
// extract the video's ID from the URL
$videoID = extractID($videoURL);
?>
<?php
echo <<<EOD
<objectwidth="425" height="350" data="http://www.youtube.com/v/
<?php echo $videoID ?>
type="application/x-shockwave-flash"><param name="src"
value="http:/www.youtube.com/v/<?php echo $videoID ?>" /></object>
EOD;
?>
Solución
El problema en el código PHP que usted ha presentado parece ser en la parte de ella que se construye el YouTube URL de la fuente RSS.El siguiente aspecto:
<?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;
}
Hay dos cosas que puedo ver son mal con esto:
El
URL;
líneas al final de la heredocs debe no sangrar.Se debe parecerse a la siguiente:case "English": $feedURL = <<<URL http://gdata.youtube.com/feeds/api/videos ?q=<?php echo $query; ?> &v=2 &format=5 &lr=en URL; break;
No uso
<?php echo $query; ?>
dentro de heredocs.Sólo uso$query
en su propia, como en elcase "Spanish":
bloque encima.
Después de la fijación de estos heredocs, usted encontrará que el código no hacer lo que usted desea. $feedURL
contendrá una gran cantidad de espacios en blanco no deseados, y esto hará que su llamada para simplexml_load_file
a fallar.Pero si te fijas en la Url, te darás cuenta de que todos ellos son el mismo, aparte de la 'código de idioma' (en
, fr
, es
) en la final.Lo que yo haría sería utilizar una matriz que traduce los nombres de idiomas en códigos de lenguaje, y el uso que añadir el código de idioma para la URL del feed.Por ejemplo, algo como lo siguiente debería funcionar:
$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];
El resto del código que aparece a la obra.Una vez me había fijado hasta conseguir la URL de la fuente RSS, que felizmente recuperado la alimentación, sacó una URL de YouTube, y tengo la ID del vídeo.
Otros consejos
El problema es que $ media - > group está vacío. No tiene hijos. Eso significa que $ media - & Gt; group - & Gt; player es NULL. No puede llamar a los atributos () en NULL, por lo que obtiene un error de sintaxis.