2013-03-05 11 views
5

Realizzo un raschiatore web utilizzando Laravel 3 e un sistema di code resque.Codice logico in PHP/Laravel con sistema Job Queue

Domanda: Dove devo inserire il codice logico di scraping?

  • Nel lavoratore/nella classe di lavoro?

  • In una classe di libreria che viene definita staticamente dal worker/job class?

  • In una funzione di controllo e l'operatore/la classe di lavoro attiva la funzione di controllo?

Attualmente l'ho nella funzione controller in modo che possa verificarlo andando al suo URL. Ciò consente inoltre di ricorrere a lavori ricorrenti utilizzando Cron, poiché resque non consente processi ricorrenti. Avrò ancora bisogno di mantenere questo modo semplice di testare le funzioni di raschiatura.

Tentativo: Ecco a cosa sto pensando, come organizzerai il tuo codice per tali scopi?

Worker Class

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

Raschiare Classe

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

controller Classe

Per il test rapido, e per i lavori di cron per colpire

class Scraper_Controller extends Base_Controller { 

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

risposta

0

Penso che tu sia sulla strada giusta. Una cosa che potresti cambiare è rendere il raschietto ei suoi metodi NON statici. Ciò non renderebbe più difficile l'uso, ma MOLTO più facile da testare. Ciò diventa particolarmente importante in seguito, quando il raschietto diventa più complesso e necessita di configurazione.

PS. Controllare PHP-Spider: uno spider/raschietto estensibile e configurabile. Potrebbe farti risparmiare un sacco di lavoro. Nota: attualmente non ha un'implementazione predefinita per i lavoratori remoti, ma è sulla roadmap per il futuro molto prossimo. Full disclosure: l'ho scritto.