Pubblicare automaticamente con WordPress

  • by

wordpress_auto-post-thumbnail[1]Ormai molti siti si affacciano sul mondo Internet presentandosi come degli “aggregatori di contenuti”, cioè riportano copie di articoli presentati altrove.

Frequente la raccolta di news o previsioni metereologiche, ma anche articoli presenti su altri blog.

Per fare questo è sufficiente che la nostra fonte metta a disposizione le informazioni tramite feed RSS e utilizzare questo canale per leggerle e pubblicarle sul nostro sito. Un buon plugin che permette questo che si chiama “syndication” è FeedWordPress, semplice da utilizzare e abbastanza flessibile da essere adattabile a molte esigenze.

Quello di cui voglio parlare in questo articolo è un metodo diverso, un passo in più: estrarre parti di pagine web e utilizzarli come contenuti del nostro sito.

Una premessa: sono necessarie competenze di programmazione in PHP e buona dimestichezza con la regular expression, il metodo utilizzato per effettuare il parsine delle pagine.

Già da questa affermazione si comprende il meccanismo che sta alla base: una volta individuata la pagina che vogliamo prendere, dobbiamo analizzarne il sorgente HTML. Per questo ci aiuta il browser.

Se stiamo pensando ad una lettura continuativa e automatizzata della pagina, dobbiamo assicurarci che la struttura non venga modificata, altrimenti siamo costretti a cambiare i pattern utilizzati.

Vediamo alcuni esempi per chiarire meglio il concetto:

  • Dal sito del superenalotto o del lotto vogliamo riportare i numeri vincenti in una nostra pagina
  • Da un sito finanziario leggere e ripresentare come nostre le quotazioni dei mercati
  • Riportare la classifica di serie A presa dal sito della Gazzetta

Vediamo allora come utilizzare il PHP per effettuare queste operazioni


$url = "https://www.lottomaticaitalia.it/lotto/home/";
$input = @file_get_contents($url) or die('Could not access file: $url');
$regexp = "]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
$regexp = "

]*>.*

(.*)<\/div>.*

(.*)<\/div>";

if(preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER)) {
foreach($matches as $match) {
# $match[2] = link address
# $match[3] = link text
$tbl = preg_replace ('(class=\".*\")','' , $match[2]);
echo $match[1];
echo $tbl;
}
}

Vediamo nel dettaglio la sequenza dei passi:

  1. Identifichiamo l’url da cui vogliamo prelevare le informazioni
  2. Dopo un’analisi dell’HTML scriviamo il pattern corretto (non è obiettivo di questo articolo descrivere le regole della regular expression)
  3. Dopo un parse abbiamo il testo che ci serve a disposizione

Come pubblicare il testo.
Possiamo agire in due modi alternativi: salvare il testo in un post oppure utilizzarlo in tempo reale: la lettura viene effettuata contestualmente all’utente che apre la nostra pagina

Nel primo caso dobbiamo interagire con il cron di wordpress e ci viene in aiuto il plugin WP-crontrol. Si tratta di un plugin che offre un’interfaccia per controllare il cron
Continuando con l’esempio di prima, dovremmo schedulare un codice simile a questo:

$last_upd = get_option('lotto_lastdate');

if ($last_upd != $match[1]) {
update_option('lotto_lastdate', $match[1]);

$testo = "I numeri dell'estrazione del lotto:\n";
$testo = $testo.$tbl."\nEcco i 20 numeri vincenti del 10 e lotto\n".$match[3];

$my_post = array();
$my_post['post_title'] = 'Estrazioni del lotto di '.$match[1];
$my_post['post_content'] = $testo;
$my_post['post_status'] = 'publish';
$my_post['post_author'] = 1;
$my_post['post_category'] = array(9);

wp_insert_post( $my_post );

}

e il nostro post è scritto!

Se preferiamo un’interpretazione in tempo reale, dobbiamo utilizzare il plugin Exec-PHP che permette di inserire ed eseguire codice PHP nei post o nelle pagine
In questo caso non abbiamo altro da fare che abilitare il plugin e copiare il codice del primo esempio che ho riportato all’interno di un post

Questo non vuole essere un incentivo alla creazione di siti altamente poco originali, ma solo un aiuto per coloro che necessitano inserire alcune informazioni all’interno del proprio sito.

Leave a Reply