WordPress & Webwork

Anzahl der Feed-Leser und Twitter-Folower ausgeben

Die Anzahl der Leute die den Newsfeed lesen und die Anzahl der Follower auf Twitter kann man dank externer Dienste und entsprechender, vorgefertigter Grafiken und Javascripte sehr einfach ausgeben.

Für die Ausgabe der Abonnenten kann man bei dem Dienst FeedBurner, sofern man dort einen Account besitzt, unter "Publizieren" einen Feed-Counter erstellen lassen. Hier ein funktionierendes Beispiel:

Um die Anzahl der Follower auszugeben, kann man auf den Dienst Twitter Counter zurückgreifen und dort einen Button generieren:

Ich durfte allerdings feststellen, dass vor allem der Twitter-Counter und selten auch der FeedBurner-Counter, den Aufbau der Seite ordentlich verzögern konnten. Außerdem kann man die Zahlen nicht individuell einbinden.

Die Anzahl der Fedd-Abonnenten und Twitter-Follower individuell ausgeben

Nach ein bisschen Recherche fand ich bei Antti Kokkonen eine Anleitung wie man in WordPress die Zahlen der Abonnenten und Follower bekommt uns die dann an einer bestimmten Stelle ausgeben zu können.

Im Grunde genommen muss man nur die functions.php erweitern. Solltest du in deinem Theme eine solche Datei nicht besitzen, dann einfach eine leere erstellen und folgenden Code innerhalb von <?php ?> einfügen. Damit das ganze übersichtlich bleibt, habe ich den kompletten Code in drei Blöcke aufgeteilt. Hier der erste Abschnitt:

// *** Feed- und Twitter-Counter ***
// cURL muss auf dem Server aktiv sein
function curl($url) {
    $ch = curl_init($url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_HEADER, 0);
    // EDIT your domain to the next line:
    curl_setopt($ch,CURLOPT_USERAGENT,"perun.net");
    curl_setopt($ch,CURLOPT_TIMEOUT,10);
    $data = curl_exec($ch);
    if (curl_errno($ch) !== 0 || curl_getinfo($ch, CURLINFO_HTTP_CODE) !== 200) {
        $data === false;
    }
    curl_close($ch);
    return $data;
}

Mit Hilfe von cURL wird auf die Daten zugegriffen. Diese Funktion kan auch für weitere Anwendungen eingesetzt werden, die cURL benötigen. Hier musst du den Wert perun.net durch die Angabe deiner Domain ersetzen und zwar ohne die Angabe von http:// oder www.

// Die Anzahl der RSS-Abonnenten in Feedburner auslesen
add_option('myfeeds_count','0','','yes');
add_option('myfeeds_api_timer',mktime() - 10000,'','yes');
function myfeeds_count() {
    $rsscount = get_option('myfeeds_count');
    if ( get_option('myfeeds_api_timer') < (mktime() - 3600) ) {
        // EDIT der Name des Feeds in Feedburner:
        $fb_id = "peruns-weblog";
        $subscribers = curl("https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=" . $fb_id);
        try {
            $xml = new SimpleXmlElement($subscribers, LIBXML_NOCDATA);
            if ($xml) {
                $rsscount = (string) $xml->feed->entry['circulation'];
                update_option('myfeeds_count', $rsscount);
            }
        } catch (Exception $e) { }
        update_option('myfeeds_api_timer', mktime());
    }
    // Den Counter ausgeben
    if($rsscount == 'N/A' || $rsscount == '0') { echo 'Eine ganze Menge'; } // z. B. wenn FeedBurner Schluckauf hat
    else { echo $rsscount; }
}

Mit dem zweiten Abschnitt wird die Anzahl der Feed-Leser in Feedburner ausgelesen und als reiner Text ausgegeben. Damit der Zugriff von externen Quellen ermöglicht wird, musst du in deinem FeedBurner-Account unter Awareness-API dem auch zustimmen. Hier musst du den Wert der $fb_id-Variable – hier peruns-weblog – durch den FeedBurner-Namen deines Blog-Feeds ersetzen.

Im letzten Abschnitt kann man die Textmeldung anpassen, die ausgegeben wird, wenn kein Kontakt zu FeedBurner besteht oder wenn als Wert Null zurückgegeben wird.

// Die Anzahl der Follower auslesen
add_option('mytwitter_followers','0','','yes');
add_option('mytwitter_api_timer',mktime() - 10000,'','yes');
function mytwitter_followers() {
    $twittercount = get_option('mytwitter_followers');
    if ( get_option('mytwitter_api_timer') < (mktime() - 3600) ) {
        // EDIT dein Twitter-Name:
        $twitter_id = "vlad_perun";
        $followers = curl("http://twitter.com/users/show.xml?screen_name=" . $twitter_id);
        try {
            $xml = new SimpleXmlElement($followers, LIBXML_NOCDATA);
            if ($xml) {
                $twittercount = (string) $xml->followers_count;
                update_option('mytwitter_followers', $twittercount);
            }
        } catch (Exception $e) { }
        update_option('mytwitter_api_timer', mktime());
    }
    if ( $twittercount != '0' ) { echo $twittercount; }
    else { echo "growing number of"; }
}

In diesem Abschnitt musst du den Wert der Variable – hier vlad_perun – durch deinen Twitter-Namen ersetzen.

Damit das ganze funktioniert wird auf dem Server neben aktiven cURL auch PHP 5 benötigt, da die SimpleXML-Erweiterung eingesetzt wird.

Um das ganze im Frontend auszugeben, muss bzw. sollte man folgendes in die passende Template-Datei einbinden die Anzahl der Feed-Leser auszugeben:

Mein Newsfeed hat <?php if (function_exists('myfeeds_count')) myfeeds_count(); ?> Leser.

Die Zahl der Follower bindet man dann folgendermaßen ein:

Wir haben <?php if (function_exists('mytwitter_followers')) mytwitter_followers(); ?> Follower.

Das ganze kann man oben, rechts in der Sidebar bewundern. Falls ich das in Kürze ändern sollte, gibt es davon auch ein Screenshot:

FeedBurner- und Twitter-Counter

Die Anzahl der Leser und Follower ausgeben

Ausgabe via wpSEO

Sergej Müller hat mich darauf hingewiesen, dass man schon jetzt die Anzahl der Feed-Abonnenten auch durch seine Erweiterung wpSEO im Frontend einbinden kann und in der Version 3, der Erweiterung wird es dann auch möglich sein, die Anzahl der Follower auszugeben.

Aber bevor ich etwas darüber schreibe, wäre es eigentlich viel besser wenn Sergej selber hier einen kleinen Gastartikel darüber schreibt. 😉

18 Reaktion(en)

  1. Jeriko

    WordPress bietet eine eigene HTTP-API, es macht also nur bedingt Sinn, direkt cURL zu benutzen, da ja, wie du schon erwähnt hast, die Erweiterung evtl. gar nicht vorhanden ist. Ein

    $followers = wp_remote_get("http://twitter.com/users/show.xml?screen_name=" . $twitter_id);

    führt zum selben Ergebnis, ist dabei aber einfacher und sicherer.

    1. Perun

      Hallo Jeriko,

      ich habe das mit wp_remote_get() getestet. mal davon abgesehen, dass die Antwort bei nicht-aktivierten cURL klar ist, aber in wie fern ist den cURL unsicherer als eine WordPress-Funktion?

  2. Sergej Müller

    Wie Vlad oben schon sagte, lasse ich die Werte in der Sidebar meines Blogs von wpSEO und wpTwitBox ausgeben, da dort diese Daten eh zur Verfügung stehen und werden via WordPress Cron aktualisiert – da muss ich noch extra Script implementieren.

    Da das Plugin wpTwitBox neuer als wpSEO ist (damals gab es noch kein wp_remote_x), verwende ich ebenfalls die Funktion wp_remote_retrieve_body zum Abruf der XML-Datei. Der Vorteil dieser WordPress-internen Funktion liegt auf der Hand: WordPress prüft automatisch welche Methode zu dem Server passt und nimmt z.B. fsockopen wenn cURL nicht installiert ist. So muss man sich als Entwickler nicht um die Fallbacks kümmern, falls eine bevorzugte Methode zur Kommunikation nach außen nicht genutzt werden kann.

    Zudem ist wpTwitBox mit einem Hook versehen – somit ist die Ausgabe des Follower-Counters im Theme-Template nur mit einem Funktionsaufruf möglich: do_action('wptwitbox_followers_count');

    wpSEO 3.0 beherrscht beide Werte (Feedburner & Twitter + plus unzählige mehr), unterstützt die Transients API (somit auch internes Caching), Cronjob, Hooks – so dass man sich als Blogger keine Gedanken um die Einbindung der Kennzahlen machen muss.

  3. Jeriko

    Na "sicherer" im Sinne von weniger fehlerlastig. Wenn der Server cURL nicht installiert hat wird eine Fehlermeldung ausgespuckt und das Skript womöglich abgebrochen, mit wp_remote_get einfach die nächste Möglichkeit ausprobiert. Sieh’s als eine Art Wrapper 🙂

  4. Pingback: links for 2010-04-1

  5. Micha S.

    Man merkt oft, gerade bei diesen Icons, dass die Ladezeit erheblich länger dauern kann – oft genug erlebt bei Icons von Blogverzeichnissen, weshalb ich sowas eigentlich gar nicht mehr verwende. Aber gerade wegen Twitter ein interessanter Artikel.

  6. Jürgen Schnick

    Ein wirklich guter und interessanter Artikel, herzlichen Dank dafür.

    Ich überlege, als relativ "neuer" Blogger immer, ob es Sinn macht, auch wenn man erst 100 RSS Leser hat und 450 Newsletterempfänger, diese Zahl im Blog anzeigen zu lassen, oder ob das nur Sinn macht, wenn man im 5-stelligen Bereich ist. Interessiert es die Leser überhaupt, wieviele RSS-Leser ich habe? Macht es den RSS-Feed interessanter, wenn viele Abonnenten da sind?

    Ich bin das sehr unschlüssig, was die richtige Strategie ist …

    Jürgen Schnick

  7. Pingback: Linkeria (5. Mai – 6. Mai) » der tag und ich

  8. Pingback: Die Top-10 der Artikel und Seiten | Peruns Weblog

  9. Jan

    @Patrick: Das externe Auslesen hat nichts mit dem normalen grafischen Counter zu tun. Du musst in der Administration von FeedBurner unter "Publicize" die Awareness API aktivieren, wie es auch unter dem zweiten Code-Fragment oben steht.

  10. Pingback: Twitter-Follower und FeedBurner-Abonnenten als Text ausgeben. Ohne Plugin! | visualMIND

  11. Patrick

    Danke nochmal für diesen Tipp.

    Ich habe den Code noch einmal aufgegriffen und etwas modifiziert. Nur wenn das auslesen erfolgreich (sprich weder N/A [FeedBurner] noch 0 [Twitter]) war, wird der Wert in der Datenbank verändert.

    Zum Schluss gebe ich dann immer den in der Datenbank gespeicherten Wert aus. Das macht den Code schlanker und man hat immer einen passenden Wert 🙂

    Außerdem wird der Wert per return statt echo zurückgegeben, sodass Caches hier besser greifen können.

  12. Pingback: WordPress: Flattr, Twitter, Facebook, Feedburner und Xing ohne Plugins | WordPress & Webwork

  13. Pingback: Die großen Performance-Bremsen im Frontend 1 | WordPress & Webwork

Die Kommentare in diesem Beitrag sind geschlossen.