Flattr

Social

Plugins

Apps

Lab

Kategorien

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

[Der Autor]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.