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