Montag, 20. September 2010
Serendipity Twitter Plugin mit OAuth
Vor kurzem hat Twitter seine API derart umgestellt, dass nur noch autorisierte Anwendungen auf den Twitter-Stream mit erweiterten Funktionalitäten (und vor allem schreibend) zugreifen dürfen. Der neue Zugriff erfolgt mittels OAuth. Hier werden einzelne Anwendungen für den Zugriff konfiguriert, und das Passwort zum eigenen Twitter-Account muss nie übermittelt werden.
Die Einbindung von OAuth wurde initial dank der Hilfe von Silvio Kunze vorangetrieben. Ich habe mich am Wochenende dem Plugin angenommen, und dank des Feedbacks in der Twittersphere (Danke jpwenzel, mattsches und gethash), nun auch endgültig OAuth verstanden. Eigentlich nicht schwer, aber doch relativ umständlich einzurichten.
Die neue Twitter-Plugin-Version gibt es derzeit hier: serendipity_plugin_twitter.zip (1.23, wird nach ein paar Tests auch demnächst offiziell eingestellt)
Der grundsätzliche Workflow ist wie folgt:
1. Man installiert das Serendipity Twitter plugin (wenn nicht schon geschehen)
2. In der Konfiguration des Plugins gibt es einen neuen Button, mit dem man seine Anwendung auf Twitter.com registriert. Zudem erklärt einem das Plugin, welche Felder man mit welchen Werten man dort eintragen kann.
3. Sobald man die Anwendung (also das Plugin von euch) bei Twitter.com registriert hat, kriegt ihr auf der Folgeseite den Consumer Key und das Consumer Secret. Diese Zeichenfolge identifiziert die nur für euch registrierte Anwendung eindeutig. Diese beiden Zeichenfolgen kopiert ihr einfach in die Konfiguration des Serendipity-Plugins.
4. Nach dem speichern von Consumer Key und Secret in der Pluginkonfiguration gibt es einen neuen Button namens "Einloggen". Wenn ihr darauf klickt, kommt man zur Twitter-Seite, wo man die gerade angelegte Anwendung dazu autorisiert, auf euren Twitterstream zuzugreifen. Nach der Bestätigung der Twitter-Meldung landet ihr in eurem Blog, und die Verbindung wird als hergestellt markiert.
5. Ab jetzt könnt ihr wieder in der Startseite des Blogs eure Tweets absetzen, und beim Posten von Blogeinträgen automatisch an Twitter senden.
Ich wünschte man könnte den Prozess abkürzen, aber tatsächlich ist es von Twitter nicht vorgesehen, einfach per Link eine Anwendung mit vorausgefüllten Daten zu registrieren. Auch wäre es nicht sinnvoll eine einzelne App für alle Serendipity-Blogs zu erstellen, da ansonsten ein Missbrauch der Anwendung auswirkungen auf alle Anwender haben könnte. Abgesehen davon ist die Callback-URL ein Parameter pro Anwendung, und nicht pro Autorisierung - man müsste das Plugin also dann an zentraler Stelle als Proxy aufsetzen.
Bitte testet das Plugin bei euch, wenn ihr die Funktionalität gebrauchen könnt. Im ausführlichen Artikelteil gehe ich noch etwas spezieller auf die interne Funktionalität des Plugins ein.
Die Einbindung von OAuth wurde initial dank der Hilfe von Silvio Kunze vorangetrieben. Ich habe mich am Wochenende dem Plugin angenommen, und dank des Feedbacks in der Twittersphere (Danke jpwenzel, mattsches und gethash), nun auch endgültig OAuth verstanden. Eigentlich nicht schwer, aber doch relativ umständlich einzurichten.
Die neue Twitter-Plugin-Version gibt es derzeit hier: serendipity_plugin_twitter.zip (1.23, wird nach ein paar Tests auch demnächst offiziell eingestellt)
Der grundsätzliche Workflow ist wie folgt:
1. Man installiert das Serendipity Twitter plugin (wenn nicht schon geschehen)
2. In der Konfiguration des Plugins gibt es einen neuen Button, mit dem man seine Anwendung auf Twitter.com registriert. Zudem erklärt einem das Plugin, welche Felder man mit welchen Werten man dort eintragen kann.
3. Sobald man die Anwendung (also das Plugin von euch) bei Twitter.com registriert hat, kriegt ihr auf der Folgeseite den Consumer Key und das Consumer Secret. Diese Zeichenfolge identifiziert die nur für euch registrierte Anwendung eindeutig. Diese beiden Zeichenfolgen kopiert ihr einfach in die Konfiguration des Serendipity-Plugins.
4. Nach dem speichern von Consumer Key und Secret in der Pluginkonfiguration gibt es einen neuen Button namens "Einloggen". Wenn ihr darauf klickt, kommt man zur Twitter-Seite, wo man die gerade angelegte Anwendung dazu autorisiert, auf euren Twitterstream zuzugreifen. Nach der Bestätigung der Twitter-Meldung landet ihr in eurem Blog, und die Verbindung wird als hergestellt markiert.
5. Ab jetzt könnt ihr wieder in der Startseite des Blogs eure Tweets absetzen, und beim Posten von Blogeinträgen automatisch an Twitter senden.
Ich wünschte man könnte den Prozess abkürzen, aber tatsächlich ist es von Twitter nicht vorgesehen, einfach per Link eine Anwendung mit vorausgefüllten Daten zu registrieren. Auch wäre es nicht sinnvoll eine einzelne App für alle Serendipity-Blogs zu erstellen, da ansonsten ein Missbrauch der Anwendung auswirkungen auf alle Anwender haben könnte. Abgesehen davon ist die Callback-URL ein Parameter pro Anwendung, und nicht pro Autorisierung - man müsste das Plugin also dann an zentraler Stelle als Proxy aufsetzen.
Bitte testet das Plugin bei euch, wenn ihr die Funktionalität gebrauchen könnt. Im ausführlichen Artikelteil gehe ich noch etwas spezieller auf die interne Funktionalität des Plugins ein.
Ursprünglich rief Silvios erste Version des Plugins eigenständige PHP-Dateien in einem Unterverzeichnis auf und übermittelte Consumer Key / Secret in eine Datei. Ich habe dies so umgestellt, dass der Serendipity external_plugin-Hook aufgerufen wird, und alle Parameter ausschließlich in der Datenbank gespeichert werden.
Zudem habe ich im Code einige Redundanzen entfernt. Es gibt nun quasi drei Stamm-URL-Aufrufe, die Kontakt zu OAuth vornehmen:
1. index.php?/plugin/twitteroa-redirect stellt die Verbindung zu Twitter.com her, um den Zugriff für den definierten Consumer anzufordern.
2. index.php?/plugin/twitteroa-callback ist die in der Twitter-Anwendung hinterlegte URL, die nach erfolgter Zugriffssetzung einen Authentication Token und Secret an das Plugin übermittelt und speichert.
3. index.php?/plugin/twitteroa-del löscht eine einmals autorisierte Twitter-Anwendung.
Innerhalb des Plugins ist eine zentrale Methode namens twitteroa_connect() dafür zuständig, über die eingebundene Twitter OAuth-Bibliothek einen URL-Aufruf zu tätigen. Dieser wird mit den jeweiligen Tokens signiert und authentifiziert. Die Bibliothek unterstützte ursprünglich nur cURL-URL-Handling. Hier habe ich als Fallback auch die Unterstützung von PEAR::HTTP_Request mit integriert, der Standard-Bibliothek für Serendipity-URL-Aufrufe.
Zudem habe ich im Code einige Redundanzen entfernt. Es gibt nun quasi drei Stamm-URL-Aufrufe, die Kontakt zu OAuth vornehmen:
1. index.php?/plugin/twitteroa-redirect stellt die Verbindung zu Twitter.com her, um den Zugriff für den definierten Consumer anzufordern.
2. index.php?/plugin/twitteroa-callback ist die in der Twitter-Anwendung hinterlegte URL, die nach erfolgter Zugriffssetzung einen Authentication Token und Secret an das Plugin übermittelt und speichert.
3. index.php?/plugin/twitteroa-del löscht eine einmals autorisierte Twitter-Anwendung.
Innerhalb des Plugins ist eine zentrale Methode namens twitteroa_connect() dafür zuständig, über die eingebundene Twitter OAuth-Bibliothek einen URL-Aufruf zu tätigen. Dieser wird mit den jeweiligen Tokens signiert und authentifiziert. Die Bibliothek unterstützte ursprünglich nur cURL-URL-Handling. Hier habe ich als Fallback auch die Unterstützung von PEAR::HTTP_Request mit integriert, der Standard-Bibliothek für Serendipity-URL-Aufrufe.
Kommentare
Ansicht der Kommentare:
(Linear | Verschachtelt)
Gefällt mir! 
Nach dem Urlaub gleich mal in diversen Blogs testen...

Nach dem Urlaub gleich mal in diversen Blogs testen...
Super, danke!
Ich komme jedoch nur bis zur Registrierung. Beim Versuch des Einloggens öffnet sich ein Fenster ohne Inhalt und mein Blog wirft die Meldung
Warning: Invalid argument supplied for foreach() in /home/.sites/19/site2/web/blog/plugins/serendipity_plugin_twitter/classes/Backtweet.php on line 94
aus.
Liebe Grüße
Robert
Ich komme jedoch nur bis zur Registrierung. Beim Versuch des Einloggens öffnet sich ein Fenster ohne Inhalt und mein Blog wirft die Meldung
Warning: Invalid argument supplied for foreach() in /home/.sites/19/site2/web/blog/plugins/serendipity_plugin_twitter/classes/Backtweet.php on line 94
aus.
Liebe Grüße
Robert
Peinlich. Das Plugin war noch von vorher deaktiviert. Daher die Fehlermeldung. Aktiviert und sie ist weg...
Danke für die angepasste Version an alle Beteiligten! 
Ich habe das Plugin installiert und die Konfiguration hat so wie oben im Artikel beschrieben funktioniert. Die Fehlermeldung von Robert hatte ich nicht. Wenn im laufenden Betrieb noch Probleme auftauchen, melde ich mich nochmal hier.

Ich habe das Plugin installiert und die Konfiguration hat so wie oben im Artikel beschrieben funktioniert. Die Fehlermeldung von Robert hatte ich nicht. Wenn im laufenden Betrieb noch Probleme auftauchen, melde ich mich nochmal hier.
Ich glaube ich sollte meine Installation mal ganz neu aufsetzen. Die hat einfach Schluckauf...
Eine Frage kurz.
Welche Dienste benötigt das Plugin von der Serverseite aus?
Ich hab nämlich das Problem, das auf dem einen Server nur ein weißes Fenster aufgeht und wenn ich das gleiche auf einem anderen Server von einem anderen Anbieter installiere geht alles wunderbar...
Hab zur Zeit nur diesen Dienst aktiviert: "PHP-Unterstützung"
Welche Dienste benötigt das Plugin von der Serverseite aus?
Ich hab nämlich das Problem, das auf dem einen Server nur ein weißes Fenster aufgeht und wenn ich das gleiche auf einem anderen Server von einem anderen Anbieter installiere geht alles wunderbar...
Hab zur Zeit nur diesen Dienst aktiviert: "PHP-Unterstützung"
Hi!
Also PHP5 mit CURL wäre das, mit dem es problemlos geht. PHP4 mit CURL geht auch -- wenn kein CURL da ist braucht man SSL-Wrapper, damit fopen/file_get_contents auch klappen kann. Das ist leider häufig nicht unbedingt gegeben.
CURL ist Default bei PHP5, jeder "gute" Provider müsste es eigentlich unterstützen...
Also PHP5 mit CURL wäre das, mit dem es problemlos geht. PHP4 mit CURL geht auch -- wenn kein CURL da ist braucht man SSL-Wrapper, damit fopen/file_get_contents auch klappen kann. Das ist leider häufig nicht unbedingt gegeben.
CURL ist Default bei PHP5, jeder "gute" Provider müsste es eigentlich unterstützen...
YellowLeds Weblog am : twitter, are you still there?
Vorschau anzeigen
Sperrobjekt Weblog am : Twitter-Plugin lernt OAuth
Vorschau anzeigen