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

StackOverflow https://stackoverflow.com/questions/841766

  •  20-08-2019
  •  | 
  •  

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;
?>
¿Fue útil?

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:

  1. 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;
    
  2. No uso <?php echo $query; ?> dentro de heredocs.Sólo uso $query en su propia, como en el case "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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top