Переезд на Hugo. Часть 1

Post Tag: tech

Начну с небольшой предыстории. Примерно год назад я переехал на линукс и, раз уж я пустился во все тяжкие, давай думаю перееду на какой-нибудь другой блог, а то 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 получившийся результат. Но об этом в следующий раз.

comments powered by Disqus