2013-03-05 50 views
5

我正在使用Laravel 3製作一個Web刮取器並擁有一個隊列系統resque使用Job Queue系統的PHP/Laravel中的邏輯代碼

問題:我應該在哪裏放置scraping邏輯代碼?

  • 在工人/工作類?

  • 在由worker/job類靜態調用的庫類中?

  • 在控制器函數中並讓worker/job類觸發控制器函數?

我目前有它在控制器功能,所以我可以通過轉到它的網址來測試它。這也允許使用Cron的重複作業,因爲resque不允許重複作業。我仍然需要保留這種測試抓取功能的簡單方法。

嘗試:這是我在想什麼,你將如何組織你的代碼用於這種目的?

工人階級

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

回答

0

我想你是在正確的軌道上。你可以改變的一件事是讓Scraper及其方法不是靜態的。這將使它不會更難使用,但更容易進行單元測試。隨着刮刀變得越來越複雜並且需要配置,這變得尤爲重要。

PS。檢查PHP-Spider:一個可擴展和可配置的蜘蛛/刮刀。它可以爲你節省很多工作。注意:目前它對於遠程工作人員沒有默認實現,但這是在不遠的將來的路線圖。充分披露:我寫了它。