Skip to main content

confluence-md-exporter

Локальный read-only конвейер: выгрузка страниц Confluence Server/Data Center → Markdown, медиа-ассеты, diff-сравнение версий и каталог батча. Закон реализации — спецификация.

Установка

Требуется Python >=3.11,<3.14.

pip install confluence-md-exporter

Или через uv:

uv tool install confluence-md-exporter

Из исходников:

uv sync

Запуск

По умолчанию: вход input/urls.txt, выход output/, доступ анонимный. База Confluence берётся из абсолютных URL в списке — отдельный --base-url не нужен, если в файле есть полные ссылки.

Стартовый список ссылок:

cp input/urls.txt.example input/urls.txt

Закрытый инстанс (нужны учётные данные):

uv run confluence-md-exporter -u USER -t TOKEN

Только PAT (Bearer):

uv run confluence-md-exporter -t TOKEN

.env не обязателен. Если удобнее держать креды в файле — .env.example и uv run --env-file .env confluence-md-exporter. CLI-флаги перекрывают окружение.


Форматы входных ссылок (input/urls.txt)

Файл input/urls.txt (UTF-8, одна ссылка на строку; строки с # и пустые строки игнорируются).

Поддерживаются:

  1. Прямые страницы по ID:
    • https://confluence.example.com/pages/viewpage.action?pageId=123456
    • https://confluence.example.com/wiki/spaces/SPACE/pages/123456/Some+Page+Title
    • 123456 (чистый идентификатор)
  2. Страницы по Space и Title:
    • https://confluence.example.com/display/SPACE/Page+Title
  3. Diff-страницы (сравнение версий):
    • https://confluence.example.com/pages/diffpagesbyversion.action?pageId=607636678&selectedPageVersions=41&selectedPageVersions=42
    • https://confluence.example.com/pages/diffpagesbyversion.action?pageId=607636678&originalVersion=41&revisedVersion=42

Примечание: неподдерживаемые форматы (tiny-link /x/... и т.д.) помечаются в run_report.json как invalid_urls и не валят батч.


CLI команды и флаги

usage: confluence-md-exporter [-h] [--version] [-i INPUT] [-o OUTPUT]
                              [-u USER] [-t TOKEN] [--base-url URL] [-r] [-c] [-s]

options:
  --version             Версия пакета
  -i, --input INPUT     Список URL (default: input/urls.txt)
  -o, --output OUTPUT   Каталог выгрузки (default: output)
  -u, --user USER       Имя пользователя (вместе с -t — HTTP Basic)
  -t, --token TOKEN     PAT или пароль
  --base-url URL        База инстанса, если её нельзя вывести из списка URL
  -r, --refresh         Игнорировать disk-skip
  -c, --clean           Очистить каталог выгрузки перед работой

Выгрузка всегда однопоточная: один процесс, страницы строго последовательно, без Prefect и без лишних серверов. В консоли на уровне INFO виден прогресс каждой страницы и итоговая сводка.


Примеры использования

1. Обычный запуск

Выгрузка страниц по списку из input/urls.txt (анонимно, база из URL):

uv run confluence-md-exporter

2. Чистая выгрузка с очисткой папки

Полная очистка папки выгрузки и выгрузка заново:

uv run confluence-md-exporter -c

3. Принудительное обновление кэша (Refresh)

Перескачивание контента даже при совпадении версий на диске:

uv run confluence-md-exporter -r

4. Указание произвольных входных и выходных путей

uv run confluence-md-exporter -i ./my_pages.txt -o ./exports/march_release

5. Выгрузка разницы версий (Diff)

Добавь в файл ссылок URL вида:

https://confluence.example.com/pages/diffpagesbyversion.action?pageId=607636678&selectedPageVersions=41&selectedPageVersions=42

И запусти:

uv run confluence-md-exporter

В результате в папке 05_diffs/ будет создан файл 607636678_title_v41_to_v42.md с YAML-метаданными (авторы версий, даты, статистика +X/-Y) и блоком ```diff.


Структура выгрузки (Output)

output/
├── 01_raw/             # Сырой Confluence JSON ответа REST API
├── 02_interim/         # Storage XML страницы
├── 03_assets/          # Скачанные вложения и картинки (по page_id)
├── 04_markdown/        # Итоговый Markdown (*.md) и manifest.json
├── 05_diffs/           # Unified diff между версиями страниц (*_v41_to_v42.md)
└── run_report.json     # Сводный отчет о результатах выгрузки батча

Коды возврата (Exit Codes)

  • 0 — успех (все страницы обработаны со статусом ok или skipped);
  • 1 — частичная ошибка (хотя бы одна страница завершилась со статусом failed);
  • 2 — критическая ошибка конфигурации / непройденная авторизация / отсутствует входной файл.

Разработка и тестирование

Запуск полного набора тестов:

uv run python -m pytest

Release files for confluence-md-exporter 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for confluence-md-exporter 1.0.0
File Size Uploaded
confluence_md_exporter-1.0.0.tar.gz 48.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for confluence-md-exporter 1.0.0
File Interpreter ABI Platform
confluence_md_exporter-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 80.1 kB

Release files / confluence_md_exporter-1.0.0.tar.gz

Download URL confluence_md_exporter-1.0.0.tar.gz
Size 48.1 kB
Tags Source
SHA-256 checksum
How to use checksums
5b9b27ba0f1120ddb123b5cf04862bfe468d08cbd7a5960aeef9503803ab2a23
BLAKE2b-256 checksum
How to use checksums
c691a996f98a2b7ae14fd7f9a82bec036ccf91a2babb89fd3ec585fc1a7ec175
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release files / confluence_md_exporter-1.0.0-py3-none-any.whl

Download URL confluence_md_exporter-1.0.0-py3-none-any.whl
Size 32.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
293291208efd97a072404f4934c81a1fa059e356f893dd6428f0bf270eb1ed98
BLAKE2b-256 checksum
How to use checksums
2de01880cbe7c16e23bf4d89d8f9628e5c454423a9f57702cff19856651ffbf2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release history Release notifications | RSS feed

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page