You are here: Beat » BlogMigration2024

Blogmigration 2024

06 Oct 2024 - 07:13 | Version 6 |

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?

  1. Migration der bisherigen Daten von Foswiki 1.1 auf Foswiki 2.0 (inkl. Encodierung von iso-8859-1 auf UTF8.
  2. 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?

This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Seite genereriert um 22 Dec 2024 - 09:58
Ideas, requests, problems regarding wiki.doebe.li? Send feedback