Plugin Text Feed Count

tech • 455 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)

Paweł Zinkiewicz
20081125-095623-pawel-zinkiewicz

Fajny pluginek, tylko nie dopisałeś co wstawiamy w szablonie żeby wyświetlał tą liczbę ;)

Malcom
20081125-195938-malcom

Zmiana pluginu do kolorowania kodu zrobiła trochę zamieszania, poprawione ;)

Dodaj komentarz

/dozwolony markdown/

/nie zostanie opublikowany/