Social Counter Widget – Twitter Followeranzahl fixen

Seit dem Twitter seine API auf Version 1.1 geupdated hat, funktioniert das Social Counter Widget-Plugin nicht mehr. Das Plugin kann nicht die Anzahl der Follower eines Twitteraccounts herausfinden, und zeigt deswegen „0“ an. Das Problem lässt sich mit einem geschickten Eingriff einfach lösen.

Schluss mit API v1

Vor einigen Monaten kündigte Twitter das Ende der API v1 an, um diese durch die neuere Version 1.1 zu ersetzen. Da die Entwicklung an dem Social Counter Widget scheinbar eingeschlafen ist, gab es bisher kein Update des Plugins, sodass der Twitter Followercount falsch oder gar nicht berechnet wird.

In der Datei wp-content/plugins/social-counter-widget/social-counter-widget.php wird folgender Code verwendet:

if(trim($arr['twitterName'])) {
             $query = 'http://api.twitter.com/1/users/show.json?screen_name='.$arr['twitterName'];
            $result = json_decode(file_get_contents($query));
            $this->twitter = $result->followers_count;

Der Lösungsversuch

Leider reicht es nicht aus, das „/1/“ durch „/1.1/“ zu ersetzen, da Twitter sonst den API Aufruf mit einem Fehler quittiert. Man müsste nämlich OAuth-Tokens nutzen, um sich zu authentifizieren. Da wir diesen zusätzlichen Aufwand nicht treiben wollen, muss eine andere Lösung her.

Als Quick-Fix hatte ich daraufhin die Followeranzahl im Code festgeschrieben:

if(trim($arr['twitterName'])) { 
                $this->twitter = 43; //$result->followers_count;

Auf dauer war diese Lösung aber nicht optimal, da ich jedes Mal den Code neu anpassen musste, wenn ein neuer Follower dazu kam oder weg ging.

Die bessere Lösung

Nach ein wenig Googlen stieß ich auf einen Thread auf Stackoverflow.com, in dem genau mein Problem behandelt wurde. Dort wählte ich die verhältnismäßig einfachste Lösung aus, und änderte die Plugin-Klasse folgendermaßen ab:

Als erstes fügen wir eine neue private Funktion hinzu:

private function get_twitter_followers($url){
            $data = file_get_contents("http://query.yahooapis.com/v1/public/yql?q=SELECT%20*%20from%20html%20where%20url=%22".$url."%22%20AND%20xpath=%22//a[@class='js-nav']/strong%22&format=json"); // Opening the Query URL
            $data = json_decode($data); // Decoding the obtained JSON data
            $count = intval($data->query->results->strong[2]); // The count parsed from the JSON
            return $count; // Printing the count
    }

Danach passen wir die Twitter-Codestelle noch einmal an:

if(trim($arr['twitterName'])) {
            $followercount=$this->get_twitter_followers("http://twitter.com/".$arr['twitterName']);
            $this->twitter = (int) $followercount;

Die Funktion „get_twitter_followers“ macht nichts anderes, als die offizielle Twitterseite zu nutzen, um das Profil aufzurufen, und dann über XPATH den Wert des Followeranzahl-HTMl-Elements auszulesen.

Nachdem man die Änderungen vollzogen hat, muss man eine Weile warten, bis das Plugin die Statistiken erneuert. Dann sollte die Twitter-Followeranzahl auch wieder stimmen :)

Fazit

Man kann alles wieder in Ordnung bringen und muss nicht gleich das Plugin deinstallieren. Falls ihr zufällig Twitter nutzt, und der Post euch geholfen hat, dann folgt uns doch einfach ;)

Twitter-Profil: https://twitter.com/Blogbasis

~ Sebastian