Skip to content

Fix für Serenditpity bei Verwendung von Windows Life Writer

Gerade eben habe ich einen ausführlichen Testbericht über die Benutzung von Windows Life Writer mit Serendipity geschrieben.

Dabei gab es ein entscheidendes Problem: Nach der Veröffentlichung eines Eintrags meldet WLW einen Fehler:

Die vom Weblogserver erhaltene Antwort auf die Methode metaWeblog.editPost ist ungültig:

Invalid response document returned from XmlRpc server

Dadurch erkennt WLW den Artikel nicht als veröffentlicht, wodurch man ihn nicht nachträglich editieren kann.

Wie bereits vermutet ist das Problem leider ein Bug in dem XMLRPC Plugin von Serendipity ("Einträge via XML-RPC erstellen"):

Um dem Problem auf die Spur zu kommen, musste ich mir nur die Logdatei vom WLW anschauen. Wo man dieses findet, ist z.B. hier beschrieben.

Darin wurde deutlich, dass das XMLRPC Plugin doppelte HTTP Header schickt. Dies produziert durch entsprechende PHP Warnungen eine zerstörte XML Antwort.

Nach Betrachten des Codes ist mir schleierhaft, warum das nicht viel größere Probleme produziert hat, denn dies passiert eigentlich immer, wenn das Plugin antwortet. Offenbar wird die Antwort beim eigentlichen Veröffentlichen und ähnlichem vom WLW ignoriert, erst beim Test, ob der Artikel erfolgreich veröffentlicht wurde und natürlich beim Synchronisieren des Artikels mit der lokalen Version, wird die Antwort relevant.

Allerdings hat WLW auch erfolgreich meine Kategorien ausgelesen, dabei müsste eigentlich auch der kaputte XML Code vom Plugin produziert worden sein.

Wie auch immer, das Problems lässt sich durch einen einfachen Patch im mitgelieferten PEAR Paket beheben, indem man die PHP Warnungen beim verschicken des Headers unterdrückt.

Dazu muss man nur die Datei plugins/serendipity_event_xmlrpc/PEAR/XML/RPC/Server.php ändern:

Folgende Stelle muss gesucht werden:

foreach($this->server_headers AS $header) { 
    header($header); 
}

Hier unterdrücken wir die Warnung wie folgt:

foreach($this->server_headers AS $header) { 
    @header($header); 
}

Wenn nun vorher schon der entsprechende Header erzeugt wurde, dann gibt es hier beim 2. Mal keine PHP Warnmeldung und die XML Antwort bleibt korrekt.

Danach kommt der WLW wunderbar mit Serendipity klar: Nachdem ich einen Testartikel in das so gepatchte Serendipity schickte, verschwand die Fehlermeldung von WLW.

Nun erkennt WLW den Artikel als im Blog veröffentlicht und kann ihn nach Belieben und in beide Richtungen synchronisieren. Änderungen am Artikel, die im Blog erledigt wurden, werden wieder eingelesen, und wenn man umgekehrt Änderungen am Artikel im WLW vornimmt und erneut veröffentlicht, wird nun der Artikel erneuert anstatt einen neuen Artikel zu erstellen.

Ich diskutiere dies auch gerade im Serendipity Forum, vielleicht hat ja noch einer eine Idee, warum überhaupt 2 Header geschickt werden.

Ich sende das geänderte Plugin in das CVS, so dass es bald bei euch in Spartacus auftauchen sollte.

UPDATE:

Wenn man im WLW Umlaute eingibt, so konvertiert der diese in HTML Entities. Dies tut er auch im Titel eines Artikels, was in Serendipity allerdings stört, da dieses Titel als normale Texte und nicht als HTML abspeichert. Somit sah man einen Titel wie z.B. "Überraschung" in Serendipity als "Überraschung". Ich habe das XML-RPC Plugin so angepasst, dass dieses solche Entities wieder in normale Buchstaben zurück wandelt, falls gefunden.

Außerdem speichert WFW Artikel normaler Weise so ab, dass das Blog entscheiden soll, ob Kommentare für einem Artikel erlaubt sein sollen. Im Plugin ist der Default Fall, dass Kommentare nicht erlaubt sind. Dies kann man nun konfigurieren, indem man im Blogverzeichnis die Datei serendipity_config_local.inc.php mit 2 weiteren Einträgen versieht:

$serendipity['xml_rpc_default_allow_comments'] = true; 
$serendipity['xml_rpc_default_moderate_comments'] = false; 

Das stellt ein, dass normaler Weise Kommentare erlaubt sind und auch nicht erst moderiert werden müssen. Somit ist die Verbindung zwischen WFW und Serendipity wohl nun rund! Gefällt mir! :-D

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Noch keine Kommentare

Kommentar schreiben

Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Dieses Blog erlaubt Dir, Audio Kommentare über audioboo.fm hinzuzufügen. Erstelle einen neuen Boo und gib hier den Link auf die Seite Deines Boos ein.
record
Wenn Du Deinen Twitter Namen eingibst wird Deine Timeline in Deinem Kommentar verlinkt.
Bewirb einen Deiner letzten Artikel
Dieses Blog erlaubt Dir mit Deinem Kommentar einen Deiner letzten Artikel zu bewerben. Bitte gib Deine Blog URL als Homepage ein, dann wird eine Auswahl erscheinen, in der Du einen Artikel auswählen kannst. (Javascript erforderlich)
(Bedingung: 1 Kommentare geschrieben)
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
tweetbackcheck