Twitter API anzapfen
Hier zeige ich euch an einfachen Beispielen, wie man die Twitter-API anzapft, um z. B. Updates zu holen oder Leuten automatisch zu folgen. Als Programmiersprache verwende ich PHP.
WissenswertesGrundsätzlich kann jeder Programmierer auf die Twitter API zugreifen. Allerdings gibt's hier Limits, wie viele Abfragen man machen darf: - REST API (Normale Abfragen und Befehle für die API): 150 Abfragen in einer Stunde. D. h. dass man sich davor entweder einloggen muss (auch per API - ich erkläre unten, wie das geht) oder es werden die 150 Abfragen auf die IP-Adresse begrenzt.
- Search API (Abfragen auf die Twitter-Suche): Auch hier gibt es eine Begrenzung. Allerdings sagt Twitter nicht genau, welche. Man kann davon ausgehen, dass sie sich in einer ähnlichen Größenordnung bewegt, wie die Begrenzung der REST API von 150 Requests pro Stunde.
Authentifizierung / Login per APIGrundsätzlich bietet sich es an, die cURL Funktionen von PHP zur Arbeit mit der Twitter-API zu nutzen. Im folgenden Beispiel machen wir das so. Wir holen uns auch gleich mal die letzten 20 Updates unserer Freunde bei Twitter:
<?php
// Authentifizierungsdaten
$username = 'DEIN_USERNAME';
$password = 'DEIN_PASSWORT';
// Letzten 20 Updates von den Freunden holen
$strAufrufURL = 'http://twitter.com/statuses/friends_timeline.json';
// cURL inititieren
$curl = curl_init();
// URL angeben
curl_setopt($curl, CURLOPT_URL, $strAufrufURL);
// Rückgabewerte sollen verwendet werden
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// Authentifizierung
curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");
// Rückgabe holen und dekodieren
$Rueckgabe = json_decode(curl_exec($curl));
// cURL schließen
curl_close($curl);
// Rückgabe ausgeben
foreach($Rueckgabe as $obj_key)
{
echo $obj_key->text;
echo "<br>";
}
?>
Zuerst musst du deinen Usernamen und dein Passwort in den Zeilen 4 und 5 einfügen. In Zeile 8 sagen wir der API, dass wir die Updates der Freunde holen möchten. Twitter liefert so die letzten 20. Anschließend kommt viel cURL-Kram. Wichtig ist hier nur der Login per cURL in Zeile 20. Ab Zeile 29 geben wir mit einer Schleife die Rückgabe aus. Die Rückgabe erhalten wir bereits in Zeile 23 per JSON. Dabei gibt uns die Twitter-API ein Objekt zurück, das alle nötigen Daten enthält. In dem Attribut "text" ist dabei das entsprechende Update des Users enthalten. Deshalb geben wir dies in Zeile 31 aus, indem wir das Attribut "text" des Rückgabeobjekts auslesen. Seine letzten 20 Updates holenGenauso einfach ist es, seine eigenen letzten Updates zu holen. Dabei müssen wir in Zeile 8 nur die URL austauschen:
<?php
// Authentifizierungsdaten
$username = 'DEIN_USERNAME';
$password = 'DEIN_PASSWORT';
// Seine letzten 20 Updates holen
$strAufrufURL = 'http://twitter.com/statuses/user_timeline.json';
// cURL initiieren
$curl = curl_init();
// URL angeben
curl_setopt($curl, CURLOPT_URL, $strAufrufURL);
// Rückgabewerte sollen verwendet werden
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// Authentifizierung
curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");
// Rückgabe holen und dekodieren
$Rueckgabe = json_decode(curl_exec($curl));
// cURL schließen
curl_close($curl);
// Rückgabe ausgeben
foreach($Rueckgabe as $obj_key)
{
echo $obj_key->text;
echo "<br>";
}
?>
Man könnte ebenso auch die letzten 20 Updates eines bestimmten Users holen, indem man die URL in Zeile 8 so ändert:
$strAufrufURL = 'http://twitter.com/statuses/user_timeline/axelscheuering.json';
Jemandem folgenWas natürlich auch interessant ist, ist es, jemandem automatisch zu folgen. Z. B. allen Personen, die über ein bestimmtes Thema schreiben. Dazu müsste man einfach per API alle Personen holen, die zu dem entsprechenden Thema schreiben und diesen dann per API folgen. Das folgen ist sehr einfach. Dazu muss zum Einen die URL ausgetauscht werden:
$strAufrufURL = 'http://twitter.com/friendships/create/15473474.json?follow=true';
Weiterhin darf nun nicht mehr die cURL Methode GET verwendet werden (standard), sondern die POST-Methode. Die folgende Zeile macht dies und kann direkt nach dem curl_setopt, mit dem die URL angegeben wird, eingefügt werden:
curl_setopt($curl, CURLOPT_POST, 1);
Die Nummer von dem .json ist die User-ID, welche man sich vorher per API besorgen kann. Man könnte beispielsweise die letzten Updates eines Users holen und dann dessen ID aus dem Rückgabe-Objekt auslesen:
// letzte Updates holen
$strAufrufURL = 'http://twitter.com/statuses/user_timeline/axelscheuering.json';
// Rückgabe-Objekt auslesen: ID holen
echo "<pre>".print_r($Rueckgabe[0]->user->id, true)."</pre>";exit;
Wenn man nun per Twitter-API jemandem automatisch folgt, braucht man natürlich keine Ausgabe per echo zu machen. Also die letzten Zeilen aus dem Code löschen oder auskommentieren. Twitter selbst hat eine sehr schöne Dokumentation der eigenen API ins Netz gestellt.
|
Kommentare
sehr coole Darstellung. Habe leider keinerlei Programmier Kenntnisse. Wie hoch ist denn da so der Zeitaufwand und die Kosten. Würde mich mal interessieren und wo findet man Leute, die sowas können?
das was hier beschrieben ist, ist recht einfach. Wenn du allerdings was individuelles brauchst, wird's recht schnell komplex. Ich habe momentan eine Twitter Klasse (ein Programm) geschrieben, die über 500 Lines of Code hat.
Je nach Projekt fallen da schon mal 100-200 Stunden Arbeit an.
30 echo $obj_key->text;
31 echo "";
Ich kann nur vor der Ausgabe des Objektwertes zusätzlich über echo zB diesen Zeilenumbruch ausgeben. In dieser Reihenfolge -- zuerst Objekt, dann ein weiteres "echo" -- geht nicht und ich bekomme diese Meldung:
Parse error: syntax error, unexpected T_ECHO in twitter_api_test.php on line 31
Gibt's hierfür eine Eklärung?
für Deinen Tweeds-Bereich rechts oben auf dieser Seite verwendest Du hier beschriebenen Code? Oder bindest Du die Tweeds irgendwie anders ein, bspw. über ein Joomla-Applet (oder wie sich dies dort nennt)?
Wie hoch ist die Refresh-Rate dieser Tweeds? Bei 150 pro Stunde, wie Du schreibst, müsste ja dann eine entsprechende Begrenzung/entsprechendes Intervall sein, damit dieses Limit nicht bereits nach 5 Stunden ausgeschöpft ist -- das ist der Hintergrund meiner Frage
das hier auf der Seite ist ein fertiges Modul von Joomla und heißt mod_tweets. Aber funktioneren tut es genauso wie alle Programme, die die Twitter API anzapfen. Dieses Teil cached die Tweets und muss somit nicht ständig neue API Requests machen. Theoretisch könnten von der IP dieses Servers max. 150 Requests auf die API in der Stunde gemacht werden. D. h. in fünf Stunden wären das 750 Seitenaufrufe. Bei mehr wäre Schluss und die API hätte keinen Bock mehr. Jetzt ist es aber so, dass meine Seite zwar zu den "wichtigsten in Deutschland" zählt (habe zumindest neulich ein Schreiben von einer Firma bekommen, wo das drin stand :) ) aber soviele Besucher hat selbst ajaxel.de nicht