0

いつかはわかりませんが、ある時点でYouTubeの検索方法が機能しなくなり、何年も機能しましたが、APIと埋め込み動画を表示するための推奨される方法の両方が変更されました。公式のGoogleドキュメントを確認しましたが、Zendまたは現在開発中のバージョン3のGoogle APIを使用するオプションがあります。これらは、現在使用しているものよりもはるかに大きなコードベースです。

私は自分のコードをデバッグしようとしましたが、それを廃棄してより公式なPHPコードベースをプロジェクトに統合すれば、最終的には再び機能する可能性があります。これは私のメソッドが置かれている場所であり、データを検出しますが、ビデオを表示していないようです...

public function embeddableVideoClipFor($searchString)
   {
        // Previous experience revealed that video search is not perfect, but we're just going to giver and create an embedded player with the 
        // top result or return NULL
        // I used this as a guide to build my embedded player http://code.google.com/apis/youtube/youtube_player_demo.html
        $embeddableVideoClipHTML = NULL;

        // Further details on searching YouTube http://www.ibm.com/developerworks/xml/library/x-youtubeapi/
        // This was working well for over two years but now I'm getting no videos, I may have been throttled or more likely the API has changed...
        // Before switching to Zend or going to switch to version 3.0 of Google/YouTube API I should try and debug...

        $vq = $searchString;
        $vq = preg_replace('/[[:space:]]+/', ' ', trim($vq));
        $vq = urlencode($vq);
        $feedURL = 'http://gdata.youtube.com/feeds/api/videos?q=' . $vq . '&safeSearch=none&orderby=viewCount&v=2'; // Added version two tag...


        print_r($feedURL);  


        // read feed into SimpleXML object
        try
        {
            $youTubeXML = simplexml_load_file($feedURL);
        }
        catch(Exception $e)
        {   
            // This rarely throws an error, but when it does, I just want to pretend I can't find a video clip
            $youTubeXML = NULL;
        }   

        print("<pre>");
        print_r($youTubeXML);
        print("</pre>");

        if(($youTubeXML != NULL) && ( ! empty($youTubeXML->entry->link[0]['href'])))
        {
            $videoLink = $youTubeXML->entry->link[0]['href'];  // This is not enough, I need to trim the beginning and end off this to just get the video code
            $trimedURL = str_replace('http://www.youtube.com/watch?v=', '' , $videoLink);
            $videoCode = str_replace('&feature=youtube_gdata', '', $trimedURL);
            // $embeddableVideoClipHTML = '<object style="height: 390px; width: 640px"><param name="movie" value="http://www.youtube.com/v/' . $videoCode . '"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed src="http://www.youtube.com/v/' . $videoCode . '?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="390"></object>';
            // $embeddableVideoClipHTML = '<iframe id="ytplayer" type="text/html" width="640" height="360" src="https://www.youtube.com/embed/' . $videoCode . '"frameborder="0" allowfullscreen>';
            // Version 3
            $embeddableVideoClipHTML = '<object width="640" height="360"><param name="movie" value="https://www.youtube.com/v/' . $videoCode . '?version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="https://www.youtube.com/v/' . $videoCode . '?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360"></embed></object>';
        }

        return $embeddableVideoClipHTML;
   }
4

1 に答える 1

0

試したので理由はわかりませんが、iFrameに切り替えます。つまり、次のコード行です。

// $embeddableVideoClipHTML = '<iframe id="ytplayer" type="text/html" width="640" height="360" src="https://www.youtube.com/embed/' . $videoCode . '"frameborder="0" allowfullscreen>';

現在は機能していますが、より公式なPHPフレームワークの1つを使用するためにフープを飛び越えるべきかどうか疑問に思っています。実際には、この1つのメソッドのみを使用してGoogle / YouTube APIにアクセスします。これは、マッシュアップの大部分ではありませんが、映画の予告編や歌詞の引用に気に入っています。

于 2013-02-16T23:47:14.110 に答える