Парсер fictionzone.net — FB2 & TXT

Извлекает главы с fictionzone.net и сохраняет их в FB2 или TXT.

作者
Идзуми Сэна
日安装量
0
总安装量
2
评分
0 0 0
版本
0.153
创建于
2025-10-18
更新于
2025-10-18
大小
53.5 KB
许可证
暂无
适用于

1. Назначение

Скрипт предназначен для извлечения (парсинга) текстового содержимого глав с веб-сайта fictionzone.net. Он позволяет пользователю последовательно собирать главы книги в локальное хранилище браузера и затем экспортировать их в виде единого файла в формате FB2 или TXT. Ключевой особенностью является возможность автоматического сбора пропущенных глав, что значительно упрощает процесс создания полной электронной книги.

2. Ключевые функции

Скрипт построен на модульной архитектуре и разделен на несколько логических блоков, каждый из которых выполняет свою задачу.

  • Управление состоянием и данными:

    • 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(): Динамически создают и стилизуют плавающее окно управления, которое внедряется на страницу. Интерфейс включает в себя:
      • Индикаторы статуса (название книги, количество собранных глав).
      • Кнопки управления: ручное добавление главы, переключатель авто-добавления, запуск/остановка "умного" автосбора.
      • Выпадающие списки для выбора диапазона глав для скачивания.
      • Кнопки для скачивания в форматах FB2 и TXT.
      • Кнопка для полной очистки собранных данных по книге.
  • Автоматизация сбора ("Умный" сбор):

    • cacheTableOfContents(): Сканирует оглавление на главной странице книги и сохраняет прямые ссылки на все главы в bookCollection.meta.toc. Это позволяет скрипту быстро переходить к нужным главам без необходимости вручную искать их на странице.
    • mineNextChapter(): Основной движок автосбора. Он определяет первую по порядку главу, которая еще не была собрана, находит ее URL в кэше оглавления и автоматически перенаправляет браузер на эту страницу.
    • toggleAutoMine(): Функция, которая запускает или останавливает процесс автосбора, сохраняя его состояние в GM_setValue, чтобы он мог продолжаться даже после перезагрузки страницы.
  • Адаптация к SPA (Single Page Application):

    • MutationObserver: Скрипт использует MutationObserver для отслеживания изменений в DOM. Это позволяет ему корректно работать на сайтах, которые подгружают контент динамически без полной перезагрузки страницы (как это делает fictionzone.net). При каждой смене URL через pushState запускается функция handlePageUpdate, которая переоценивает страницу и выполняет необходимые действия.

3. Как использовать

  1. Установка: Установите скрипт через расширение Violentmonkey или Tampermonkey.
  2. Навигация: Откройте страницу любой книги на сайте fictionzone.net. В правом верхнем углу появится плавающее окно скрипта.
  3. Сбор глав:
    • Ручной режим: Перейдите на страницу главы и нажмите кнопку + в окне скрипта.
    • Автоматический режим: Активируйте переключатель "Авто-добавление". После этого каждая посещенная страница с главой будет автоматически добавлена в сборник.
    • "Умный" автосбор: Нажмите кнопку с иконкой кружочков по кругу. Скрипт начнет автоматически переходить по страницам, собирая все пропущенные главы. Процесс можно остановить повторным нажатием.
  4. Экспорт файла:
    • После сбора нужных глав выберите диапазон (например, с 1 по 20) в выпадающих списках "От" и "До".
    • Нажмите кнопку "Скачать FB2" или "Скачать TXT" для генерации и загрузки файла.

4. Особенности

  • Персистентность данных: Весь прогресс сбора глав сохраняется между сессиями браузера. Скрипт "помнит", какие главы уже собраны для каждой конкретной книги.
  • Отказоустойчивость: Если метаданные книги отсутствуют, скрипт автоматически перенаправит пользователя на главную страницу для их сбора перед добавлением первой главы.
  • Неблокирующий интерфейс: Во время выполнения операций (добавления, генерации) элементы управления блокируются, а в окне отображается статус "Обработка...", что предотвращает случайные действия пользователя.
  • Визуализация прогресса: В строке статуса отображается количество собранных глав, их общая численность и диапазоны пропущенных глав, что позволяет легко отслеживать прогресс.
  • Динамическое обновление: Благодаря MutationObserver скрипт мгновенно реагирует на навигацию по сайту, обновляя UI и запуская логику сбора без необходимости обновлять страницу вручную.

5. Пример выходных данных

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>
            <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或关注我们的公众号极客氢云获取最新地址