Piccola premessa: su google si trovano decine di articoli (soprattutto in inglese) che spiegano come ottenere quello che sto per scrivere, ma nessuno di essi funzionava sul mio blog. Dopo svariati tentativi sono riuscito a creare, fondendo le tante soluzioni proposte, una funzione funzionante.
Feedburner è un servizio Web 2.0 per la gestione e la pubblicizzazione dei propri feed RSS, podcast e tutto ciò che viene pubblicato sotto forma di aggiornamenti. Per chi utilizza WordPress, o qualunque altra piattaforma di blog, è buona norma appoggiarsi a Feedburner per divulgare i feed, dato che il sistema offre tutta una serie di strumenti per renderli più visibili e raggiungibili, oltre al fatto che integra un sistema di statistiche simile a Google Analytics (e questo è ancora più vero nella versione beta in linea da poco).
Da pochi giorni ho cambiato il tema al mio blog, e sto facendo in modo di integrarlo il più possibile con tutti i servizi a cui sono iscritto. L’ultimo che ho attivato è stato proprio Feedburner: prima di tutto ho installato il plugin FD Feedburner, che si occupa di redirigere automaticamente i visitatori dall’url default dei feed di WordPress all’url del feed di Feedburner.
Per visualizzare il numero di iscritti al mio feed, invece, ho creato una piccola funzione, basata sul codice di altri trovato in rete, ma migliorata sfruttando il meccanismo di cache di WordPress: le Transient API. La funzione fa uso delle api di Feedburner, con la funzione GetFeedData, per ottenere una stringa XML contenente qualche statistica sul proprio feed da cui estrapolare il dato che ci interessa:
1 2 3 4 5 6 | <?xml version="1.0" encoding="UTF-8"?> <rsp stat="ok"> <feed id="qfjovtfi00bq8nig0nb82h5h1s" uri="l4mns"> <entry date="2010-12-31" circulation="7" hits="56" reach="2" /> </feed> </rsp> |
Per ricevere questi dati è sufficiente digitare nel proprio browser l’url https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=feed_uri, dove feed_uri è l’URI scelta quando si è creato l’account. Il valore da considerare è quello dell’attributo circulation.
La cache in WordPress: Transient API
L’articolo è dedicato a Feedburner, ma una breve parentesi sul sistema di cache di WordPress ci può stare, dato che ne ho fatto uso. WordPress dispone di una serie di funzioni per l’inserimento, la modifica, l’estrazione e l’eliminazione di dati di varia natura e di varia longevità in una memoria temporanea. Tale memoria è solitamente il database, ma la documentazione ufficiale suggerisce di non affidarsi a questa supposizione in quanto i transient (così sono chiamati i dati memorizzati), possono essere salvati in altre locazioni, soprattutto quando si installano plugin come WP Super Cache.
Ho utilizzato un transient per memorizzare il numero di iscritti con la funzione set_transient($transient, $value, $expiration), a cui ho dato come scadenza un giorno; per leggere il valore del transient ho applicato invece la funzione get_transient($transient). I dati XML di cui fare il parsing vengono scaricati con cURL.
Codice della funzione
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | function get_feedburner_subscribers_count($feedname) { $key = 'feedburner_subscribers_count_'.$feedname; $count = get_transient($key); if($count !== false) { return $count; } $url = "https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=".$feedname; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); $data = curl_exec($ch); curl_close($ch); $count = 0; if ($data) { preg_match('/circulation=\"([0-9]+)\"/', $data, $matches); if(count($matches) > 1) { $count = intval($matches[1]); set_transient($key, $count, 60*60*24); } } return $count; } |
Il codice controlla prima di tutto se è presente (e se lo è, se è ancora valido) il transient del numero di iscritti. La funzione get_transient() restituisce false se il transient è scaduto o non esiste. Vengono impostati 2 parametri per la chiamata con cURL: RETURNTRANSFER per fare in modo che il risultato della chiamata venga ritornato e non stampato, e l’URL da richiamare. Il resto del codice legge l’attributo circulation e lo memorizza all’interno del nostro transient, impostando una durata di validità di un giorno.
Questa funzione può essere posizionata dentro il file functions.php del tema applicato, e richiamata in qualunque posizione della pagina in cui si vuole visualizzare il numero di utenti iscritti al nostro feed.

