我正在使用Laravel 3制作Web刮板,并且具有队列系统resque
。
问题:我应该在哪里放置刮取逻辑代码?
在工人/工人阶级?
在一个由worker / job类静态调用的库类中?
在控制器功能中,并让worker / job类触发控制器功能吗?
我目前在控制器功能中拥有它,因此可以通过转到其URL进行测试。这也允许使用Cron进行周期性作业,因为resque
不允许进行周期性作业。我仍然需要保留这种简单的方式来测试抓取功能。
Attempt:这是我的想法,您将如何组织代码用于此类目的?
工人阶级
class ScraperWorker
{
public function perform()
{
$url = $this->args['url']
Scraper::do_scrape($url);
}
}
抓取类
class Scraper
{
public static function do_scrape($url) {
//some scraping code
}
}
Controller Class
用于快速测试,并击中Cron作业
class Scraper_Controller extends Base_Controller {
public function test_scrape($url) {
Scraper::do_scrape($url);
}
}
我认为您在正确的轨道上。您可以更改的一件事是使Scraper及其方法不是静态的。这将使它变得更难使用,但是很多更易于进行单元测试。稍后,当Scraper变得更复杂并且需要配置时,这一点变得尤为重要。
PS。检查PHP-Spider:可扩展且可配置的蜘蛛/刮板。它可以为您节省很多工作。完全公开:我写的。