Cameeob2003
Cameeob2003

Reputation: 482

Grabbing data using the YouTube API over 1000 results and without using the Max Memory

I am trying to grab an entire channels video feed (all of the videos data) and store it into my MySQL database for use in an application I am currently working on. I am not the most experienced with the YouTube API. The code I am working with is the following:

public function printVideoFeed($count)
{
    $this->startIndex($count);
    $data = $this->yt->getVideoFeed($this->query);

    foreach($data as $video)
    {
        echo $count .' - '.$video->getVideoTitle().'<br/>';
        $count++;
    }

    //check if there are more videos
    try{
        $nextFeed = $data->getNextFeed();
    } catch(Zend_Gdata_App_Exception $e)
    {
        echo $e->getMessage(). '<br/>';
    }

    if($nextFeed)
    {
        $this->printVideoFeed($count);
    }

}

The error I am getting is:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 36 bytes) in C:\Program Files\ZendFrameworkCli\library\Zend\Gdata\App\Base.php on line 431

This is one of a few errors I am getting while trying to grab upwards of 3000 videos. My question is how can I make this not continue to expand the memory usage while continuing to do the printVideoFeed method again. If there is a way to make it break out of the loop but restart if there are still videos left that would be awesome. Ive been looking but to google this question is kind of a hard thing to do (to get the results im looking for).

Upvotes: 0

Views: 357

Answers (1)

eflorico
eflorico

Reputation: 3629

Have you tried using iteration instead of recursion? I can imagine that PHP might keep the variables declared in the function, i.e. especially $data, until the function is left. Alternatively, you could call unset($data); before starting the recursion.

Also: Are you sure you have no infinite loop? Maybe you need to call startIndex() again before calling getNextFeed()?

Upvotes: 1

Related Questions