Переезд на Hugo. Часть 1
Jan 30, 2016 · 3 minute read · CommentsНачну с небольшой предыстории. Примерно год назад я переехал на линукс и, раз уж я пустился во все тяжкие, давай думаю перееду на какой-нибудь другой блог, а то Tumblr это как-то слишком просто. Где гики ведут блог? Немного поисков, и вот он ответ. Статические генераторы сайтов. Пишем посты в текстовых файлах формата markdown, затем с помощью генератора преобразуем их в html странички - вот и готов блог. Сказано-сделано, развернул Octopress, сконвертировал блог, вроде можно пользоваться. Но вот какая проблема: нормальной миграции так и не получилось, поскольку официальный скрипт нормально в текстовый формат не смог сконвертировать, а только в html. В результате у меня были бы только новые посты “текстом”, а старые - нет. Поэтому идею я забросил.
С тех пор я съехал с линукса - мне там не нравились все шрифты, даже кастомные. Но это уже другой разговор. Но идея про переезд не забыта. Зима, на улице -20 и как-то скучновато. А не попробовать ли мне это еще раз сделать, может на этот раз получиться? Заодно чему-нибудь новому научусь, а то все как-то слишком просто. Нажимай на кнопки, да выбирай тип постов. После непродолжительных поисков нахожу Hugo, который во-первых на Go, что значит один exe файл, а не инсталляция Ruby и куча еще к нему, как в случае с Jekyll и Octopress. Во-вторых, у него есть возможность “на лету” перестраивать блог. Написал пост, сохранил, увидел результат на локальной машине. Быстро и просто, как раз то, что надо.
Теперь другой момент, надо как-то сконвертировать посты из Tumblr в markdown. И вот тут начались пляски с бубном. Про официальный скрипт для Jekyll я уже писал, попробовал парочку Python скриптов, что есть на github, и тоже без результатов. Но я не сдаюсь, путем долгих мучений и экспериментов пришлось сделать следующее - регистрируюсь на wordpress.com, затем через админку связываю с моим блогом на Tumblr, а там уже экспортирую получившиеся посты в xml. А уже их конвертируем.
Казалось бы, вот и все, но нет. В результате конвертации получил названия файлов, вида:
2016-01-26-d0b5d0b4d18b... .markdown
Не очень красиво, надо переименовывать. Пусть названия файлов берутся из поля Title - заголовка статьи. Прошу заметить, это далеко не самый простой способ, но см. выше, на улице зима, холодно и скучно. Пишу маленький скрипт на bash (под рукой есть машина с Ubuntu), заголовок статьи транслитерируется с помощью скрипта, найденного на хабре, только пришлось добавить вывод в stdout.
if __name__ == "__main__":
for line in sys.stdin:
sys.stdout.write(transliterate(line))
Итоговый скрипт (хотел сделать в одну строку, но, к сожалению, не осилил):
#!/bin/bash
for fn in *.markdown
do
fn2=$( grep -H 'title:' $fn |sed -e 's/-[^0-9].*.markdown:title: /-/' | python trans.py | sed -e 's/$/.markdown/' | sed -e 's/[,!:'\'']//g' | sed -e 's/ /-/g' )
mv $fn $fn2
done
echo "End"
На этом, казалось бы, и все, но нет. Открываю фалы, а в поле Slug - те же самые невразумительные символы вида d0b5d0b4d18b. Поскольку slug - это текст ссылки на статью, то и статьи не генерируются, Hugo не нравится форма.
Обойдусь без “велосипеда”, и напишу более цивилизованный способ конвертации. Скрипт на Python:
import os,urllib.parse
for file in os.listdir("D:\Test\content_1"):
if file.endswith(".markdown"):
input = open(file, encoding="utf8")
output = open(file[:-8] + 'md', 'w', encoding="utf8")
for s in input:
if 'slug:' in s:
s = s.replace(s, 'slug: ' + urllib.parse.unquote(s[6:]))
print('slug: ' + urllib.parse.unquote(s[6:]))
output.write(s)
output.close()
input.close()
Вот и все. Надо выбрать оформление и перенести на GitHub Pages получившийся результат. Но об этом в следующий раз.