Archiv des Autors: admin

Artikel von Beta-Blogger nach WordPress umziehen

So, ich habe es geschafft, alle Artikel des alten Blog-Systems Beta-Blogger zu exportieren und diese in WordPress wieder zu importieren. Da ich keine direkte Übertragungsmöglichkeit gefunden habe, habe ich den Weg über CSV gewählt. Es gibt ein halbwegs brauchbares CSV-Import-Plugin und die Artikel aus dem alten Blog ließen sich mit dem folgenden PHP-Script als CSV exportieren:

<?php
require 'bb_core.php';

/* see http://de.php.net/manual/de/function.htmlentities.php#90111 */
function htmlButTags($str) {
  // Take all the html entities
  $caracteres = get_html_translation_table(HTML_ENTITIES);
  // Find out the "tags" entities
  $remover = get_html_translation_table(HTML_SPECIALCHARS);
  // Spit out the tags entities from the original table
  $caracteres = array_diff($caracteres, $remover);
  // Translate the string....
  $str = strtr($str, $caracteres);
  // And that's it!
  // oo now amps
  $str = preg_replace("/&(?![A-Za-z]{0,4}w{2,3};|#[0-9]{2,3};)/","&amp;" , $str);
  return $str;
}

$entries = $blog->get_items('entry', NULL, 1000) or print $lang->no_entries;

print("wp_title|wp_post_date|wp_category|wp_content|field1|field2|field3
");
foreach ($entries as $entry) {
  // Tags: Leerzeichen in "" ersetzen und " entfernen
  $tags =  preg_replace('/"(w+) (w+)"/', '$1=$2', $entry->tags);
  // Tags durch Kommata trennen
  $tags = str_replace(" ", ", ", $tags);
  // oben ersetzte Leerzeichen zurück wandeln
  $tags = str_replace("=", " ", $tags);
  $title = htmlButTags($entry->title);
  $date = strftime("%Y-%m-%d %T", $entry->date);
  $body = preg_replace('/
/', '&#x000A', htmlButTags($entry->body));
  $body = preg_replace('/src=["']media2/', 'src="/wp/wp-content/uploads/2009/09', $body);
  // Pipes müssen escaped werden
  $body = preg_replace('/|/', '|', $body);
  $body2 = preg_replace('/
/', '
', htmlspecialchars($entry->body));
  $teaser = htmlButTags($entry->topic);
  $category = htmlspecialchars($entry->category);

  print("$title|$date|$category|$body|$tags|$teaser|
");

}

?>

Damit die Leerzeichen, die beim Export mit ‚&#x000A‘ escaped wurden, beim Import entsprechend wieder hergestellt werden, musste ich das CSV-Import-Plugin noch geringfügig anpassen und eine Zeile einfügen:

$post_content = str_replace('&#x000A', "
", $post_content);

(Das komplette, angepasste Plugin gibt es hier.)

Leider kann das Import-Plugin keine Tags importieren. Ich habe diese daher im ersten Benutzerfeld abgelegt, so dass sie dann beim Editieren des Artikels per Cut & Paste in das Tag-Feld übertragen werden können. Das ist sicherlich nicht der Hit und bedeutet, dass man jeden Artikel anfassen muss. Aber bei 34 Artikeln ist das noch machbar.

Nur einen bestimmten Zeitabschnitt einer Logdateien ausgeben

In einer Logdatei lässt sich ja prima mit grep nach einer Zeichenkette suchen. Was aber, wenn man nur einen bestimmten Zeitraum der Logdatei durchsuchen möchte?

Nun, da hilft uns mal wieder das Universalwerkzeug Perl mit seinem sog. Bereichsoperator (..). Wird dieser nämlich im skalaren Kontext verwendet, liefert er uns solange falsch, solange der linke Ausdruck falsch ist. Sobald der linke Ausdruck (einmal) wahr wird, liefert der Bereichsoperator solange wahr zurück, bis der rechte Ausdruck wahr wird. Er ist also so etwas wie ein bistabiler Schalter mit einer Einschalt- und einer Ausschaltbedingung (der Elektroniker nennt so etwas ein Flip-Flop). Genug der Theorie, hier die praktische Anwendung für unseren Fall:

perl -n -e 'print $_ if /^Aug 18/ .. /^Aug 31/' /var/log/messages

Dies liefert uns alle Einträge vom 18. August bis zum 31. August (oder bis zum Ende der Datei, wenn heute erst der 28. August ist).

Mit einem nachgeschalteten grep kann man nun prima in diesem Abschnitt suchen. Hier ein Beispiel, welches alle anfragende Rechner für den o.g. Zeitraum aus der Logdatei des DNS-Servers ermittelt:

perl -n -e 'print $_ if /^Aug 18/ .. /^Aug 31/' named.queries | sed -n 's/^.* client ([^#]*)#.*$/1/p' | sort | uniq

Umstellung auf WordPress

Nachdem die Seite nun endlich auf eine eigene Domain umgezogen ist, werde ich das Blog nun auch nach WordPress überführen.

Das kann aber noch was dauern, weil ich nicht weiß, wie ich die Artikel am Besten aus dem alten Blog raus und ins neue rein bekommen. Zur Not von Hand — es sind ja nur ca. 30 Artikel.