WordPress: creare una copia cache di un feed RSS remoto

WordPress: creare una copia cache di un feed RSS remoto

Le Transient API di WordPress sono il metodo più semplice per creare una copia cache dei nostri contenuti. Questo principio si applica bene al caso dei feed RSS esterni.

Reperire i contenuti di un feed RSS è un'operazione più dispendiosa di quanto non si pensi. Sia che si usi la libreria Magpie che la funzione wp_remote_get(), si tratta sempre di una richiesta HTTP remota.

Come tale i contenuti possono non essere aggiornati o momentaneamente non disponibili. Ecco una soluzione:


function get_blog_updates() {
	$feed_url = 'http://me.gabrieleromanato.com/feed/';
	$response = wp_remote_get($feed_url, array('timeout' => 5));
	$html_output = '';
	if( is_wp_error( $response ) ) {
   		if(get_transient('gabrieleromanato-blog') !== false) {
   			$html_output = get_transient('gabrieleromanato-blog');
   		} else {
   			$html_output = '';
   		}
   	} else {
   		if(get_transient('gabrieleromanato-blog') === false) {
   			$html_output .= '<ul id="me-feed">' . "\n";
   			$xml = simplexml_load_string($response['body']);
   			$items = $xml->channel->item;
			
			$i = -1;
			$max = 2;
			
			foreach($items as $item) {
				$i++;
				$desc = $item->description;
				$link = $item->link;
				$title = $item->title;
				$date = strtotime($item->pubDate);
				$date_time = strftime('%d-%m-%Y', $date);
				
				if($i <= $max) {
				
				$html_output .= '<li>' . "\n";
				$html_output .= '<h4>' . $title . '</h4>' . "\n";
				$html_output .= '<small>' . $date_time . '</small>' . "\n";
				$html_output .= '<p>' . $desc . '</p>' . "\n";
				$html_output .= '<div><a href="' . $link . '" class="more-link">Leggi tutto</a></div>' . "\n";
				$html_output .= '</li>' . "\n";
				
				}
			
			}
			
			
			$html_output .= '</ul>' . "\n";
			set_transient('gabrieleromanato-blog', $html_output, 60*60*24);
		
	  } else {
	  	$html_output = get_transient('gabrieleromanato-blog');
	  }
   	}
   	
   	return $html_output;
}

Come si può notare dal codice, il contenuto del feed viene messo in cache per la durata di 24 ore. Una volta che la copia cache scade, il feed viene reperito nuovamente e viene ricreata una nuova copia cache. Si tratta di una soluzione che riduce drasticamente il numero di richieste GET al sito remoto.

Torna su