2012-08-12 25 views
0

我试图抓取整个频道的视频数据(所有视频数据)并将其存储到我的MySQL数据库中以供我在当前应用程序中使用工作。我不是YouTube API最有经验的人。我有工作的代码如下:使用YouTube API抓取数据超过1000个结果并且不使用最大内存

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

} 

我得到的错误是:

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 

这是在试图向上3000个视频抢我得到了一些错误之一。我的问题是,如何让这不会继续扩大内存使用量,同时再次继续执行printVideoFeed方法。如果有办法让它突破循环,但如果还有剩下的视频会重新启动,那就重新启动。我一直在寻找,但谷歌这个问题是一件很难做的事情(以获得结果即时寻找)。

回答

1

您是否尝试过使用迭代而不是递归?我可以想象,PHP可能会保留函数中声明的变量,特别是$data,直到函数被保留。或者,您可以在开始递归之前调用unset($data);

另外:你确定你没有无限循环?在致电getNextFeed()之前,您可能需要再拨打startIndex()

+0

啊,这是一个好主意,生病给它一个镜头...有时我倾向于忽视明显。 – Cameeob2003 2012-08-12 21:02:22

+0

完美解决。谢谢。 – Cameeob2003 2012-08-12 21:15:17