2011-06-28 12 views
1

特定のYouTubeチャンネルからすべての動画を取得しようとしています。YouTube動画を特定のチャンネルからプルする

私はこのエラーを取得しています:

Fatal error: Call to undefined function getYTid() in C:\inetpub\wwwroot\ped.php on line 71 

任意の提案ですか?

class ChannelFeed { 

    function __construct($username){ 
     $this->username=$username; 
     echo $this->username; 
     $this->feedUrl=$url='http://gdata.youtube.com/feeds/api/users/'.$username.'/uploads?orderby=updated'; 
     $this->feed=simplexml_load_file($url); 
    } 

    public function getYTid() { 

     $ytURL = $this->feed->entry->link['href']; 

     $ytvIDlen = 11; // This is the length of YouTube's video IDs 

     // The ID string starts after "v=", which is usually right after 
     // "youtube.com/watch?" in the URL 
     $idStarts = strpos($ytURL, "?v="); 

     // In case the "v=" is NOT right after the "?" (not likely, but I like to keep my 
     // bases covered), it will be after an "&": 
     if($idStarts === FALSE) 
     $idStarts = strpos($ytURL, "&v="); 
     // If still FALSE, URL doesn't have a vid ID 
     if($idStarts === FALSE) 
     die("YouTube video ID not found. Please double-check your URL."); 

     // Offset the start location to match the beginning of the ID string 
     $idStarts +=3; 

     // Get the ID string and return it 
     $ytvID = substr($ytURL, $idStarts, $ytvIDlen);  
     return $ytvID; 
    } 

public function showFullFeed(){ 
$vidarray = array(); 
    foreach($this->feed->entry as $video){ 
     $vidarray[] = $video->link['href']; 
    } 
    return $vidarray ; 
} 


}; 
$youtube = new ChannelFeed('channel_name'); 
$vids = $youtube->showFullFeed(); 
$vidIDs = array_map(getYTid(),$vids); 
+0

「$ this-> feedUrl = $ url = 'http://gdata.youtube.com/feeds/api/us ers /'.$ username。 '/ uploads?orderby = updated''と表示されています。 –

答えて

5

私はこれを改訂.....正しく動作します。

class ChannelFeed { 
    function __construct($username){ 
     $this->username=$username;   
     //$this->feedUrl=$url='http://gdata.youtube.com/feeds/api/users/'.$username.'/uploads?orderby=published'; 
     $this->feedUrl=$url='http://gdata.youtube.com/feeds/api/videos?author=' . $username; 
     $this->feed=simplexml_load_file($url); 
    } 

    public function getYTid($links) { 
     $IDs = array(); 
     foreach ($links as $href) { 
      $ytURL = $href; 
     //$ytURL = $this->feed->entry->link['href']; 

      $ytvIDlen = 11; // This is the length of YouTube's video IDs 

      // The ID string starts after "v=", which is usually right after 
      // "youtube.com/watch?" in the URL 
      $idStarts = strpos($ytURL, "?v="); 

      // In case the "v=" is NOT right after the "?" (not likely, but I like to keep my 
      // bases covered), it will be after an "&": 
      if($idStarts === FALSE) 
      $idStarts = strpos($ytURL, "&v="); 
      // If still FALSE, URL doesn't have a vid ID 
      if($idStarts === FALSE) 
      die("YouTube video ID not found. Please double-check your URL."); 

      // Offset the start location to match the beginning of the ID string 
      $idStarts +=3; 

      // Get the ID string and return it 
      $ytvID = substr($ytURL, $idStarts, $ytvIDlen);  
      $IDs[] = $ytvID; 
     } 
     return $IDs;   
    } 

    public function showFullFeed(){ 
    $vidarray = array();  
     foreach($this->feed->entry as $video){ 
      $vidarray[] = $video->link['href'];   
     } 
     return $vidarray; 
    } 
}; 

$youtube = new ChannelFeed('channel_name'); 
$vids = $youtube->showFullFeed(); 
$vidIDs = $youtube->getYTid($vids); 
1

あなたのコードの残りの部分をチェックアウトせずに、あなたのarray_mapは、あなたのクラス、ChannelFeedの方法を使用しています。 documentationには、配列を使用して、コールバックとして適用したい関数がどこにあるのかを伝える必要があります。

変更し、これにあなたのコードの最後の行:

$vidIDs = array_map(array($youtube, 'getYTid'), $vids); 
+0

ありがとう、あなたのコードと私はそれが働くようにつまらないのビット – MonOve

0
$vidIDs = array_map(getYTid(),$vids); 

はあなたがarray_mapgetYTid()を呼び出すのではなく関数への参照の結果を渡しているだけでなく、しかし、あなたは渡していません任意のオブジェクトコンテキスト... getYTidはメンバ関数です。その後、再び

読むthe documentation for array_map、試してみてください。

$vidIDs = array_map(array($youtube, "getYTid"), $vids); 

を前のオブジェクトの受け渡しは、デフォルトではで参照になった、あなたが必要とするPHP 5.3に:

$vidIDs = array_map(array(&$youtube, "getYTid"), $vids); 
関連する問題