Text FeedCount

Każdy już zna zapewne FeedBurnera.

Jedna z ciekawych funkcji, jakie oferuje jest licznik subskrynentów naszego kanału. Licznik ten jest graficzny, co nie wszystkim może odpowiadać.

Amit Agarwal na swoim blogu w notce "FeedBurner Tip: Change The Text Inside FeedCount Chicklets" zaprezentował ciekawy hack na zmianę tekstu widniejącego na liczniku graficznym.

My jednak chcemy czysty tekst z interesującą nas liczba czytelników feeda.
Na pomoc przychodzi nam API FeedBurnera, a dokładniej Awareness API. Nie będziemy tu zagłębiać się w szczegóły tego API, zainteresowanych odsyłam do odpowiedniej dokumentacji.

Żeby skorzystać z oferowanego API musimy uaktywnić taka opcje w swoim panelu na FeedBurner, w przeciwnym razie nic nam nie zadziała :P

Gdy już uczynimy ta powinność, możemy zabrać się za kod.

Najprościej w pliku functions.php znajdującym się w katalogu naszego szablonu WordPresa utworzyć odpowiednią funkcję, którą później w można łatwo wywołać w dowolnym pliku naszego template'a.

function feed_count($id) {
	$data = file_get_contents('http://api.feedburner.com/awareness/1.0/GetFeedData?id='.$id);
	$pos = strpos($data, 'hits="');
	if ($pos !== false) {
	    $pos += 6;
		echo substr($data, $pos, strpos($data, '"', $pos) - $pos);
	} else {
		echo 'e';
	}
}

Kod prosty i przejrzysty.
Użyto "modelowego" przykładu wykorzystania Awareness API do zwrócenia informacji o danym kanale, wystarczy tylko "wyłuskać" interesujące nas dane ;)
Ktoś może zapyta, czemu nie skorzystałem z parsera xml. Moim zdaniem dla takiej prostej rzeczy, nie ma potrzeby "zaprzęgać" parsera i skorzystać z dużo optymalniejszego (w tym przypadku!) rozwiązania.

Sposób użycia jest następujący, w miejscu gdzie chcemy wyświetlić licznik wywołujemy naszą funkcje z id naszego kanału ;)
Dla przykładu, licznik feeda MaldevBloga:

<?php feed_count(1002334); ?>

Wszystko fajnie tylko mój obecny hosting ma wyłączone wrappery do obsługi strumieni sieciowych dla funkcji systemu plików i file_get_contents() nie zadziała. Na szczęście aktywne jest rozszerzenie CURL (Client URL Library Functions). Poniżej pobieranie danych z wykorzystaniem tego rozszerzenia.

$ch = curl_init('http://api.feedburner.com/awareness/1.0/GetFeedData?id='.$id);
$fp = tmpfile();
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
fseek($fp, 0);
$data = stream_get_contents($fp);
fclose($fp);
curl_close($ch);

Tak oto mamy tekstowy licznik ;) Gdy pobieranie danych się nie powiedzie, zamiast liczby wyświetli się 'e'.

Jest jeden problem, przy każdym przeładowaniu strony naszego bloga, dane będą pobierane z serwera FeedBurnera. Można pomyśleć o cacheowaniu danych, na przykład w bazie bloga.
Ilość czytelników feeda jest niczym innym jak ilością pobrań naszego kanału w dniu wczorajszym (tak mi się przynajmniej wydaje). Dlatego można pobierać dane co jakiś czas z serwera i przechowywać je lokalnie w bazie WordPressa.
Najprostszym rozwiązaniem jest napisanie prostego plugina, w którym w łatwy sposób można dodawać dane do mysqla bloga bez paprania się z zapytaniami SQL :P

Napisałem sobie prosty plugin, spełniający powyższe kryteria. Przechowuje w bazie dane licznika aktualizowane co 1h.

Plugin Text FeedCount można pobrać tutaj: Download Text FeedCount Plugin.

W miejscu gdzie chcemy wyświetlić licznik wstawiamy kod:

<?php if (function_exists(tfc_count)) tfc_count(1002334); ?>

Prosty plugin, bez GUI ustawień etc.

Czemu?
Bo mi się nie chciało z tym babrać, a najważniejsze że spełnia swoja funkcje :P

2 przemyślenia nt. „Text FeedCount”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *