Рубрики
Без рубрики

Как перевести сообщения в блоге WordPress на уценку Leanpub

Автор оригинала: 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-адрес записи в блоге и выполняет следующие действия:

  1. Сначала он генерирует имя файла из URL – адреса записи в блоге
  2. Он создает временный файл
  3. Он загружает HTML-содержимое блога во временный файл
  4. Используя Perl, он извлекает содержимое статьи из охватывающей HTML-разметки
  5. Используя Pandoc , он преобразует извлеченный HTML-контент в уценку
  6. С помощью Perl он затем форматирует все блоки кода в поддерживаемый формат Leanpub
  7. Он также удаляет ненужные блоки (например, заметки “Следуйте за мной” или ссылки на GitHub).
  8. Все изображения изменяются для ссылки на соответствующую папку хранилища книг
  9. Заголовки перенесены в формат глав Leanpub

В целом, мне удалось своевременно получить все статьи, чтобы вместо этого я мог сосредоточиться на написании.