Domanda

Voglio raschiare una pagina che aggiorna regolarmente (l'aggiunta di nuovi articoli con esattamente la stessa struttura dei precedenti) al fine di generare un feed RSS.

posso scrivere il codice per analizzare la pagina facilmente, ma come faccio a emulare un ping vale a dire quando gli aggiornamenti della pagina come si può conoscere il mio script php? Essa non deve essere un lavoro cron?

(Probabilmente una domanda duplicato lo so, ma cercato una risposta diretta senza fortuna. Più vicino che ho trovato era Raschiare e generare feed RSS , che ha uno script raschiatura, ma non informazioni su come ottenerlo per rispondere ai cambiamenti nella pagina automaticamente)

È stato utile?

Soluzione

A seconda del sistema che può o non può essere facile dire quando la pagina è stata aggiornata l'ultima.

Per verificare le modifiche, è possibile controllare le intestazioni HTTP per l'intestazione Last-Modified della pagina. Non tutti i sistemi aggiornare l'intestazione correttamente, quindi non può essere utile. E 'anche possibile che la pagina non modificata restituirà uno stato di 304 (non modificati), in particolare se si fornisce un colpo di testa If-Modified-Since nella vostra richiesta.

avrei sicuramente eseguire qualcosa di simile su un processo di cron. Mentre potrebbe essere possibile farlo solo dalle intestazioni, se è necessario aggiornare per il server di uscire, ottenere la pagina di pagina l'utente sarà in attesa di un lungo periodo di tempo (in termini relativi), fare l'elaborazione, e inviare la risposta. Sarei sorpreso se non si esegue in time out di tanto in tanto con un non-cron base di un approccio.

Altri suggerimenti

Si potrebbe avere un crontab esecuzione che controlla se il sito è aggiornato (mediante il controllo delle ultime intestazioni modificate, se disponibile, o verificando il contenuto che ti interessa).

Se quando il vostro crontab controlla il sito, rileva il cambiamento nel contenuto, si potrebbe aggiungere un messaggio a una coda (qualcosa di simile a Zend_Queue http://framework.zend.com/manual/en/zend.queue.example.html per esempio), allora si potrebbe avere un lavoratore che ha appena lavora attraverso i messaggi o fino ad un limite di tempo / dati è stato raggiunto, o fino a quando la coda è vuota.

Si potrebbe anche verificare in risposta ad una richiesta HEAD, se non ci sono Last-Modified linea, per la presenza e il valore di ETag e linee Content-Length. Se nessuna di queste corrispondono ai valori precedenti (che hai memorizzato), quindi il contenuto è probabilmente cambiato. Si potrebbe aggiungere a quelle altre href="http://en.wikipedia.org/wiki/HTTP_header" che indicano il cambiamento.

scroll top