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, одна ссылка на строку; строки с # и пустые строки игнорируются).
Поддерживаются:
- Прямые страницы по ID:
https://confluence.example.com/pages/viewpage.action?pageId=123456https://confluence.example.com/wiki/spaces/SPACE/pages/123456/Some+Page+Title123456(чистый идентификатор)
- Страницы по Space и Title:
https://confluence.example.com/display/SPACE/Page+Title
- Diff-страницы (сравнение версий):
https://confluence.example.com/pages/diffpagesbyversion.action?pageId=607636678&selectedPageVersions=41&selectedPageVersions=42https://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)
| File | Size | Uploaded | |
|---|---|---|---|
| confluence_md_exporter-1.0.0.tar.gz | 48.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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