So, jetzt wird es spannend. Wir bringen jetzt unserm Bot das sprechen bei und wir dürfen ihm dabei sogar die Worte in den Mund legen. Dazu benutzen wir die Twitter REST API. Das ist unsere Schnittstelle mit dem Twitter Service. Über diese API können wir dem Twitter Service mitteilen, was wir von Ihm gerne hätten. Wir sollten also unsere Twitter-Anmelde-Informationen bereit halten.

Weitere Stichworte, die uns nicht völlig unvertraut sein sollten sind cURL und JSON.

Als erstes definieren wir unsere Twitter Account Informationen als Konstanten. Warum nicht als Variablen? Naja, weil sich die Werte ja zur Laufzeit doch nicht ändern. Natürlich solltet ihr an dieser Stelle eure eigenen Werte angeben. Das die Informationen hier im Klartext stehen, ist ein Sicherheitsrisiko. Man kann dieses Thema umgehen, indem man das von Twitter angebotene OAuth benutzt. Ein Exkurs in diese Richtung findet aber im Rahmen dieser Anleitung nicht statt.

define( "TWITTER_LOGIN", "allesblog" );
define( "TWITTER_PASSWORT", "strenggeheim_12294827492836532524985624" );
// Euch ist schon bewusst, dass das nicht das richtige Passwort ist...

Jetzt bauen wir unsere Nachricht zusammen. Im ersten Versuch kleben wir unsere kurze URL einfach an das Ende der Überschrift ran.

$message = $title." ".$jmp;

Wir sollten allerdings immer im Hinterkopf behalten, dass Twitter nur maximal 140 Zeichen pro Nachricht zulässt. Auf alles was länger ist, reagiert Twitter unvorhersehbar. Im Einfachsten Fall wird die Nachricht willkürlich gekürzt.

if (strlen($message) > 140) {
  $title = substr($title, 0, 140-strlen("[...] ".$jmp));
  $message = $title."[...] ".$jmp;
}

Dadurch wird Beispielsweise aus unserer Nachricht “Zulangeüberschriftmitmehrals140ZeichenBeispiel http://j.mp/XXXX” folgender Text “Zulangeüberschriftmitme[…] http://j.mp/XXXX”.

Wie schon eingangs erwähnt, wird cURL als Schnittstelle zu Twitter benutzt. cURL ist eine Standardklasse in PHP und dafür müssen wir niemanden befragen um das Rad nicht neu zu erfinden. Das ist gleich mit dabei.

$curl = curl_init( "http://twitter.com/statuses/update.json" );
curl_setopt( $curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC );
curl_setopt( $curl, CURLOPT_USERPWD, TWITTER_LOGIN .":". TWITTER_PASSWORT );
curl_setopt( $curl, CURLOPT_POST, 1 );
curl_setopt( $curl, CURLOPT_POSTFIELDS, "status=$message" );
curl_exec( $curl );
curl_close( $curl );

Die einzelnen Zeilen noch mal erklärt:

  1. Es wird ein Objekt angelegt, dass als Ziel die Schnittstelle bekommt, mit der man auf Twitter seinen Status setzen kann.
  2. Um die Schnittstelle zu benutzen, müssen wir uns authentifizieren.
  3. Unsere Anmeldeinformationen.
  4. Wir senden einen POST Nachricht ab.
  5. Unsere POST Nachricht enthält das Feld status mit unserer Nachricht.
  6. cURL führt unsere konfigurierte Anfrage aus.
  7. Das Gegenstück zu curl_init() nicht vergessen.

Und wenn wir alles richtig gemacht haben und uns der Twitter Fail Whale nicht auf der Leitung lag, dann sollte jetzt auf der Seite von unserem Twitter Account eine erste Nachricht erschienen sein.

Allesblog#cURL#PHP#Twitter

Twitter ist ein Web 2.0 Trend, den ich gerne mitmache. Ich finde, dass dieses MicroBlogging eine interessante Eigendynamik entwickelt hat. Ich will aber nicht darauf eingehen, was Twitter ist. Ich selbst benutze Twitter täglich und seit neuestem schickt mir mein Webserver statt eMail kurze Tweets wie es ihm geht und was er gerade macht. Und während mein Laptop in den Arbeitspausen mit Proteinfaltung beschäftigt ist, twittert er ab und zu, wie weit er mit dem aktuellen Arbeitspaket gekommen ist. Alles was dazu nötig ist, ist ein “frisiertes” Betriebssystem 😉

Einfache Tweets lassen sich mit Hilfe von cURL auch von der Kommandozeile absetzen. Da es cURL für einige Plattformen gibt, ist also der Unterbau ziemlich egal. Getestet habe ich es unter Windows XP und Linux (Gentoo).

twitter.bat unter Windows:

curl.exe –basic –user “<login>:<passwort>” –data-ascii “status=%*” “http://twitter.com/statuses/update.json”

twitter.sh unter Linux:

curl –basic –user “<login>:<passwort>” –data-ascii “status=`echo $@|tr ‘ ‘ ‘+’`” “http://twitter.com/statuses/update.json”

Da die Twitter API die Anzahl der Zugriffe kontrolliert, sind folgende Parameter äußerst willkommen, die bei einem Fehlversuch bis zu X mal nach einem Delay von Y Sekunden versuchen, den tweet zu wiederholen. Dafür werden maximal Z Sekunden spendiert: –retry <X> –retry-delay <Y> –retry-max-time <Z>

Premiere mit diesem Blog Eintrag ist, dass neue Posts auch unter meinem Twitter Account bekannt gegeben werden. Man erkennt sie Einträge an dem vorrangestelten “Frisch gebloggt: “.

Happy Web 2.0

#cli#command line#command prompt#cURL#Linux#Netz#tweet#Twitter#Windows
    • Steltek
    • “Da die Twitter API die Anzahl der Zugriffe kontrolliert,”

      Erm… das tut die API laut Doku/FAQ nur fuer GET calls, nicht fuer Updates.

      http://apiwiki.twitter.com/Rate-limiting

      Allerdings gelten Pro Tag Update limits (egal ob API oder nicht) von z.B. 1000 Updates/Tag oder 250 DMs/Tag.