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
Fajny pluginek, tylko nie dopisałeś co wstawiamy w szablonie żeby wyświetlał tą liczbę ;)
Zmiana pluginu do kolorowania kodu troche zrobila zamieszania, poprawione ;)