带有作业队列系统的PHP/Laravel中的逻辑代码

Nyx*_*nyx 5 php screen-scraping resque web-scraping laravel

我正在使用Laravel 3制作一个网络刮板并拥有一个队列系统resque.

问题:我应该在哪里放置抓取逻辑代码?

  • 在工人/工作班?

  • 在由worker/job类静态调用的库类中?

  • 在控制器功能中并且工作者/作业类触发控制器功能?

我目前在控制器功能中有它,所以我可以通过转到它的URL测试它.这也允许使用Cron重复作业,因为resque不允许重复作业.我仍然需要保留这种测试抓取功能的简单方法.

尝试:这是我在想的,你将如何为此目的组织代码?

工人阶级

class ScraperWorker
{
    public function perform()
    {
        $url = $this->args['url']
        Scraper::do_scrape($url);
    }
}
Run Code Online (Sandbox Code Playgroud)

刮痧班

class Scraper
{
    public static function do_scrape($url) {
        //some scraping code
    }
}   
Run Code Online (Sandbox Code Playgroud)

控制器类

用于快速测试,以及用于Cron作业

class Scraper_Controller extends Base_Controller {

    public function test_scrape($url) {
        Scraper::do_scrape($url);
    }
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*Bos 0

我认为你走在正确的道路上。您可以更改的一件事是使 Scraper 及其方法不是静态的。这不会使它变得更难使用,但更容易进行单元测试。当 Scraper 变得更加复杂并且需要配置时,这一点在以后变得尤其重要。

附言。检查PHP-Spider:一个可扩展且可配置的蜘蛛/抓取器。它可以为您节省很多工作。完全披露:我写的。