Извлекает главы с royalroad.com и сохраняет их в FB2 или TXT
Скрипт предназначен для сбора и сохранения произведений (fiction) с литературного портала royalroad.com. Он встраивает на страницу кастомный пользовательский интерфейс, который позволяет пользователю выбрать диапазон глав, загрузить их содержимое и скомпилировать в единый файл для офлайн-чтения в форматах FB2 (FictionBook) или TXT (простой текст).
Инициализация и кэширование (initialize):
parseBookInfo для извлечения информации: название, автор, аннотация, жанры и, что особенно важно, полный список глав.GM_setValue), используя URL произведения в качестве ключа. При последующих посещениях этой же страницы данные мгновенно загружаются из кэша (GM_getValue), что значительно ускоряет работу и снижает количество сетевых запросов. Предусмотрены кнопки для принудительного обновления и полной очистки кэша.Парсинг данных (parseBookInfo, parseChaptersFromScript):
cleanAnnotationHtml для удаления лишних тегов и атрибутов.<script>, содержащий JavaScript-объект window.chapters. С помощью регулярного выражения из этого объекта извлекается JSON-массив со всеми главами, их названиями и URL. Этот подход является чрезвычайно эффективным и надежным.Обработка и сбор глав (processChapters):
GM_xmlhttpRequest.div.chapter-content проходит тщательную очистку функцией cleanupHtml. Эта функция удаляет все ненужные элементы (рекламу, навигацию, комментарии, заметки автора), а также "разворачивает" теги <span> и удаляет лишние атрибуты (class, id, style), оставляя только чистое форматирование (теги <p>).Генерация файлов (generateFb2, generateTxt):
<description> метаданными (название, автор, жанры, аннотация) и формирует тело книги (<body>), где каждая глава представлена в виде отдельной секции (<section>).Пользовательский интерфейс (UI) и управление состоянием:
makeDraggable).State Machine) для управления логикой работы. В зависимости от текущего состояния (например, IDLE, PROCESSING, GENERATING), элементы интерфейса (кнопки, селекторы) автоматически блокируются или разблокируются, а пользователю выводится актуальная информация о ходе процесса.royalroad.com (например, https://www.royalroad.com/fiction/12345/some-title).window.chapters для получения списка глав является главным техническим преимуществом. Это избавляет от необходимости постраничной загрузки и парсинга таблицы, делая инициализацию почти мгновенной.cleanupHtml использует четкий список селекторов для удаления всех посторонних элементов, что обеспечивает высокое качество и чистоту итогового файла, свободного от "мусора".GM_* API для сохранения данных о книге между сессиями — отличная практика, которая повышает удобство использования скрипта для часто скачиваемых произведений.Фрагмент структуры генерируемого FB2-файла:
<?xml version="1.0" encoding="UTF-8"?>
<FictionBook xmlns="[http://www.gribuser.ru/xml/fictionbook/2.0](http://www.gribuser.ru/xml/fictionbook/2.0)" xmlns:l="[http://www.w3.org/1999/xlink](http://www.w3.org/1999/xlink)">
<description>
<title-info>
<genre>fantasy</genre>
<genre>adventure</genre>
<author><nickname>Some Author</nickname></author>
<book-title>Title of The Book</book-title>
<annotation><p>The annotation text goes here, properly formatted.</p></annotation>
<lang>en</lang>
</title-info>
<document-info>
<date value="2025-10-14">2025-10-14</date>
<version>0.1</version>
</document-info>
</description>
<body>
<section>
<title><p>Chapter 1: The Beginning</p></title>
<p>First paragraph of the chapter.</p>
<p>Second paragraph of the chapter.</p>
</section>
<section>
<title><p>Chapter 2: A New Path</p></title>
<p>Content of the second chapter...</p>
</section>
</body>
</FictionBook>
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址