MonOve
MonOve

Reputation: 1101

Pulling in YouTube Videos from Specific Channel

I'm trying to pull all videos from a specific youtube channel.

I'm getting this error:

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

Any suggestions?

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);

Upvotes: 1

Views: 2291

Answers (3)

rcastro88
rcastro88

Reputation: 66

I revised this to work correctly.....

    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);

Upvotes: 5

Lightness Races in Orbit
Lightness Races in Orbit

Reputation: 385144

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

Not only are you passing the result of calling getYTid() to array_map rather than a reference to the function, but you're not passing any object context... and getYTid is a member function.

Read again the documentation for array_map, then try:

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

Prior to PHP 5.3, in which object passing became by-reference by default, you'll need:

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

Upvotes: 0

Jesse Bunch
Jesse Bunch

Reputation: 6679

Without checking out the rest of your code, your array_map is using a method of your class, ChannelFeed. Per the documentation, you must use an array to tell it where the function you're wanting to apply as a callback is located.

Change the last line of your code to this:

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

Upvotes: 1

Related Questions