Plugin Text Feed Count
• tech • 457 słów • 3 minuty czytania
Każdy już zna zapewne FeedBurnera. Jedną z ciekawych funkcji, jakie oferuje jest licznik subskrybentó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. Ja jednak chcę czysty tekst z liczbą czytelników feeda.
Na pomoc przychodzi API FeedBurnera, a dokładniej Awareness API. Nie będę się tu zagłębiał w szczegóły tego API, zainteresowanych odsyłam do dokumentacji. Trzeba pamiętać, aby uaktywnić opcję wykorzystania tego API w swoim panelu na FeedBurner, w przeciwnym razie nic nie zadziała.
Czas zabrać się za kod. Najprościej w pliku functions.php
znajdującym się w katalogu naszego szablonu WordPressa utworzyć odpowiednią funkcję, którą później 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 można skorzystać z dużo optymalniejszego (w tym przypadku!) i prostszego rozwiązania.
Sposób użycia jest następujący, w miejscu gdzie chcemy wyświetlić licznik wywołujemy tę funkcję 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);
I tym sposobem mam tekstowy licznik ;) Gdy pobieranie danych się nie powiedzie, zamiast liczby wyświetli się “e”.
Jest jeden problem w takiej prostej implementacji. Przy każdym przeładowaniu strony bloga, dane będą pobierane z serwera FeedBurnera. Można pomyśleć o jakimś cacheowaniu danych. Ilość czytelników kanału jest niczym innym jak ilością pobrań feeda w dniu wczorajszym (tak mi się przynajmniej wydaje). Dlatego można pobierać dane z serwera co jakiś czas i przechowywać je lokalnie w bazie WordPressa.
Najprostszym rozwiązaniem wydaje się napisanie prostego plugina, w którym w łatwy sposób można dodawać dane do mysqla bloga bez paprania się z zapytaniami sqla. Napisałem sobie taki prosty plugin spełniający te kryteria. Przechowuje on w bazie dane licznika aktualizowane co 1h.
Plugin Text Feed Count można pobrać z projects.malcom.pl.
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 swoją funkcję ;)
Komentarze (2)
Fajny pluginek, tylko nie dopisałeś co wstawiamy w szablonie żeby wyświetlał tą liczbę ;)
Zmiana pluginu do kolorowania kodu zrobiła trochę zamieszania, poprawione ;)