Михаил Кондратович - Создание электронных книг в формате FictionBook 2.1: практическое руководство. Версия 1.0 Release Candidat 1 от 15.05.2008 г. Страница 15
- Категория: Компьютеры и Интернет / Прочая околокомпьтерная литература
- Автор: Михаил Кондратович
- Год выпуска: неизвестен
- ISBN: нет данных
- Издательство: неизвестно
- Страниц: 34
- Добавлено: 2019-05-28 14:54:10
Михаил Кондратович - Создание электронных книг в формате FictionBook 2.1: практическое руководство. Версия 1.0 Release Candidat 1 от 15.05.2008 г. краткое содержание
Прочтите описание перед тем, как прочитать онлайн книгу «Михаил Кондратович - Создание электронных книг в формате FictionBook 2.1: практическое руководство. Версия 1.0 Release Candidat 1 от 15.05.2008 г.» бесплатно полную версию:Книга предназначена для пользователей, желающих самостоятельно создавать и редактировать электронные книги в популярном формате FictionBook. Подробно описан сам формат FB и программные средства, предназначенные для работы с ним.
Михаил Кондратович - Создание электронных книг в формате FictionBook 2.1: практическое руководство. Версия 1.0 Release Candidat 1 от 15.05.2008 г. читать онлайн бесплатно
На ресурсе http://www.wisesoft.ru находится множество различных журналов. Форматы в котором они представлены, различаются, Но один из них особо привлекателен для преобразования в FB2. Я говорю о журналах которые представлены в виде пачки html-файлов («Хакер», «Хакер-спец», «Мобильные компьютеры», «Хулиган» и др.). При всей простоте конвертированию стандартными средствами этот способ хранения данных поддается с трудом.
Более близкое знакомство выявило следующее. Имеется файл index.htm с оглавлением. Статьи представляют собой кучки html-файлов, разбитые по папкам. Текст представляет собой обычные абзацы, обрамленные тэгами «
». Оформление html-ок везде стандартное.
К сожалению, такая лафа наблюдается не везде. С декабря 2006 года формат журналов начал эволюционировать. Статьи стали вмещаться в одну html-ку, появились списки, картинки, дополнительные стили. Хотя и не во всех журналах. Основная масса изданий представлена именно в таком виде, как описано выше. Поэтому сосредочимся именно на них.
Наша задача заключается в том, чтобы вырезать куски текста из html-файлов, склеить их в один файл.
Скрипт, представленный ниже, не только блестяще справляется с этим, но и выдает на выходе вполне приличный FB2, с заполненным заголовком, готовой аннотацией и разбитый на секции.
# Скрипт для конвертации журналов с WiseSoft.ru в FB2
# (C) Юзич, апрель-май 2008 г.
#
# поддерживаемый формат файлов: пачка html, журналы сделанные c ноября 2003 г. по ноябрь 2006 г. включительно.
# примечание: изменения в декабре 2006 и марте 2007 - некритичные
# теоретически должен обрабатывать журналы сделанные по июль 2007 включительно
# но уже с мая 2007 в тексте могут попадаться дополнительные тэги, мешающие правильной конвертации
# хотя все это касается, в основном, журнала "Хакер" ("Хакер-спец").
# "Мобильные компьютеры", к примеру, по-прежнему, как шли, так и идут в старом формате
# да и чтобы обрабатыват журналы, сделанные до ноября 2003, достаточно подправить ключевые фразы
#
# запускать из директории, где находится файл-оглавление журнала (index.htm)
# запуск: ruby ws_j_cnv.rb
#
# считываем файл-оглавление в строку
wfile=File.open("index.htm")
ltext=wfile.readlines.to_s
wfile.close
# выгрызаем заголовок
fbtitle=/<SPAN CLASS="titleSet">(.+)<font color="#FF0000">(#\d{1,3})<\/font>(.+)<\/SPAN>/.match(ltext).captures
# выгрызаем ссылки на статьи и разделители
filtr=/<SPAN CLASS="minSet">(.+)<\/SPAN>|<a href="(\d{3}\/\d.htm)">(.+)<\/a>/
lmas = ltext.grep(filtr)
# начинаем формировать выходной текст
outtext="<title>
"+fbtitle[0]+fbtitle[1]+fbtitle[2]+"
</title>\n"# начинаем формировать аннотацию
annotation="
Содержание номера:
\n"# флажок открытой секции раздела
flagSect=false
# прокручиваем список ссылок
lmas.each do |line|
if line.include? "SPAN" then # ССЫЛКА ИЛИ РАЗДЕЛИТЕЛЬ?
if flagSect then outtext=outtext+"</section>\n" end # РАЗДЕЛИТЕЛЬ. секцию закрывать надо?
/<SPAN CLASS="minSet">(.+)<\/SPAN>/.match(line) # выгрызаем разделитель...
outtext=outtext+"<section>\n<title>
"+$1+"
</title>\n" # открываем секцию разделаannotation=annotation+"
"+$1+":
\n" # и дополняем аннотациюflagSect=true # секция осталась открыта...
else # НЕ-ЕТ, ВСЕ-ТАКИ ССЫЛКА...
filtr.match(line)
pathf = $2 # берем путь к первому файлу статьи...
annotation=annotation+"
"+(149).chr+" "+$3+"
\n" # дополняем аннотацию...puts pathf[0..2] # это чтобы не скучно было ждать...
outtext=outtext+"<section>\n" # открыли секцию...
while File::exists?(pathf) do # обрабатываем статью
# считали файлик в текстовую строку...
wfile=File.open(pathf)
wtext=wfile.readlines.to_s
wfile.close
wtext[/<html>.+?<\/p>/m]="" # чик! головка...
wtext[/<center>.+<\/html>/m]="" # чик! хвостик...
# заголовок статьи оставлять?
wtext = pathf[4,2].to_i == 1 ? wtext.sub(/.*\n(.*\n.*\n).*\n.*\n/,' \1') : wtext.sub(/.*\n.*\n.*\n.*\n.*\n/,' \1')
outtext=outtext+wtext # оставшийся текст - к основному массиву
# модифицируем имя файла
if pathf[4,2].to_i >= 10
pathf[4,2] = (pathf[4,2].to_i + 1).to_s
else
pathf[4] = (pathf[4,2].to_i + 1).to_s
end
end # конец цикла
outtext=outtext+"</section>\n" # закрываем секцию
end # усе. статью оформили...
end # все статьи собрали в одну строку...
# модифицируем выходной текст под FB2
outtext.gsub!("
<big><big><big><strong>","<title>
")
outtext.gsub!("</strong></big></big></big>
","</title>")outtext.gsub!("
<big><strong>","<epigraph>
")
outtext.gsub!("</strong></big>
","</epigraph>")outtext.gsub!(" ",(160).chr)
outtext.gsub!(/&(?!lt;|gt;)/,"&")
annotation.gsub!(/&(?!lt;|gt;)/,"&")
outtext.gsub!("<br>","
")
outtext.gsub!("<br>","
")
# чистим мусор
outtext.gsub!(/\x01|\x12|\x18|\x1E/, "?") # удаляем непечатные символы
# корректируем неправильное использование "<" и ">"
# заодно прибиваем ненужные тэги
outtext.gsub!(/(
)(.*)(<\/p>)/) do |line|
subl1,subl2,subl3 = $1,$2,$3
subl2.gsub!("<","\x8b")
subl2.gsub!(">","\x9b")
line=subl1+subl2+subl3
end
# а линки выделим жирным
outtext.gsub!(/\x8Ba href.+?\x9B(.*?)\x8B\/a\x9B/) {|line| line="<strong>"+$1+"<\/strong>"}
# компьютерное тире - в типографское
outtext.gsub!(/\s-\s/," \x97 ")
outtext.gsub!("
-", "
\x97")
annotation.gsub!(/\s-\s/," \x97 ")
# добавляем заголовок
outtext="<?xml version=\"1.0\" encoding=\"windows-1251\"?>
<FictionBook xmlns=\"http://www.gribuser.ru/xml/fictionbook/2.0\" xmlns:l=\"http://www.w3.org/1999/xlink\">
<description>
<title-info>
<genre>nonfiction</genre>
<author>
<nickname>Редакция журнала</nickname>
</author>
<book-title>"+fbtitle[0]+fbtitle[1]+fbtitle[2]+"</book-title>
<annotation>\n"+annotation+"</annotation>
<date>"+fbtitle[2][-7,4]+"</date>
<lang>ru</lang>
<sequence name=\""+fbtitle[0]+"\" number=\""+fbtitle[1][1,2]+"\"/>
</title-info>
<document-info>
<program-used>Yuzich Ruby script (WiseSoft -> FB2)</program-used>
<src-url>http://www.wisesoft.ru</src-url>
</document-info>
</description>
<body>\n"+outtext
if flagSect then outtext=outtext+"</section>" end # если надо, закроем последнюю секцию раздела
outtext=outtext+"</body>\n</FictionBook>\n" # добавляем хвост
# в имени выходного файла не должно быть двоеточия
fbtitle[0].gsub!(":","-")
# и типографские кавычки - это не есть хорошо
fbtitle[0].gsub!((171).chr,"`")
fbtitle[0].gsub!((187).chr,"`")
# сохраняем выходной файл
wfile = File.new(fbtitle[0]+fbtitle[1]+".fb2","w")
wfile.puts outtext
wfile.close
Вам останется только загрузить готовый FB2-файл в FB Editor и доделать, то с чем не справился скрипт: вставить обложку, разметить подзаголовки и цитаты, подправить эпиграфы. Но это не должно отнять много времени. Основную часть работы проделал скрипт.
Рабочие версии этих скриптов вы можете взять с моего сайта http://yuzzich.narod.ru.
Часть IV
Редактирование книг. FB Editor
Как уже говорилось, файл книги, после конвертации, в обязательном порядке требует окончательной доводки.
Для этого существует программа FB Editor, входящая в пакет FB Tools. Разумеется, это далеко не единственное стредство редактирования FB2-книг.
Данное описание соответствует оригинальной версии FB Editor 1.0 от 23 февраля 2005 года.
Автор FB Editor, Михаил Мацнев, не стал утруждать себя написанием help-а, не без основания считая, что разобраться, как работать с программой, можно и без такового.
Однако, судя по количеству вопросов на форумах fictionbook.org и прочих, описание программы все-таки требуется.
§ 4.1 Установка программы
Для работы FB Tools требуется операционная система семейства Windows NT: лучше всего Windows 2000 или Windows XP.
Также понадобится MSXML 4.0 SP2 и Internet Explorer версии не ниже 5.5 и (внимание!) не выше 6.0 SP1.
Скачать MSXML 4.0 можно с официального сайта Micro$oft. При этом проверка Windows на легальность не производится :).
==ВАЖНО========================
Если у вас установлен Internet Explorer 7.0 и выше, ставить FB Editor, не стоит и пытаться — работать не будет. Вам придется воспользоваться альтернативной разработкой — FB Writer или версией FBE от ЛитРес.
===============================
Попутно в систему будет установлено пару библиотек, позволяющих видеть свойства книг FB2 в Проводнике и, щелкнув правой клавишей мыши, производить их верификацию прямо из Проводника.
Наконец, все нужные компоненты закачаны, программа установлена. Можно приступать к работе.
§ 4.2 Описание функций и основные приемы работы
Как следует из названия, FB Editor позволяет редактировать файлы в формате FB2. Довольно скромный набор функций частично компенсируется возможностью прямого редактирования XML-файла книги.
Механизм работы редактора не так прост, как может показаться на первый взгляд. Кроме exe-файла редактора существуют еще два Java-скрипта, с помощью которых реализована часть функций редактирования. При WYSIWYG-редактировании контент книги преобразуется в динамический HTML, с которым и работают основные и дополнительные Java-скрипты.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.