WordPress in Markdown exportieren

Damit ich meine Nerdblog-Posts auch von Umgebungen aus zugreifen kann, wo ich gerade keinen Browser oder kein Internet habe, exportiere ich sie mir in lokale markdown-Files (Wesentliche Infos von hier):

  • Exportieren von WordPress (Web-Oberfläche) aus: Unter “Werkzeuge” -> “Daten exportieren” -> “Alle Inhalte”.
  • Konvertieren mit exitwp:
    git clone https://github.com/thomasf/exitwp
    cd exitwp
    
    cp ../nerdblog.wordpress.2016-04-09.xml wordpress-xml/
    
    # install dependencies
    pip install --upgrade -r pip_requirements.txt
    
    # Run cmd with path to xml (optional if you have only one file)
    ./exitwp.py wordpress-xml/nerdblog.wordpress.2016-04-09.xml
    
  • Damit die Markdown-Files auch den Original-Link ins Blog haben, habe ich einen kleinen Patch zu exitwp gebaut. Bis der Pull request remergt ist, verwende ich meinen exitwp-fork.

  • Im Unterverzeichnis build/jekyll/nerdblog.steinkopf.net/_posts liegen jetzt alle Posts im Markdown-Format mit allen wichtigen Meta-Info inkl. Kategorien und Tags.
  • Ich schiebe mir noch alle meine “manuell erstellten” Posts (Kategorie “Allgemein”) in ein eigenes Verzeichnis:

    mkdir build/jekyll/nerdblog.steinkopf.net/Allgemein
    grep -l '^- Allgemein$' build/jekyll/nerdblog.steinkopf.net/_posts/* \
        | xargs mv --target-directory build/jekyll/nerdblog.steinkopf.net/Allgemein
    
  • Das Ganze mache ich jetzt automatisch per Skript als Cronjob, damit ich immer eine aktuelle Fassung meiner Posts im Dateisystem liegen habe (Ideen von hier). Das Skript habe ich der Übersichtlichkeit halbe ganz unten angehängt.

  • Wie man sieht checke ich mit das auch gleich noch in ein git-Repo. Dort kann ich dann ebenfalls in den Artikeln surfen, suchen und auch wieder per Link zum WordPress-Artikel springen. Ich find’s geil 🙂

Anhang

Hier das Export-Skript nerdblog-wp-export2md.sh, das im Cron läuft:

    #!/bin/bash
    #
    # Export nerdblog to md
    #
    # DSTK 2016-04

    USER=uuu
    PASSWD=pwpwp
    URL=https://nerdblog.steinkopf.net/

    destdir=~/nerdblog
    exitwpdir=~/exitwp

    exportfile=$exitwpdir/wordpress-xml/nerdblog.wp.xml

    declare -A export_regexps
    # wird in umgekehrter Reihenfolge abgearbeitet:
    export_regexps["News"]="^- News$"
    export_regexps["Twitter-Fav"]="^- Twitter-Fav$"
    export_regexps["Allgemein"]="^- Allgemein$"


    # Vorbereitung

    # see https://github.com/thomasf/exitwp.git
    git -C "$exitwpdir" pull -q


    # Exportieren

    LOGIN_COOKIE=$( \
      curl -s \
      -H 'Cookie: wordpress_test_cookie=WP+Cookie+check' \
      $URL/wp-login.php?wpe-login=$USER \
      -d "log=$USER&pwd=$PASSWD&wp-submit=Log+In&testcookie=1" \
      -D -)

    if [[ $? -ne 0 ]]; then
      echo "could not get initial login cookie. check credentials"
      exit 1
    fi
    curl -sb \
      <(echo "$LOGIN_COOKIE") \
      "$URL/wp-admin/export.php?download=true&content=all\
      &post_author=\0&post_start_date=0&post_end_date=0&\
      post_status=0&page_author=0&page_start_date=0&page_end_date=0&\
      page_status=0&submit=Download+Export+File" \
      > $exportfile


    # Nach Markdown konvertieren:

    ( cd $exitwpdir && $exitwpdir/exitwp.py $exportfile >/dev/null )


    # Kategorien extrahieren:

    mkdir -p "$destdir"

    for name in "${!export_regexps[@]}"; do
        regexp=${export_regexps[$name]}

        mkdir -p "$destdir/$name"

        grep -l "$regexp" $exitwpdir/build/jekyll/nerdblog.steinkopf.net/_posts/* \
            | xargs --no-run-if-empt mv --target-directory "$destdir/$name"
    done


    # in git einchecken

    git -C "$destdir" add .
    git -C "$destdir" commit -q -m "latest exported changes from nerdblog.steinkopf.net" >/dev/null
    git -C "$destdir" push -q >/dev/null

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.