Blogmigration 2024
Worum geht es?
Mein Weblog existiert seit 2006. Damals habe ich Blogfunktionalitäten auf einem TWiki nachgebaut. Seither ist dieser Weblog auf über 1600 Postings angewachsen, die Blog-Implementation ist aber sehr rudimentär und sowohl für Besucher:innen als auch für mich nicht sehr nutzungsfreundlich.
Neu soll das Weblog auf einem neuen Wiki-Server laufen mit der Blog-Applikation von Foswiki.
Hilfreiche Links
Was war zu tun?
- Migration der bisherigen Daten von Foswiki 1.1 auf Foswiki 2.0 (inkl. Encodierung von iso-8859-1 auf UTF8.
- Migration der wikispezifischen Elemente in den einzelnen TOPICs:
- %STARTBLOG% und %STOPBLOG% weg
- Kategoriensystem aktualisieren
- doebeli durch BeatDoebeli ersetzen
Der erste Punkt scheint offenbar bei der ersten Migration auf den neuen Wikiserver nicht vollständig geklappt zu haben. Somit müssten die Daten nochmals auf dem alten Server installiert und dort mit
CharsetConverterContrib auf UTF-8 konvertiert werden.
Für den
zweiten Punkt habe ich mir ein VBA-Script geschrieben, das die notwendigen Konvertierungen vornimmt.
Was ist noch zu tun?
Must have (Show-Stopper)
- RSS-Feed nach Publikationsdatum (ist derzeit nach letzter Änderung)
- Kommentarsystem funktioniert
Nice to have
- Anpassung der rechten Spalte
- Sortierfunktion der Postings im Backend
- Menuleiste auf der Startseite
1. Migration auf UTF8
- Ich habe einen Snapshot des Weblogs vom 23.02.24
- Spiele den wieder auf das alte Wiki (http://wiki.doebe.li/Blub)
- Die Versionsverwaltung funktioniert in diesem Wiki noch (getestet am Beitrag http://wiki.doebe.li/Blub/AbendRot
- Das Umwandeln auf UTF8 scheint auch zu funktionieren mit
perl convert_charset.pl -web=Blub
- Das Problem, dass ein Editieren auf dem neuen Wiki die Versionsgeschichte zerschossen hat, liess sich mit dem Umstellen auf RcsWrap beheben (statt RcsLite)
2. Migration auf die Blog-App von Foswiki
Sub MigrateBlog()
Dim fso As Object
Dim folderPath As String
Dim file As Object
Dim folder As Object
Dim fileContent As String
Dim modificationDate As String
Dim titel As String
Dim linuxdatum As Long
Dim kategorien As String
' Verzeichnis mit den TXT-Dateien angeben
folderPath = "d:\blogpostings\" ' Hier den Pfad zu deinem Verzeichnis anpassen
' FileSystemObject erstellen
Set fso = CreateObject("Scripting.FileSystemObject")
' Überprüfen, ob das Verzeichnis existiert
If fso.FolderExists(folderPath) Then
' Verzeichnis-Objekt abrufen
Set folder = fso.GetFolder(folderPath)
' Jede TXT-Datei im Verzeichnis durchlaufen
For Each file In folder.Files
kategorien = ""
If LCase(fso.GetExtensionName(file.Name)) = "txt" Then
' Änderungsdatum der Datei abrufen
modificationDate = file.DateLastModified
linuxdatum = VBAtoUnixTimestamp(CDate(modificationDate))
' Dateiinhalt lesen
fileContent = readUTF8absolut(folderPath & file.Name)
titel = extract_string(fileContent, "---+ ", Chr$(10), 1)
' Unveränderte Metazeilen
addLine fileContent, Chr$(10)
addLine fileContent, "%META:FORM{name=""Applications/BlogApp.BlogEntry""}%"
addLine fileContent, "%META:FIELD{name=""TopicType"" title=""TopicType"" value=""BlogEntry, SeoTopic, ClassifiedTopic, CategorizedTopic, TaggedTopic, WikiTopic""}%"
addLine fileContent, "%META:FIELD{name=""Summary"" title=""Summary"" value=""""}%"
addLine fileContent, "%META:FIELD{name=""Tag"" title=""Tag"" value=""""}%"
addLine fileContent, "%META:FIELD{name=""Author"" title=""Author"" value=""Beat Döbeli Honegger""}%"
addLine fileContent, "%META:FIELD{name=""State"" title=""State"" value=""published""}%"
addLine fileContent, "%META:FIELD{name=""UnpublishDate"" title=""Unpublish Date"" value=""""}%"
addLine fileContent, "%META:FIELD{name=""Sticky"" title=""Sticky"" value=""""}%"
addLine fileContent, "%META:FIELD{name=""HTMLTitle"" title=""HTML Title"" value=""""}%"
addLine fileContent, "%META:FIELD{name=""MetaDescription"" title=""Meta Description"" value=""""}%"
addLine fileContent, "%META:FIELD{name=""MetaKeywords"" title=""Meta Keywords"" value=""""}%"
'Anzupassende Metazeilen
addLine fileContent, "%META:FIELD{name=""TopicTitle"" title=""<nop>TopicTitle"" value=""" & titel & """}%"
addLine fileContent, "%META:FIELD{name=""PublishDate"" origvalue=""" & Format(modificationDate, "dd mmm yyyy") & """ title=""Publish Date"" value=""" & linuxdatum & """}%"
kategorie fileContent, kategorien, "Annoyance"
kategorie fileContent, kategorien, "Biblionetz"
kategorie fileContent, kategorien, "Elektromobil"
kategorie fileContent, kategorien, "Idee"
kategorie fileContent, kategorien, "InformationArchitecture"
kategorie fileContent, kategorien, "iPhone"
kategorie fileContent, kategorien, "Medienbericht"
kategorie fileContent, kategorien, "Medienbildung"
kategorie fileContent, kategorien, "OLPC"
kategorie fileContent, kategorien, "PHSolothurn"
kategorie fileContent, kategorien, "PHSZ"
kategorie fileContent, kategorien, "SchulICT"
kategorie fileContent, kategorien, "Scratch"
kategorie fileContent, kategorien, "Software"
kategorie fileContent, kategorien, "TabletPC"
kategorie fileContent, kategorien, "Veranstaltung"
kategorie fileContent, kategorien, "Visualisierung"
kategorie fileContent, kategorien, "Video"
kategorie fileContent, kategorien, "Wiki"
kategorie fileContent, kategorien, "Wissenschaft"
kategorie fileContent, kategorien, "Informatik"
kategorie fileContent, kategorien, "Gadget"
kategorie fileContent, kategorien, "Geek"
kategorie fileContent, kategorien, "CT"
kategorie fileContent, kategorien, "DigitalImmigrants"
kategorie fileContent, kategorien, "DPM"
kategorie fileContent, kategorien, "GeoLocation"
kategorie fileContent, kategorien, "PHZ"
kategorie fileContent, kategorien, "Kid"
kategorie fileContent, kategorien, "GeschaeftsModell"
kategorie fileContent, kategorien, "HandheldInSchool"
kategorie fileContent, kategorien, "iLearnIT"
kategorie fileContent, kategorien, "RechtUndInformatik"
kategorie fileContent, kategorien, "SecondLife"
kategorie fileContent, kategorien, "Wertequadrat"
addLine fileContent, "%META:FIELD{name=""Category"" title=""Category"" value=""" & kategorien & """}%"
fileContent = Replace(fileContent, "%STARTBLOG%" & Chr$(10), "")
fileContent = Replace(fileContent, "%STOPBLOG%" & Chr$(10), "")
fileContent = Replace(fileContent, "---+ " & titel & Chr$(10), "")
fileContent = Replace(fileContent, "Kategorien:", "")
fileContent = Replace(fileContent, "IsaBlog", "")
fileContent = Replace(fileContent, Chr$(10) & Chr$(10) & Chr$(10), Chr$(10))
fileContent = Replace(fileContent, Chr$(10) & " ,", Chr$(10))
fileContent = Replace(fileContent, Chr$(10) & " , ,", Chr$(10))
' Debug.Print fileContent
schreibeAbsolut "d:\blogpostings_migriert\" & file.Name, fileContent
End If
Next file
Else
MsgBox "Das angegebene Verzeichnis existiert nicht: " & folderPath, vbExclamation
End If
' Speicher freigeben
Set folder = Nothing
Set fso = Nothing
End Sub
Sub kategorie(content As String, categories As String, Category As String)
Dim oldCategory As String
Dim newCategory As String
oldCategory = "Isa" & Category
newCategory = Category & "Category"
If InStr(content, oldCategory) > 0 Then
content = Replace(content, oldCategory, "")
If categories = "" Then
content = Replace(content, "TOPICPARENT{name=""WebHome""}", "TOPICPARENT{name=""" & newCategory & """}")
Else
add categories, ", "
End If
add categories, newCategory
End If
End Sub
Function VBAtoUnixTimestamp(vbaDate As Date) As Double
' Unix-Startdatum: 1. Januar 1970
Dim unixStart As Date
unixStart = #1/1/1970#
' Berechne den Unterschied in Sekunden
VBAtoUnixTimestamp = (vbaDate - unixStart) * 86400
End Function
Was muss noch angepasst werden?