2011-06-28 198 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); 

你不僅是通過調用getYTid()array_map而不是函數的引用的結果,但你不及格任何對象的上下文...和getYTid是一個成員函數。

再讀the documentation for array_map,然後嘗試:

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

此前PHP 5.3,其中物體通過成爲通過引用默認情況下,你將需要:

$vidIDs = array_map(array(&$youtube, "getYTid"), $vids); 
相關問題