Technorati hat Probleme beim Blog Eintragen – Timeout

Ich bin ja nun vor einer Weile mit meinem Blog auf eine neue URL umgezogen. Aus gordon-zube.de ist gordonzube.com geworden.

Allen die sich ein wenig mit dem Internet und Webseiten auskennen dürfte bekannt sein das die Backlinkstruktur für eine Webseite sehr wichtig ist. Und wenn eine Webseite umzieht dann sollten auch alle Backlinks auf die neue Webseite verweisen. Manchmal kann man das selbst ändern und manchmal muss man die anderen Webmaster anschreiben und um eine Änderung bitten.

Heute bin ich dann endlich mal dazu gekommen bei Technorati (einem sehr wichtigen Backlink) vorbeizuschauen und wollte meine neue Internetadresse angeben. Den alten Eintrag einfach ändern geht leider nicht. Jedenfalls nicht die URL. Also musste ich einen neuen Eintrag anlegen, ist ja nicht das Thema. … Dachte ich.

Denn nachdem ich die Eingabemaske fein säuberlich ausgefüllt hatte und auf abschicken klickte… habe ich gewartet … und gewartet … und gewartet. Und dann… “Fehler: Verbindung unterbrochen”. Auch Timeout genannt.
… Na kann ja mal passieren. Einfach auf “Nochmals versuchen” geklickt und wieder gewartet. Wieder Timeout. … Was ist hier los bei Technorati???

Google hat mir dann eröffnet das dieser Zustand wohl schon seid 2009 anhält. Zumindest gibt es schon 2009 User denen die Technorati Probleme aufgefallen sind.

Wie kann sowas angehen? Ich meine Technorati ist ja nicht irgend eine Backlinkschleuder. Es ist (oder war einmal?) eines der Portale dessen Einträge bei Google und andere Webseiten, hoch angesehen waren. Ein Eintrag bei Technorati ist (war) immer so viel wert wie … keine Ahnung. Viel mehr als ein dusseliger Webkatalog Eintrag.

Aber die Zeiten scheinen wohl vorbei zu sein. Wenn nicht einmal mehr das Eintragen funktioniert. Auch die Claim Validierung soll Schwierigkeiten haben… wenn ich mal bis dahin kommen würde. Hab jetzt bestimmt schon 25 mal auf „Nochmals versuchen“ geklickt. Zum brechen. :-(

Bug in WordPress XMLRPC wp.uploadfile – Dateiupload funktioniert nicht!

Gerade habe ich einen Bug in der XMLRPC-Schnittstelle von WordPress gefunden. Anscheinen nutzt diese Funktion aber wohl kaum jemand, wenn es noch keinem Aufgefallen ist. Ich habe aber genau diese Klasse kopiert und in einem anderen Projekt verwendet, um es mir mal einfacher zu machen. :-)

Der Bug befindet sich in der wp.uploadFile aka mw_newMediaObject Funktion. Mit dieser Funktion können Dateien über die XMLRPC-Schnittstelle in den Blog geladen werden.
Das Problem, es funktioniert nur nicht wirklich. Die Daten müssen per base64_encode codiert werden. Hab ich auch brav gemacht, nur werden sie im Blog nicht wieder decodiert und damit genau so gespeichert wie sie übertragen werden. Das kann jedoch nicht funktionieren.

Also habe ich mich auf die Suche gemacht und den Fehler gefunden. Die XMLRPC Klasse von WordPress (class-IXR.php) erkennt auf der Client-Seite Base64-Codierte Strings nicht. Ich habe im Netz auch keine Möglichkeit gefunden wie man prüfen kann ob ein String im Base64-Format vorliegt. Daher habe ich zu einer anderen Möglichkeit gegriffen den Bug zu fixen.

Wir gehen mal wieder in den Code. Achtung: Wenn diese Änderung im Blog selbst vorgenommen wird, wird es beim nächsten Update überschrieben!
Als erstes nehmen wir uns ca. Zeile 35 vor. Hier sollte folgendes stehen:

foreach ($this->data as $key => $value) {
     $this->data[$key] = new IXR_Value($value);
}

Das ändern wir in:

foreach ($this->data as $key => $value) {
     if($key == "bits") $this->data[$key] = new IXR_Value($value, "base64");
     else $this->data[$key] = new IXR_Value($value);
}

Soweit ich gesehen habe gibt es den “bits” Parameter nur ein mal in der Schnittstelle. Und zwar genau dort wo der Base64-String unserer Datei drin ist. Also sagen wir “Wenn Parameter ‚bits’ ist, dann ist es Base64. Und schon schalten wir die automatische – und falsche – Erkennung des Variablen-Types aus und sagen gleich das es Base64 ist.

Dann gehen wir noch zu einem anderen Bug. Der ist ca. in Zeile 114. Die Originalzeile heißt:

case 'date':
     case 'base64':
          return $this->data->getXml();
          break;

Das gibt einen Fehler. Die Funktion getXml() gibt es unter $this->data nicht und wäre auch Schwachsinn.  Die Zeilen müssen wie folgt aussehen:

case 'date':
          return $this->data->getXml();
          break;
     case 'base64':
          return '<base64>'.$this->data.'</base64>';
          break;

So, jetzt sollte es funktionieren.

Wie gesagt, wenn ihr die Klasse kopiert habt und in einem anderen Projekt verwendet, dann ist es ok. Wenn ihr es im WordPress selbst ändert dann wird es beim nächsten Update überschrieben.

Gegen Rassismus

Ich habe das gerade auf Facebook gefunden. Es ist wahr und korrekt… so, das richtige für meinen Blog :-)

Dein Auto ist Deutsch.
Dein Vodka ist Russisch.
Deine Pizza ist Italienisch.
Dein Kebab ist Türkisch.
Deine Demokratie ist Griechisch.
Dein Kaffee ist Brasilianisch.
Deine Filme sind Amerikanisch.
Dein Tea ist Tamilisch.
Dein Shirt ist Indisch.
Dein Öl ist Saudi-Arabisch.
Deine Elektroartikel sind Chinesisch.
Deine Nummern Arabisch und deine Buchstaben Lateinisch.

Und Du beschwerst dich das dein Nachbar ein Einwanderer ist?
Reiß dich zusammen!
(Kopiere das wenn Du gegen Rassismus bist)

Meine Ansicht:
Ich bin Deutscher.
Ich lebe in Zypern (im Moment).
Meine Tauchpartnerin ist aus der Ukraine, mein Tauchlehrer aus Großbritannien. Mein beliebtester Tauchplatz ist im Türkischen Teil, mein Zuhause im Griechischen Teil vom Zypern. Meine Freunde kommen aus Polen, Ukraine, Großbritannien, Irland, Australien, Deutschland, Philippinen, USA, Ägypten und anderen Ländern. Jeder hat seine eigene Religion, seinen eigenen Standpunkt. Wir sprechen darüber, aber streiten nie darüber.
Und ich denke der Rest ist wie oben beschrieben… Auto aus Japan, Elektroartikel aus China oder Hong Kong, Shirt… vielleicht Deutsch :-) etc.