我正在尝试抓取整个频道的视频源(所有视频数据)并将其存储到我的MySQL数据库中,以便在我目前正在使用的应用程序中使用。我不是YouTube API最有经验的人。我正在使用的代码如下:
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方法的同时不再继续扩展内存使用量。如果有一种方法可以让它突破循环但是如果还有剩下的视频会重新启动会很棒。我一直在寻找,但谷歌这个问题是一件很难的事情(为了得到我想要的结果)。
答案 0 :(得分:1)
您是否尝试过使用迭代而不是递归?我可以想象PHP可能会保留函数中声明的变量,尤其是$data
,直到函数保留为止。或者,您可以在开始递归之前调用unset($data);
。
另外:你确定没有无限循环吗?也许您需要在致电startIndex()
之前再次致电getNextFeed()
?