Der
erste Teil widmete sich Darstellung von Tweets, vor allem ohne Programmierung.
Nun wird die API benutzt, um Tweets zu schreiben ohne die Twitter Seite zu besuchen / verwenden.
Wie kann ich von der eigenen Webseite / Anwendung Tweets schreiben?
Die Hauptarbeit liegt in der Autorisation, denn es wird sich nicht einfach über Benutzername und Passwort angemeldet.
Aus Sicherheitsgründen erfolgt die Autorisation über
OAuth.
Was ist OAuth?
Kurz gefasst ist OAuth ein Protokol für sichere Autorisierung über das Web.
Ein Benutzer erlaubt einer Anwendung den Zugriff auf die Daten bzw. deren Änderung.
Dabei gilt eine Homepage oder ein Webservice auch als eine Anwendung.
Der Clou ist, das die Anwendung nicht den Benutzername und Passwort erhält, womit die Anwendung kompletten zugriff auf den Dienst hätte.
Um auf die Resourcen zuzugreifen, bekommt sie zur Autorisation nur einen sogenannten Token.
Erweist sich die Software als bösartig oder wird der Token geklaut, so kann nur diesem Token die Zugriffserlaubnis entzogen werden.
Das Passwort muss nicht geändert werden und alle anderen Anwendungen laufen ohne Änderung weiter.
Die Anwendung bei Twitter registrieren
Nicht nur der Benutzer, sondern auch die Anwendung muss registriert werden. Schliesslich muss die Anwendung gezielt angesprochen bzw. "deaktiviert" werden können.
Unter "
Register an Application" kann die Anwendung angemeldet werden.
Nach Möglichkeit wird die Anwendung unter dem selben Twitter Account angelegt, mit dem später auch gearbeitet werden soll.
Die meisten Felder des Anmeldeformulars wie Application Name sollten selbst erklärend sein.
Bei der Anwendung handelt es sich um eine Homepage, daher ist Application Type = Browser.
Wichtig ist die Umstellung "Default Access type" auf "Read & Write", schliesslich sollen Tweets geschrieben werden.
Nach Abschluss der Registrierung erhält man eine Übersichtsseite für die Anwendung.
Besonders wichtig ist hierbei der Consumer Key & Secret, denn dies sind die Anmeldedaten der Anwendung bei Twitter.
Kurzer Begriffshinweis:
Consumer = Client (Anwendung) Berechtigungsnachweis
Token = Benutzer Berechtigungsnachweis
OAuth Implementierung
Mit dieser Anmeldung erfolgte die Festlegung das der Zugriff per Web bzw. Browser erfolgt.
Die Hompepage URL wurde auch schon festgelegt.
Soweit sind die Daten vorhanden, das die Anwendung eine Verbindung mit Twitter aufbauen kann.
Für die Implementierung in ein Programm listet Twitter glücklicherweise Implementierungen von OAuth in verschiedenen Programmiersprachen auf (
Übersicht).
Für die Beispiele hier wird PHP mit
Abraham's TwitterOAuth benutzt.
Darin ist nicht nur OAuth implementiert, sondern auch der Zugriff auf die
Twitter API.
Ausserdem ist die Anwendung ausgeprochen einfach. Die grundsätzlichen Schritte sollten aber in anderen Klassen bzw. Sprachen ähnlich sein.
TwitterOAuth setzt folgende PHP Features voraus:
PHP 5.2.x
cURL
OpenSSL
Entscheidung über das Anwendungsgebiet
Es gibt nun 2 Anwendungsszenarien.
Die erste Möglichkeit, es gibt nur einen "starren" Twitter Benutzer auf der Seite.
Üblicherweise wird Twitter dann nur "intern" vom Seiten Admin genutzt.
Zum Beispiel um neue Blog Beiträge von der Seite auf Twitter (automatisch) anzukündigen.
Die andere Möglichkeit ist, das beliebig viele verschiedene Benutzer ihren Twitter Account auf der Seite benutzen möchten.
Dies kann zum Beispiel auf einer
Community Seite erfolgen.
Dann muss sich jeder einzele Benutzer mit der Anwendung bei Twitter autorisieren.
Fall #1: Einzelener Twitter Account
Bei nur einem Benutzer braucht der OAuth Token nur einmal bei Twitter geholt werden und wird sich fortan immer mit diesem anmelden.
Dazu wird bei Twitter die angemeldete Anwendung betrachtet (
View your applications) und "My Access Token" ausgewählt.
Dort befindet sich das "OAuth Token" und das "OAuth Token Secret" für die Autorisation des Benutzers.
Die Token am Besten in der "config" Datei speichern.
Nun sind alle Daten vorhanden, um Twitter zu benutzen.
// Config:
$consumer_key = "Consumer Key ";
$consumer_secret = "Consumer Secret";
$access_key = "OAuth Token"
$access_secret = "OAuth Token Secret";
// Anwendung:
require_once('twitteroauth/twitteroauth.php');
// Mit Twitter verbinden
$twitter = new TwitterOAuth ($consumer_key, $consumer_secret, $access_key, $access_secret);
// Einen Tweet posten
$twitter->post("statuses/update", array("status'"=> "Test #1 von TwitterOAuth via @cucm"));
Fall #2: Mehrere Twitter Accounts
Bei mehreren Twitter Accounts benötigt jeder Account seinen eigenen Berechtigungsnachweis (OAuth Token + Secret).
Dafür wird erstmal ein temporärer Token erzeugt.
Mit diesem Token meldet sich der Benutzer bei Twitter an und erlaubt der Anwendung den Zugriff auf sein Profil.
Den Client Berechtigungsnachweis besitzen wir bereits (Consumer Key / Secret) und bleibt für jeden Benutzer gleich.
Der Initialisierungsprozess findet beispielsweise in der redirect.php und der Abschluss in der callback.php statt.
Beide Schritte sind ohne Benutzereingriff möglich.
Folgen wir im Detail den (englischen) Anweisungsschritten von
Abraham's TwitterOAuth Documentation. Dazu werden 2 Dateien angelegt, beide kommen erstmal ohne Benutzer Interaktion aus. Die redirect.php bereitet eine Weiterleitung zu Twitter vor. Die callback.php wird von Twitter nach der erfolgreichen Autorisation aufgerufen.
Schritt 1: TwitterOAuth Object (redirect.php)
Auf der Einstiegsseite wird ein neues TwitterOAuth Object gebaut, aber nur mit dem Client Berechtigungsnachweis.
$connection = new TwitterOAuth($consumer_key, $consumer_secret);
Schritt 2: Temporärer Berechtigungsnachweis
Von Twitter einen temporären Berechtigungsnachweis anfordern.
Die Antwort temporär z.B. in Session speichern.
$temporary_credentials = $connection->getRequestToken(); // Bei der Anwendungsanmeldung registrierte Callback URL verwenden
$temporary_credentials = $connection->getRequestToken('http://example.com/callback.php?'); // Dynamische Callback URL verwenden
Schritt 3: Twitter Anmelde URL
Mit dem temporären Berechtigungsnachweis muss der Benutzer zu Twitter gehen und der Anwendung den Zugriff auf Twitter erlauben.
$redirect_url = $connection->getAuthorizeURL($temporary_credentials);
Schritt 4: Weiterleitung zu Twitter
Mit der gegeben Twitter URL wird der Benutzer zu Twitter weitergeleitet.
An die Twitter URL können Parameter gehängt werden, die wiederrum über die Callback URL zurückgeschickt werden.
https://twitter.com/oauth/authenticate?oauth_token=xyz123
https://twitter.com/oauth/authenticate?oauth_token=xyz123&info=abc // info kommt zurück
Schritt 5: Twitter Login
Auf Twitter führt der Benutzer einen Login durch bzw. registriert sich.
Anschliessend erlaubt / verbietet (allow / deny) er der Anwendung den Zugriff.
Nun erfolgt von Twitter eine automatische Weiterleitung zur Callback URL
Schritt 6: Benutzer ist zurück (callback.php)
Der Benutzer ist zurück in der callback.php und hat der Anwendung den Zugriff erlaubt.
Mit dem temporären Berechtigungsnachweis wird ein neues TwitterOAuth Object erzeugt.
$connection = new TwitterOAuth($consumer_key, $consumer_secret, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); // Session siehe Schritt 2
Schritt 7: Aus temporär wird dauerhaft
Twitter wird nach einem dauerhaften Berechtigungsnachweis (long lasting Token) gefragt.
Dieses Token wird anstelle des Passwortes benutzt und ist nur in Verbindung mit dieser Anwendung gültigt.
Für alle künftigen Anfragen diesen Benutzers wird das Token verwendet, daher sollte es zum Beispiel in der Datenbank gespeichert werden.
Wenn eine dynamische / abweichende Callback URL verwendet wurde, muss der "oauth_varifier" Parameter angegeben werden.
$token_credentials = $connection->getAccessToken();
$token_credentials = $connection->getAccessToken($_REQUEST['oauth_verifier']); // Dynamische Callback URL
Schritt 7a: Weiterleitung
Nun kann der Benutzer zur eigentlichen Anwendung weiterleitet werden.
Schritt 8: Neues TwitterOAuth Object
Mit diesem Schritt wurde endlich mit Fall #1 gleichgezogen.
In der Anwendung wird ein neues TwitterOAuth Object angelegt, diesmal mit dem dauerhaften Berechtigungsnachweis.
$twitter = new TwitterOAuth ($consumer_key, $consumer_secret, $token_credentials['oauth_token'], $token_credentials['oauth_token_secret']);
Schritt 9: Aktionen als Benutzer
Endlich ist die Anwendung autorisiert und kann Aktionen im Namen des Benutzers auszuführen.
$content = $twitter ->get('account/verify_credentials');
$twitter ->post('statuses/update', array('status' => 'Test #2 von TwitterOAuth via @cucm'));
$twitter ->post('statuses/update', array('status' => 'Test #3 von TwitterOAuth via @cucm', 'in_reply_to_status_id' => 123456));
Der Beispiel Code kann auch in den Dateien "redirect.php" und "callback.php" aus dem TwitterOAuth Packet gefunden werden.
In der "index.php" sind auch weitere Beispiel Aufrufe gelistet.
Links
Twitter API Teil 1: Wie stelle ich Tweets auf einer Webseite dar
Twitter Developers
Twitter API Documentation
Twitter Widgets
Twitter / Tweet Button
Twitter Register an Application - Twitter Anwendung registrieren
Twitter OAuth Libs
Abraham's TwitterOAuth
Anhang: Code Zusammenfassung für Fall #2
// redirect.php
$connection = new TwitterOAuth($consumer_key, $consumer_secret);
// Variante: registrierte Callback URL
$temporary_credentials = $connection->getRequestToken();
// Variante: Dynamische Callback URL
$temporary_credentials = $connection->getRequestToken('http://example.com/callback.php?');
$redirect_url = $connection->getAuthorizeURL($temporary_credentials);
// Weiterleitung anstossen
// callback.php
// Session siehe Schritt 2
$connection = new TwitterOAuth(consumer_key, $consumer_secret,
$_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
// Variante: Registrierte Callback URL
$token_credentials = $connection->getAccessToken();
// Variante: Dynamische Callback URL
$token_credentials = $connection->getAccessToken($_REQUEST['oauth_verifier']);
// Anwendung
$twitter = new TwitterOAuth ($consumer_key, $consumer_secret,
$token_credentials['oauth_token'], $token_credentials['oauth_token_secret']);
$content = $twitter ->get('account/verify_credentials');
$twitter ->post('statuses/update', array('status' => 'Test #2 von TwitterOAuth via @cucm'));
$twitter ->post('statuses/update', array('status' => 'Test #3 von TwitterOAuth via @cucm',
'in_reply_to_status_id' => 123456));
Kommentare
KDB
Gibts irgendwo eine umfassende Übersicht über die API ( Aufrufe, Statuscode )
Klaus-Dieter
Nick
freut mich das es sofort funktionierte. Auf Anhieb kann ich im Moment nur auf die "API Documentation" von Twitter selbst verweisen, wobei ich die Dokumentation jetzt nicht soo gut finde.
Twitter API Documentation:
http://dev.twitter.com/doc
Beispiel statuses/update:
http://dev.twitter.com/doc/post/statuses/update
Kommentar Verfassen