Автор оригинала: Vlad Mihalcea.
Я большой поклонник утилит Unix , так как они помогают мне ежедневно. Когда инструмент экспорта Leanpub WordPress подвел меня, я понял, что должен написать свой собственный сценарий импорта. Без автоматического скрипта мне пришлось потратить более получаса, чтобы исправить сломанные исходные коды или таблицы и перенести ссылки на изображения в структуру папок хранилища книг.
Но в книге “Высокопроизводительная сохраняемость Java” используется информация, разбросанная по сотням сообщений в блоге, на импорт которой у меня ушло бы несколько месяцев вручную.
С помощью этого маленького скрипта мне удалось сократить время импорта до пары секунд на статью.
#!/bin/bash url=$1 #Generate the file name from URL file=`echo $url | sed -r 's/.*\..*?\/(.*?)[\/$]/\1.md/' | sed 's/\//-/'g` #Generate a temporary file tmpfile=`uuidgen` #Create missing files touch $tmpfile touch $file #Download the WordPress post to the temporary file wget $url --no-cache --cache=off -O $tmpfile #Extract the relevant post content perl -0777 -n -e 'print "$1<\/h1>\n$2" while (m/
(.*?)<\/h1>.*?
(.*?)<\/div>/sgmp)' $tmpfile > $file #Remove the temporary file rm $tmpfile echo 'Importing resource from ' $url 'to' $file #Convert the HTML document to MarkDown pandoc -s -r html $file -t markdown-backtick_code_blocks-simple_tables+pipe_tables --atx-headers -o $file #Adjust code blocks according to Leanpub style perl -0777 -i -pe 's/(\~+)\s+.*?\.(\w+);.*?\}/{lang="$2",line-numbers=off}\n$1/ig' $file #Remove unnecessary footer notes perl -0777 -i -pe 's/Code\s*available\s*(on|for).*$//igs' $file perl -0777 -i -pe 's/\*\*If\syou\shave\senjoyed.*$//igs' $file #Migrate image locations from WP to relative image folder sed -i -r 's_\[\!\[(.*?)\]\(.*?\)\]\(http.*\/([a-zA-Z0-9\-]+\.(gif|png|jpg))\)_![\1]\(images\/\1\.\3\)_g' $file #First line header is set to ## sed -i '1s/^#/##/g' $file #Next lines headers upper limit is ### sed -i '2,$s/^#/###/g' $file #Remove backup file generated by perl rm $file.bak
Итак, этот небольшой скрипт берет URL-адрес записи в блоге и выполняет следующие действия:
- Сначала он генерирует имя файла из URL – адреса записи в блоге
- Он создает временный файл
- Он загружает HTML-содержимое блога во временный файл
- Используя Perl, он извлекает содержимое статьи из охватывающей HTML-разметки
- Используя Pandoc , он преобразует извлеченный HTML-контент в уценку
- С помощью Perl он затем форматирует все блоки кода в поддерживаемый формат Leanpub
- Он также удаляет ненужные блоки (например, заметки “Следуйте за мной” или ссылки на GitHub).
- Все изображения изменяются для ссылки на соответствующую папку хранилища книг
- Заголовки перенесены в формат глав Leanpub
В целом, мне удалось своевременно получить все статьи, чтобы вместо этого я мог сосредоточиться на написании.