Serendipity Twitter Plugin 1.0
Nun denn: Es ist endlich so weit. Das deutlich erweiterte Twitter Plugin für Serendipity ist fertig und in Spartakus veröffentlicht. Ich habe einiges an dem Plugin geändert, es besteht nun aus dem alten (auch verbesserten) Seitenleistenplugin und einem neuen Eventplugin für Backend Funktionalität. Die meiste Zeit verging fast beim Testen, hier noch mal ein dickes Dankeschön an Robert und Matthias!
Was hat sich alles verändert oder ist neu?
Der TwitterTweeter, Twitter Client für das Backend
Als erstes das, was ich eigentlich als letztes eingebaut habe: Ich habe den Backend Client Code aus dem Twitter Tweeter Plugin als Vorlage genommen und diesen auf meine Twitter Routinen portiert und noch ein paar Kleinigkeiten ausgebessert. Hier noch einmal einen großen Dank an Silvio Kunze, von dem ich große Teile des Codes einfach übernehmen konnte. Ich habe diesen nun auf PHP4 und weg von libcurl portiert, und noch ein paar kleinere Fixes sowie zusätzliche Optionen erledigt.
Ein Hauptgrund für den Einbau seines Twitter Tweeter Codes war natürlich, dass -wie bisher üblich in Serendipity- möglichst nicht mehrere Plugins für ähnliche Aufgabenbereiche vorhanden sein sollten.
Ankündigungen über Twitter
Eine ähnliche Funktion hatte auch bereits das TwitterTweeter Plugin. Mein Code war allerdings schon fertig, als ich das TwitterTweeter Plugin sah, und bietet auch ein paar mehr Optionen. Hiermit kann man neu erstellte Artikel automatisch über seinen Twitter Zugang veröffentlichen. Man kann diese Ankündigungen gleich mit Twitter Such Tags versehen, es gibt mehrere Services zum Kürzen von URLs zur Auswahl usw.
Mit dieser Funktion kann man externe Services wie z.B. TwitterFeeds ersetzen. Man sollte seine TwitterFeeds sogar besser ausschalten, wenn man das Plugin benutzt, damit nicht doppelt angekündigt wird..
Tweetbacks
Dies ist eine der coolsten Funktionen und gleichzeitig auch eine, die die meiste Zeit und Gehirnschmalz gekostet hat. Tweetbacks sind etwas ähnliches wie Trackbacks, nur nicht auf externe Artikel bezogen, die auf das eigene Blog zeigen, sondern auf Twitter Tweeds, die einen Artikel im Blog erwähnen.
Diese zu ermitteln stellt sich als extrem kompliziert heraus. Es gibt einige Wordpress Plugins, die dies auch versuchen und das selbe Verfahren wie das S9Y Plugin benutzen, nur sind die Routinen im S9Y Plugin zusätzlich noch deutlich auf Performance optimiert, so weit ich das vergleichen konnte.
Problem dabei ist, dass Twitter keine Tweetbacks sendet (analog zu Trackbacks, die vom referenzierenden Blog gesendet werden). Sie müssen aktiv aus der Masse an Tweets heraus gesucht werden. Dazu durchsucht man alle Tweets auf Links, die auf das eigene Blog zeigen. In Twitter werden URLs in stark gekürzter Form abgegeben, sie werden mit URL Kürzern wie tinyUrl.com oder bit.ly gekürzt. Das Plugin muss also alle möglichen Versionen von Kurz URLs ermitteln und nach diesen suchen.
Probleme von Tweetbacks
Und hier ist das Problem: Leider liefern die meisten URL Kürzer beliebig viele Kurz URLs für ein und die selbe URL (tinyUrl.com ist hier eine der wenigen Ausnahmen). Somit sind diese nur sehr schwer bis gar nicht zu finden, außer sie wurden erstellt, ohne bei dem Service speziell eingeloggt zu sein, denn auf dem selben Weg erzeugt auch das Plugin seine Vergleiche.
Twitter ist (in dem Zusammenhang leider) vor kurzem eine Kooperation mit bit.ly eingegangen. Erstellt man einen tweet in Twitter, der eine lange URL enthält, so wird diese automatisch über bit.ly gekürzt und zwar mit einem speziellen eigenen Twitter Account. Diese URLs sind nicht zu finden, da das Plugin diesen Account nicht kennt.
Dazu gleich eine Anmerkung: Man könnte das Problem umgehen, indem man bei bit.ly direkt anfragen könnte, welche KurzURLs für eine bestimmte URL bereits bekannt sind. Diese Abfrage bietet keiner der mir bekannten Services, dies zu implementieren wäre jedoch ein leichtes für (z.B.) bit.ly. Bit.ly hat ein Forum, in dem man Wünsche äußern kann und für ihre Wichtigkeit abstimmen kann. 2 Einträge wären hier sehr interessant:
Wenn bit.ly einen dieser beiden Vorschläge umsetzen würde, könnte man auf einmal einen großen Teil der Tweetbacks (nämlich die direkt in Twitter erstellten) finden. Also bitte: Wenn ihr ein paar Sekunden Zeit habt, dann votet doch für diese beiden Einträge, man muss nicht eingeloggt sein (kann aber eingeloggt noch einmal voten..
)
Unter dem Strich bleibt also: Ein verdammt cooles Feature, nur leider mit wenig Chance, etwas zu finden. Mal schauen, ob etwas gefunden wird, wenn das Plugin in populäreren Blogs als meinem eingesetzt wird.
Twitter Timeline als Seitenleiste
Dies ist die bekannte Funktion aus dem alten S9Y Twitter Plugin. Hier habe ich in einer kleinen Session mit Yellowled den HTML Code verbessert. Außerdem habe ich die PHP Version des Plugins stark verbessert. Die Optik ist nun an die Optik der JavaScript Version angepasst, dafür muss die PHP Version aber kein JavaScript nachladen und kann viel cachen.
Das cachen geschieht inzwischen im Hintergrund. Das alte Plugin blockierte mir sofort das Blog, wenn Twitter (z.B. wegen Wartungsarbeiten) blockierte.
Das war's!
Dann wünsche ich viel Spaß mit dem neuen Plugin. Ich würde mich freuen, wenn ihr vor allem mal berichtet, wie und ob die Tweetbacks bei euch greifen. Vielleicht habt ihr ja noch eine schlaue Idee, wie man das noch intelligenter lösen kann. Die Kommentare bieten euch Platz dafür. ![]()
Ich habe auch noch einige Ideen, was man noch in das Plugin einbauen kann. Garvin hat sich z.B. gewünscht, dass es Tweets eines bestimmten Zeitraums zusammenfassen und in einem Artikel posten können sollte. Nette Idee, gar nicht schwer. Vielleicht habe ich auch dafür bald Zeit.
Wer das Plugin nicht über Spartakus beziehen kann oder will, findet es auch in meinem Files Bereich.

Comments
Display comments as Linear | Threaded
Matthias Mees on :
Ein echter "group effort", und es hört sich nach einem Plugin an, was sogar mehrere "Nutzungssituationen" bedient. Mich z.B. interessiert die Ausgabe von Tweets in der Seitenleiste derzeit nicht die Bohne, aber so ein integrierter Ankündigungsdienst ...
Saubere Arbeit!
Grischa on :
Dir hier auch noch mal ein dickes Danke, yellowled. Ja, war eine schicke Gruppenarbeit mit vielen involvierten S9Y Größen.
Klasse auch, dass Silvio mir erlaubte, seinen Code einfach mit in das Plugin zu integrieren. Ich empfinde die Strategie von S9Y "ein Plugin für einen Aufgabenbereich" immer noch als ziemlich klasse.
Nun bin ich gespannt, ob alles so läuft, wie es soll.
Letzte Nacht ist mir beim Einschlafen noch eine Idee gekommen, wie man Tweetbacks noch auf andere Art heraus filtern kann. Die wäre sogar komplett unabhängig von dem verwendeten URL Kürzer Service.. Muss mal probieren, ob sich das umsetzen lässt..
Matthias Mees on :
Wie man hier bei uns im Norden sagt: »Da nich für, nech«
Ich schätze diesen »one job, one plugin«-Ansatz auch sehr, halte ihn für überaus benutzerfreundlich und definitiv ein Argument pro-s9y. Wobei abzuwarten wäre, ob das bei einer größeren Entwicklerschar noch zu managen wäre.
Achim on :
Auch von mir ein Danke für die Mühen!!
alwin on :
Zunächst sehr vielen Dank. Wirklich tolles Plugin!
Vom Style muss ich mal schauen, weil es zur Zeit noch etwas unübersichtlich im Schriftsatz in meinem Blog erscheint.
Tweetbacks, die über TinyURL gekürzt waren funktionierten natürlich freudig gut.
Sonst benutze ich immer tr.im zum Kürzen von URL's. Aber damit habe ich noch keine Tweetbacks getestet.
Inspiriationen, zum finden/setzen von Tweetbacks:
Bei Facebook gibts die Möglichkeit, dass nur die Twittereien auf der Pinwand erscheinen, die den Hashtag #fb haben. Wäre es sinnvoll, wenn man auch solche Hashtags im Plugin definieren könnte?
Eine andere Inspiration: Bei tr.im kann man beim Kürzen eine Wunschurl/CustomURL angeben. Würde es beim Finden helfen, wenn man die CustomURLs nach enem bestimmten Schema basteln würde?
Naja, vielleicht ist es Quatsch eines Ahnungslosen, vielleicht inspiriert dieser Kommentar.?
Grischa on :
Wenn Du mit dem Style das Seitenleistenplugin meinst: Das ist inzwischen so angelegt, dass es sich ziemlich leicht über CSS Einträge optisch verändern lässt. Wenn Du Dir meine users.css ansiehst, dann siehst Du meine Einträge dafür ganz unten.
tr.im einzubauen sollte kein großes Problem darstellen, vermute ich, derzeit unterstützt das Plugin diesen Service noch nicht. Allerdings ist das wieder ein Kürzer mit Login und Tracking, dessen URLs werden also wahrscheinlich wieder nahezu nicht gefunden werden können.
Silvio hat auch nahegelegt, 7ax.de einzubinden. Das ist kürzer als tinyurl.com, hat aber die selben positiven Eigenschaften wie jenes. Das werde ich also auch auf jeden Fall einbinden.
Zu Deinen Inspirationen: Vielen Dank! Ich werde mal drüber grübeln, ob man da was machen kann.. Allerdings will man ja vor allem "fremde" Tweetbacks erwischen. Diese werden sich an keinerlei Vereinbarungen halten..
Ben on :
Hmm, mein Spartacus findet das Update leider noch nicht. Bin aber dann mal sehr gespannt. Finde es ja sehr praktisch, dass das gerade jetzt kommt wo ich mich seit gestern den Twitterern angeschlossen habe *g*
Grischa on :
Noch nicht in Spartakus zu finden? Na, wie geschrieben: Für die ungeduldigen ist die Version, die ich in Spartakus veröffentlicht habe auch direkt im FILES Bereich meines Blogs zu saugen.
Ach und herzlich willkommen bei den Zwitschern.. Ich bin ja auch erst seit kurzem dabei.
Ben on :
Nach dem manuellen Update bekomme ich jetzt im Seitenleistenplugin neben dem Follow-Link leider nur noch die Anzeige:
"* Es kann gerade nicht auf Twitter zugegriffen werden.
Bitte später noch einmal laden."
Woran kann das liegen?
Ben on :
Habe festgestellt, dass das Seitenleistenplugin nur unter Verwendung der PHP-Ausgabe diese Fehlermeldung ausgibt. Mit JavaScript-Ausgabe funktioniert es... Sehr schade.
Grischa on :
Diese Meldung kommt dann, wenn die Abfrage der Timeline bei Twitter kein Resultat lieferte. Oder genauer: Wenn das Cachefile nicht gefüllt ist. Woran das liegt, müssen wir wohl mal zusammen ermitteln.
Ich melde mich per EMail bei Dir, ich hoffe, wir können das Problem bei Dir dann lösen.
Ben on :
Also ich habe jetzt mal in meinen Logs geguckt und da taucht folgende Fehlermeldung auf, wenn ich versuche die PHP-Anzeige des Seitenleisten-Plugin zu nutzen:
"[Thu Jun 18 15:48:43 2009] [warn] mod_fcgid: stderr: PHP Fatal error: Class 'HTTP_Request' not found in /*der Pfad zu meinem Webspace*/serendipity/plugins/serendipity_plugin_twitter/serendipity_event_twitter.php on line 895"
Vielleicht hilft das ja weiter.
Grischa on :
Das hilft allerdings weiter!
Gibt es bei Dir in der Blog Installation den Ordner bundled-libs/HTTP und ist dieser gefüllt? Die Klasse HTTP_Request ist Teil der Serendipity Distribution und sollte unter den bundled-libs liegen.
Hast Du eine komplette S9Y Installation? Und welche Version benutzt Du?
Ben on :
Ja, ich habe eine komplette s9y-Installation in der aktuellen Version 1.4.1 und auch die genannte Klasse ist vorhanden.
Grischa on :
Ich glaube, ich habe das Problem gefunden, was das bei Dir bewirkt. Ich vermute, Du hast nur das Seitenleisten Plugin und nicht das Event Plugin installiert?
Ich schicke Dir gleich mal eine neue Version des Plugins zum Testen.
Thorsten on :
Von mir nun auch nochmal hier ein Lob. Hatte ja gestern schon via Twitter geschrieben das ich es super finde.
Wie nur gestern von via Twitter das man mal schauen muss wie es sich mit terminierten Post verhält. Anscheinend klappt es dann ja net
Ansonsten Thumbs Up und merci
Sers Thorsten
Grischa on :
Ah, Du bist @TWioE?
Ja, das mit den terminierten Einträgen (also solche, die für die Zukunft veröffentlicht wurden) müsste man mal allgemein lösen. Das selbe Problem haben ja auch Trackbacks.
Ich würde auch gerne mehr terminierte Artikel schreiben, scheue es aber aus den genannten Gründen bisher immer ein wenig..
Thorsten on :
Richtig ich bin es TWioE (=The-World-in-our-Eyes).
Jau wäre cool wenn man das in der Griff bekommen würde. Ich mache gerade terminierte Post, weil mein Team der depp doch echt manchmal auf den Blog schaut und er net mitbekommen muss das ich via work blogge ^^
rowi on :
auf meinem (leider noch) PHP4 Websppace funktioniert es leider nicht weil json_encode doppelt deklariert wird. Obwohl es mit require_once aufgerufen wird und laut Kommentar ja auch in PHP4 laufen sollte:
Fatal error: Cannot redeclare json_encode() (previously declared in [...]/plugins/serendipity_plugin_twitter/classes/JSON.php:808) in [...]/plugins/serendipity_plugin_twitter/serendipity_plugin_twitter.php on line 17
Grischa on :
Uh! Danke für den Hinweis! Ich muss zugeben, ich habe nur den json Code an sich, nicht aber die includes getestet.
Ich werde mir das mal ansehen und dann ein Update dafür veröffentlichen.
(Die gewünschten URL Kürzer 7ax.de und tr.im habe ich übrigens hier lokal auch bereits drin.)
taz on :
Hallo Grischa,
Bei mir der gleiche Fehler
.
Zusätzlich haut mir die Sache die Seitenleiste zusammen (http://www.gallien.org/serendipity/index.php) und im Backend wird bei einem Klick auf "Plugins verwalten" nur ein Teil der Liste der Seitenleisten Plugins (ungestylt) angezeigt. d.h. ich kann aus dem Backend das Plugin derzeit nicht löschen
.
Hilfe?
Grischa on :
Jau alles gefixt, denke ich. Ich schicke Dir mal eben die funktionierende Version rüber. Dein Blog läuft auch unter PHP4?
P.S.: Öhm.. Die EMail Adresse, die Du hier hinterlassen hast, ist eine funktionierende?
P.P.S.: Siehe nächster Artikel. Habe soeben eine Bugfix Version 1.01 veröffentlicht.
taz on :
Hallo Grischa,
Danke für die schnelle Reaktion. Ab wann taucht das Plugin denn in Spartacus auf?
PS: Ja die Adresse funktioniert und wird an die Hauptadresse weitergeleitet
Grischa on :
Wann Spartacus aktualisiert, weiß ich leider auch nicht..
Aber wie gesagt: Du kannst die Version aus meinem Blog nehmen, im Menü "FILES". Das ist exakt die, die dann auch in Spartacus kommen wird.
taz on :
Das Twitter Event Plugin funktioniert nun, aber das Timeline Plugin für die Seitenleiste lässt sich nicht installieren, da es als Bedingung PHP 5.1.0 hat.
Bleibt das so oder wird PHP4 unterstützt werden?
Grischa on :
Nanu? Mir wurde gemeldet, dass das Seitenleisten Plugin nun auch problemlos in einem PHP4 Blog funktioniert.
Hast Du alle Dateien aus dem ZIP File in das Plugin Verzeichnis kopiert? Das Timeline Plugin ist nämlich meines Wissens nicht von PHP 5.1.0 abhängig. Woran machst Du das fest bzw. welche Probleme hast Du nun noch mit dem Plugin?
taz on :
Ich habe den Ordner aus dem ZIP-File in den Plugins-Ordner kopiert und konnte dann problemlos das Event-Plugin installieren. Dann wollte ich das Seitenleistenplugin installieren und bekomme dort folgende Meldung:
http://www.bildercache.de/anzeige.html?dateiname=20090619-072616-793.jpg
Grischa on :
Au backe! [mit der flachen Hand vor die Stirn klatsch!]
Das ist mir ja noch gar nicht aufgefallen..
Ich ändere das mal und schicke Dir mal eine Testversion zu..
taz on :
War wohl zu auffällige
. Ich kenne das.
Warte schon gespannt und sage danke für den tollen Support!
Grischa on :
Naja.. Das fällt einem wahrscheinlich erst auf, wenn man es deshalb nicht installieren kann.. Ich habe bisher z.B. noch gar nicht gesehen, dass das bei den Plugins angezeigt wird..
Ich habe Dir schon vor einiger Zeit eine Mail an die von Dir angegebene EMail Adresse geschickt, an der eine neue Testversion dran hängt. Klappt die EMail doch nicht?
taz on :
Noch ist nichts da, aber GMAIL holt die Adresse nur 1x/ Stunde ab ...
Alternativ könntest du an die E-Mail schicken, die auf der verlinkten Webseite angegeben ist
taz on :
Mail ist angekommen und jetzt klappt alles wunderbar
Robert Lender on :
Ich habe die Anfrage in meinem Blog, ob auch identi.ca unterstützt wird (im Moment ja nur in der Seitenleiste).
Wäre das eine Option, die vielleicht in eine Version 1.x hineinkommen könnte/würde/sollte?
Grischa on :
Jau, darüber hatte ich auch schon nachgedacht..
Erstaunlicher Weise ist mein größtes Problem dabei: Wie lasse ich das konfigurieren, ohne dass man in einer riesigen Konfig stirbt?
Wenn der Benutzer nur identi.ca *oder* twitter benutzt, würde das noch gehen (einfacher Schalter oben und alles bleibt wie gehabt). Aber wahrscheinlich will man z.B. sowohl nach Twitter wie auch nach identi.ca ankündigen usw.
Eigentlich würde ich sowieso gerne mehrere Accounts angebbar machen wollen, auch für den Tweeter. Dann könnte man im Tweeter einfach mal schnell auf einen anderen Account (z.B. einen Testaccount) umschalten..
Aber kurz gesagt: Klar, ist machbar und vorstellbar.. Nur: Die Zeit dafür muss gefunden werden.
taz on :
Wenns schon um neue Funktionen geht: Ich hätte gerne die Möglichkeit alle Tweets eines Tages in einen Blogpost zu packen und somit immer um Mitternacht so eine Art Tageszusammenfassung zu bloggen.
Geht das ?
Grischa on :
Jep, das ist sogar schon auf der TODO Liste. Schau Dir noch mal den letzten Absatz dieses Artikels an..
Da ist mir allerdings noch nicht klar, was da alles rein soll.. Nur die eigenen Posts oder die Posts + Friends? Wahrscheinlich ersteres, oder? Sonst wirds schnell "urheberrechtlich bedenklich".
taz on :
Da ist mir wohl ein Absatz durchgerutscht.
Ich würde mir vorstellen, dass alle eigenen Tweets eines bestimmten Zeitraums gesammelt in einem Blogpost veröffentlicht werden z.B.
Tweets vom 24- Juni 2009
Tweet1
Tweet2
Tweet3
Twitter ist für mich so für kleine Zwischendurchnachrichten und eine kl. Zusammenfassung wäre nicht schlecht - es passiert etwas im Blog, auch wenn man mal keine Zeit hat.
Dirk Deimeke on :
Vielen Dank, dass Du Dich auch um identi.ca kümmerst!
Grischa on :
Gerne, geht schon gut voran. Die nächste Version wird echt schick..
taz on :
Hi,
Du kennst das zwar sicher schon, aber Twitter Tools für WP haben genau die von mir so begehrte Funktion. Vielleicht was zum Ansehen?
http://alexking.org/projects/wordpress/readme?project=twitter-tools
Grischa on :
Klasse, danke für den Link! Kennst Du eine Seite, wo man die Twitter Artikel dann Live sehen kann?
taz on :
Eine kurze Google-Suche hat das ausgespuckt:
http://fensterklauer.de/
d.h.
*) gut wäre Titel des Posts editierbar
*) Intervall stündlich/12-Stunden/24-Stunden/Woche
*) ob nach einer gewissen Zeit umgebrochen wird und die restlichen Tweets im erweiterten Eintrag stehen
*) Begrenzung der max. Tweets, die in einen solchen Post sollen
Andreas on :
Das Microbloggin-Event-Plugin (Keine Ahnung ob das das gleiche ist wie das hier beschriebene) hat meine Blog gecrasht. Das heisst: Jetzt erscheint nur noch "Internal Server Error". Super sache.
Dirk Deimeke on :
Da muss ich widersprechen. Das Plugin ist - neben meinem Blog - noch in vielen anderen Blogs aktiv. Das Plugin alleine ist sicherlich nicht dafür verantwortlich.
Andreas on :
Ich habe das Plugin wieder gelöscht (nicht das Event-Plugin war das Problem, sondern das Sidebar-Plugin welches auch gleich mit-installiert wird) und alles hat wieder funktioniert. Könnte natürlich auch sein, dass bei der Installation per Spartacus was falsch lief.
Aber ich habs nochmal versucht zu installieren, und wieder der gleiche Fehler.
Was man mir natürlich anlasten kann, ist dass ich immer noch Serendipity 1.3.1 habe. Aber trotzdem...
Grischa on :
Wie jetzt? Bei Dir ist es das Sidebar Plugin? Bisher wird mir immer gemeldet, dass wenn etwas crasht, dann das event plugin, nicht das sidebar plugin?
Bist Du sicher?
Andreas on :
Nein, das Problem liegt beim installieren. Der normale Plugin-Ordner hat dateien drin. Aber der event-ordner hat keine dateien drin.
Ich versuchs jetzt mal manuell. Wenn man das Plugin per Hand installiert, welche Dateien gehören dann in den plugin-ordner und welche in den event-ordner?
Grischa on :
Wo kommt denn da ein event Ordner bei Dir her? Der ist nicht Teil des Plugins. Sowohl das Event wie auch das Sidebar Plugin ist (aus historischen Gründen) im serendiptiy_plugin_twitter.
Andreas on :
"aus historischen Gründen"
alles klar.
Jetzt hats funktioniert. Ich habs einfach manuell raufgeladen. Das problem lag wohl beim automatischen installieren. --> Manuell installieren ist King.
Aber das Plugin ist super! Viele Konfigurationsmöglichkeiten!
Grischa on :
Das mit den "historischen Gründen" war kein Scherz.
Das Plugin startete als einfaches Seitenleisten Plugin, deshalb in diesem Verzeichnis. Das Event Plugin kam erst später dazu (als ich es übernahm). Da Spartacus pro Verzeichnis erneuert, konnte das Verzeichnis da jedoch nicht mehr umgenannt werden, da dann der Update nicht mehr funktioniert.
Es gibt meines Wissens noch weitere S9Y Plugins, bei denen das der Fall ist (wenn auch ziemlich wenige).
Und danke für das Lob, freut mich! Steckt inzwischen ganz schön viel Arbeit in dem Plugin..
cruiser on :
Hi Grischa,
erstmal vielen Dank für das Plugin.... geht inzwischen kaum noch ohne
Einen FeatureRequest hätte ich: ich würde mich gerne bei bit.ly authentifizieren (mit username und API Key) um dann bitly.pro nutzen zu können?
Any chance?
Schonmal herzlichen Danke.