2012-02-11 11 views
5

devo regolare la frequenza un'istanza Mechanize collega con un API (una volta ogni 2 secondi, quindi le connessioni solo a tale o più)alimentatrice/limitante rubino meccanizzare

Quindi questo:

instance.pre_connect_hooks << Proc.new { sleep 2 } 

Avevo pensato che questo avrebbe funzionato, e in un certo senso, ma ora ogni metodo in quella classe dorme per 2 secondi, come se l'istanza di mechanize fosse toccata e detta di tenere premuto per 2 secondi. Proverò un hook post connect, ma è ovvio che ho bisogno di qualcosa di un po 'più elaborato, ma cosa non so cosa a questo punto.

codice è più spiegazione, quindi se siete interessati seguendo lungo: https://github.com/blueblank/reddit_modbot, altrimenti la mia domanda riguarda il modo per votare in modo efficiente ed efficace limitare un'istanza Mechanize per entro un lasso di tempo specifico specificato da un'API (in cui superamento che i risultati limite a cadere richieste e divieti). Inoltre, suppongo di dover integrare meglio un'istanza di meccanizzazione per la mia classe, anche su ciò che è apprezzato.

+0

http://www.ruby-doc.org/core-1.9.2/Kernel.html#method-i-sleep Suppongo che il sonno sia troppo grande per questo – blueblank

risposta

2

Gli hook pre e post connect vengono chiamati su ogni connessione, quindi se c'è un reindirizzamento potrebbe attivarsi molte volte per una richiesta. Prova history_added cui solo viene chiamato una volta:

instance.history_added = Proc.new {sleep 2} 
+0

Sembra funzionare, e non fare un casino di tutto il resto finora. – blueblank

1

Io uso SlowWeb di votare limite chiama ad un URL specifico.

require 'slowweb' 
SlowWeb.limit('example.com', 10, 60) 

In questo caso le chiamate al dominio example.com sono limitate a 10 richieste ogni 60 secondi.