MovableType Daten nach Django importieren
Ich habe hier kräftig aufgeräumt und unter anderem mein Weblog www.freakydog.de in diese Seite importiert. mahner.org wurde schon seit über 3 Monaten nicht mehr aktualisiert was in erster Linie daran lag, dass ich nicht genug Content für 2 Blogs habe.
Übrigens lebt www.freakydog.de weiter, die Seite habe ich in Windeseile nach Django portiert und nun wird dieses Weblog auf beiden Seiten angezeigt, beides mit der selben Django-Instanz.
Zurück zum Import: Mein altes Blog lief unter MovableType (MT) und ich zeige euch nun grob, wie ich die Daten importiert habe. Das ganze funktioniert natürlich nicht mit jedem Model. Es soll aber einen Denkanstoß geben, wie man die Daten – mögichst automatisch – aus MT exportiert und in eine Django-Tabelle importiert.
Die MovableType Datenbank-Struktur und die meines Weblog-Models sind sich ähnlich, so dass ich alle Daten einfach von Tabelle zu Tabelle kopiert habe. MT speichert die Kategorie-Zuweisung in einer extra Tabelle, daher mussten insgesamt 2 Tabellen abgefragt werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | INSERT INTO weblog_entry( id, comments_enabled, slug, category_id, is_public, body, body_extended, title, date_published, date_modified ) SELECT entry_id, entry_allow_comments, entry_basename, placement_category_id, entry_status, entry_text, entry_text_more, entry_title, entry_created_on, entry_modified_on FROM `mt_entry` LEFT JOIN mt_placement ON mt_entry.entry_id = mt_placement.placement_entry_id WHERE placement_blog_id = 6 |
Wer nach dem Import Probleme mit den Sonderzeichen hat muss es ungefähr so angehen.
- Die mt_entries-Tabelle exportieren
- Mit einem Texteditor mit UTF-8 abspeichern
- Die Tabelle wieder importieren (überschreiben)
MT scheint nämlich – obwohl es die Daten in UTF-8 ausgibt – die Zeichen in Latin1 in der Datenbank zu speichern.
Finetunung
MT setzt für "offene" Artikel den Status auf int(2), in Django ist der boolsche Wert aber 1, somit muss diese Spalte auch aktualisiert werden.
1 2 3 | UPDATE weblog_entry SET is_public = 1 WHERE is_public = 2 |
Nächster Schritt: MT trennt die Wörter im Basename (Slug) mit Tiefstrichen, der Django-Standard ist aber ein Bindestrich, auch optisch finde ich den Bindestrich schöner.
1 2 | UPDATE weblog_entry SET slug = replace(slug, '_', '-') |
Zu guter Letzt habe ich ich auch alle Daten von ehemals freakydog.de/images/ in mein Django-Static-Verzeichnis kopiert. Alle Dateipfade in den Artikeln müssen also auch angepasst werden:
1 2 3 | UPDATE weblog_entry SET body = replace(body, 'http://www.freakydog.de/images/', 'http://static.mahner.org/assets/weblog/'), body_extended = replace(body_extended, 'http://www.freakydog.de/images/', 'http://static.mahner.org/assets/weblog/') |
Ähnlich wie im ersten Punkt verhält es sich auch mit den Kommentaren, ein Import in z.B. die Freecomments-Tabelle ist aber genauso problemlos.
Geschrieben am: 17. Juli 2007 um 00:03 Uhr, Abgelegt in Django & Python
Kommentare zu diesem Artikel (0):
Kommentar schreiben