2011-06-28 202 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); 
相关问题