Извлекает главы с fictionzone.net и сохраняет их в FB2 или TXT.
Скрипт предназначен для извлечения (парсинга) текстового содержимого глав с веб-сайта fictionzone.net. Он позволяет пользователю последовательно собирать главы книги в локальное хранилище браузера и затем экспортировать их в виде единого файла в формате FB2 или TXT. Ключевой особенностью является возможность автоматического сбора пропущенных глав, что значительно упрощает процесс создания полной электронной книги.
Скрипт построен на модульной архитектуре и разделен на несколько логических блоков, каждый из которых выполняет свою задачу.
Управление состоянием и данными:
bookCollection: Центральный объект, в котором хранятся все данные о текущей книге: метаинформация (название, автор, аннотация), полный список глав из оглавления (toc) и уже собранное содержимое глав (chapters).GM_setValue / GM_getValue: Функции API Greasemonkey, используемые для сохранения и загрузки объекта bookCollection в постоянное хранилище. Данные сохраняются для каждой книги отдельно, используя ее уникальный идентификатор из URL.State (Машина состояний): Простая система состояний (IDLE, WORKING, MINING) для управления поведением интерфейса, блокирующая кнопки во время выполнения операций (например, добавления главы или генерации файла) во избежание конфликтов.Парсинг контента:
parseCurrentPage(): Универсальная функция, которая анализирует текущую страницу и определяет ее тип.
reformatToParagraphs(): Важная утилита, которая очищает HTML-код главы от ненужных элементов (рекламы, скриптов) и форматирует текст, оборачивая каждый абзац в тег <p>. Это обеспечивает корректное отображение в FB2.Генерация файлов:
generateFb2() / generateTxt(): Функции, отвечающие за создание конечных файлов. Они формируют XML-структуру для FB2 или текстовую разметку для TXT, включая метаданные книги и содержимое всех выбранных глав.generateFb2SectionsOnly, generateTxtSectionsOnly) создается файл, содержащий только текст глав без метаданных. Это может быть полезно для объединения с другими файлами вручную.Пользовательский интерфейс (UI):
createUI() / addStyles(): Динамически создают и стилизуют плавающее окно управления, которое внедряется на страницу. Интерфейс включает в себя:
Автоматизация сбора ("Умный" сбор):
cacheTableOfContents(): Сканирует оглавление на главной странице книги и сохраняет прямые ссылки на все главы в bookCollection.meta.toc. Это позволяет скрипту быстро переходить к нужным главам без необходимости вручную искать их на странице.mineNextChapter(): Основной движок автосбора. Он определяет первую по порядку главу, которая еще не была собрана, находит ее URL в кэше оглавления и автоматически перенаправляет браузер на эту страницу.toggleAutoMine(): Функция, которая запускает или останавливает процесс автосбора, сохраняя его состояние в GM_setValue, чтобы он мог продолжаться даже после перезагрузки страницы.Адаптация к SPA (Single Page Application):
MutationObserver: Скрипт использует MutationObserver для отслеживания изменений в DOM. Это позволяет ему корректно работать на сайтах, которые подгружают контент динамически без полной перезагрузки страницы (как это делает fictionzone.net). При каждой смене URL через pushState запускается функция handlePageUpdate, которая переоценивает страницу и выполняет необходимые действия.fictionzone.net. В правом верхнем углу появится плавающее окно скрипта.+ в окне скрипта.MutationObserver скрипт мгновенно реагирует на навигацию по сайту, обновляя UI и запуская логику сбора без необходимости обновлять страницу вручную.<?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>
<book-title>Название Книги</book-title>
<author><first-name>Имя Автора</first-name></author>
<annotation><p>Это первая строка аннотации.</p><p>Это вторая строка.</p></annotation>
<genre>fantasy</genre>
<date>2025-10-18</date>
<lang>en</lang>
</title-info>
</description>
<body>
<section>
<title><p>Глава 1: Начало</p></title>
<p>Текст первого абзаца первой главы.</p>
<p>Текст второго абзаца первой главы.</p>
</section>
<section>
<title><p>Глава 2: Продолжение</p></title>
<p>Текст первого абзаца второй главы.</p>
</section>
</body>
</FictionBook>
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址