-1

54 行目でこのエラーが発生し続けますが、その理由はわかりません。私がやろうとしているのは、クエリ結果の最初のエントリを処理することだけです。その URL を抽出して、埋め込み可能なビデオ オブジェクトを構築します。

<?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;
?>
4

2 に答える 2

2

あなたが提示した PHP コードの問題は、YouTube RSS フィード URL を構成する部分にあるようです。次のようになります。

<?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;
}

これには次の 2 つの問題があります。

  1. ヒアドキュメントURL;の最後の行はインデントしないでください。次のようになります。

        case "English":
            $feedURL = <<<URL
            http://gdata.youtube.com/feeds/api/videos
            ?q=<?php echo $query; ?>
            &v=2
            &format=5
            &lr=en
    URL;
            break;
    
  2. <?php echo $query; ?>ヒアドキュメント内では使用しないでください。上記のブロックのよう$queryに、単独で使用してください。case "Spanish":

これらのヒアドキュメントを修正した後、コードが意図したとおりに動作しないことがわかります。 $feedURL不要な空白が大量に含まれ、呼び出しがsimplexml_load_file失敗する原因になります。しかし、フィードの URL をよく見ると、末尾の「言語コード」( enfr、 ) 以外はすべて同じであることがわかります。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];

コードの残りの部分は機能しているようです。RSS フィードの URL を取得する方法を修正すると、非常にうまくフィードを取得し、そこから YouTube の URL を取得して、ビデオ ID を取得しました。

于 2009-05-09T17:19:17.867 に答える
-2

問題は $media->group が空であることです。子はありません。つまり、$media->group->player は NULL です。attributes() を NULL で呼び出すことはできないため、構文エラーが発生します。

于 2009-05-08T22:01:02.537 に答える