6

Laravel 3を使用してWebスクレイパーを作成しており、キューシステムがありますresque

質問:スクレイピングロジックコードはどこに配置すればよいですか?

  • 労働者/仕事のクラスでは?

  • ワーカー/ジョブクラスによって静的に呼び出されるライブラリクラスでは?

  • コントローラー関数で、ワーカー/ジョブクラスにコントローラー関数をトリガーさせますか?

私は現在それをコントローラー関数に持っているので、そのURLに移動してテストできます。resqueこれにより、定期的なジョブが許可されないため、Cronを使用した定期的なジョブも許可されます。スクレイピング機能をテストするこの簡単な方法を維持する必要があります。

試み:これが私が考えていることですが、そのような目的のためにコードをどのように整理しますか?

労働者クラス

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

スクレイピングクラス

class Scraper
{
    public static function do_scrape($url) {
        //some scraping code
    }
}   

コントローラクラス

迅速なテストのため、およびCronジョブがヒットするため

class Scraper_Controller extends Base_Controller {

    public function test_scrape($url) {
        Scraper::do_scrape($url);
    }
}
4

1 に答える 1

0

あなたは正しい方向に進んでいると思います。変更できることの1つは、Scraperとそのメソッドを静的にしないことです。これにより、使用が難しくなることはありませんが、単体テストが非常に簡単になります。これは、後でスクレーパーがより複雑になり、構成が必要になったときに特に重要になります。

PS。PHP-Spiderを確認してください:拡張可能で構成可能なスパイダー/スクレーパー。それはあなたに多くの仕事を節約することができます。完全開示:私はそれを書きました。

于 2013-03-05T12:57:53.623 に答える