1. Juli 2010 / WordPress
Anzahl der FeedBurner-Abos und Twitter-Follower in WordPress
Mit universellem PHP-Skript die Anzahl der FeedBurner-Abos und Twitter-Follower ausgeben. Mit Caching, für WordPress optimiert.
Die Gesamtzahl der Abonnenten – unabhängig vom Social Dienst – lässt sich mit relativ wenig Code auf Blogseiten projizieren. Für diesen Zweck liefert die Blogosphäre eine Vielzahl an Ansätzen. Das Hauptproblem der meisten Techniken ist die mangelhafte bis gänzlich fehlende Zwischenspeicherung der beim Drittserver erfragten Zahl. Blind eingebaut, gleicht der – auf den ersten Blick harmlose – Codeausschnitt den Wert bei jedem Seitenaufruf ab. Performance-Einbussen sind da vorprogrammiert.
Cache alles, was sich bewegt
Dieser Artikel zeigt einen erprobten, professionellen und explizit auf WordPress ausgerichteten Lösungsansatz der automatischen Aktualisierung von Werten. Mit internem Cache-Mechanismus.
Im Einzelnen bedeutet es: In regulären, justierbaren Zeitabständen fordert das in die functions.php gesetzte Script die Gesamtzahl der Follower bzw. Abos über die jeweils verfügbare Schnittstelle des Anbieters an und legt den Rückgabewert anschließend in die Datenbank der WordPress Instanz. Ab dem Zeitpunkt kann der Datensatz aus der DB jederzeit und beliebig oft im Theme-Template verwendet werden, ohne permanent eine ausgehende Verbindung zu Twitter oder FeedBurner herzustellen. Ranking, wir kommen.
Einer für alle(s)
Das Script ist universal, kann sowohl für die Abfrage von Twitter- wie auch FeedBurner-Daten genutzt werden. Beim Funktionsaufruf werden vom Blogger der Typ (also twitter oder feedburner), die ID (bei Twitter der Profilname, für FeedBurner gilt die Feed-ID) und die Cache-Dauer in Stunden als Parameter definiert. Anbei das bis auf die letzte Zeile kommentierte Meisterstück.
Ausgabe der Twitter-Followerzahl im Template
<?php do_action( 'sm_provider_count', 'twitter', 'wpSEO', // Twittername 24 // Cache in Stunden ); ?>
Ausgabe der FeedBurner-Abozahl im Template
<?php do_action( 'sm_provider_count', 'feedburner', '9ocvv4mma9hdhkltp21t32gstc', // Feed-ID 6 // Cache in Stunden ); ?>
Funktionen zum Abruf und Zwischenspeichern von Daten
<?php
/**
* Zeigt und speichert die Werte
*
* @author Sergej Müller
*
* @param str $type Typ der Anfrage [twitter || feedburner]
* @param str $id ID des Dienstes [Twitter = Profilname, FeedBurner = Feed-ID]
* @param int $hours Cache-Dauer in Stunden
*/
function sm_show_data($type, $id, $hours = 12) {
/* Leer? */
if (empty($id) || empty($type)) {
return false;
}
/* Im Cache? */
if (!$count = get_transient('sm_count_' .$type)) {
/* Request */
$count = sm_get_data($type, $id);
/* Dauer */
$expiration = (is_numeric($count) ? 60 * 60 * intval($hours) : 60 * 5);
/* Cachen */
set_transient(
'sm_count_' .$type,
$count,
$expiration
);
}
/* Print */
echo $count;
}
/**
* Ruft werte aus dem Speicher oder der API ab
*
* @author Sergej Müller
*
* @param str $type Typ der Anfrage
* @param str $id ID des Dienstes
*/
function sm_get_data($type, $id) {
/* URL */
if ($type == 'twitter') {
$url = 'http://api.twitter.com/1/users/show.xml?screen_name=' .$id;
} else {
$url = 'https://feedburner.google.com/api/awareness/1.0/GetFeedData?id=' .$id;
}
/* Abrufen */
$response = wp_remote_get($url);
/* Fehler? */
if (is_wp_error($response)) {
return '-';
}
/* Kein Inhalt? */
if (!$body = wp_remote_retrieve_body($response)) {
return '-';
}
/* Parsen */
$xml = new SimpleXMLElement($body);
/* Ausgeben */
if ($type == 'twitter') {
return intval($xml->followers_count);
} else {
return intval($xml->feed->entry['circulation']);
}
}
/* Hook */
add_action(
'sm_provider_count',
'sm_show_data',
10,
3
);
?>
Hinweise
- FeedBurner-API liefert erst dann einen gültigen Wert zurück, wenn Awareness API im Menüpunkt Publicize aktiviert ist.
- Feed-ID ist die Zeichenfolge nach dem Parameter id (feedburner.google.com/fb/a/dashboard?id=xxx), wenn Feed-Einstellungen im FeedBurner-Account aufgerufen werden.
- Ist der zuständige Dienst mal nicht erreichbar oder liefert unvollständige Daten zurück, so nimmt die Anwendung die Kommunikation in 5 Minuten erneut auf, um den aktuellen Null-Wert so schnell wie möglich los zu werden.
- WordPress 2.8 und PHP5 als Voraussetzungen
Sergej Müller ist enthusiastischer Software Engineer mit Schwerpunkten Webentwicklung, Apps und WordPress. Seit 2007 programmiert und vertreibt er wpSEO, das zugkräftige SEO-Plugin für WordPress-Blogs.