Skip to main content

Локальный бэкап статей с Sponsr.ru и Boosty.to в Markdown с Hugo-интеграцией

Project description

Article Backup

Скрипт для локального бэкапа статей с платформ Sponsr.ru и Boosty.to.

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

Возможности

  • Полный архив статей одного или нескольких авторов
  • Инкрементальные обновления — скачивает только новые статьи
  • Конвертация в Markdown с frontmatter (title, date, tags, source)
  • Локальное сохранение изображений, видео, аудио, PDF
  • Сохранение ссылок на встроенные видео (Rutube, YouTube, Vimeo, VK, OK.ru)
  • Исправление внутренних ссылок между статьями
  • Интеграция с Hugo для просмотра в браузере
  • SQLite-индекс для быстрого поиска

Установка

Требуется Python 3.10+

git clone https://github.com/strannick-ru/article-backup.git
cd article-backup
python -m venv venv
source venv/bin/activate  # Linux/macOS
# venv\Scripts\activate   # Windows
pip install -r requirements.txt

Настройка

1. Создайте конфиг

cp config.yaml.example config.yaml

2. Заполните config.yaml

output_dir: ./backup

hugo:
  base_url: "https://example.com/"
  title: "Бэкап статей"
  language_code: "ru"

auth:
  sponsr_cookie_file: ./sponsr_cookie.txt
  boosty_cookie_file: ./boosty_cookie.txt
  boosty_auth_file: ./boosty_auth.txt

sources:
  - platform: sponsr
    author: pushkin
    display_name: "Пушкин. Проза"

  - platform: boosty
    author: lermontov
    display_name: "Лермонтов. Стихи"

3. Получите токены авторизации

Sponsr

  1. Войдите на sponsr.ru
  2. Откройте DevTools (F12) → Network
  3. Перезагрузите страницу
  4. Найдите любой запрос → Headers → Cookie
  5. Скопируйте значение в sponsr_cookie.txt

Boosty

  1. Войдите на boosty.to
  2. Откройте DevTools (F12) → Console
  3. Вставьте код:
const cookie = document.cookie;
const auth = JSON.parse(decodeURIComponent(document.cookie.match(/auth=([^;]+)/)[1]));
console.log("Cookie:\n" + cookie + "\n\nAuthorization:\nBearer " + auth.accessToken);
  1. Скопируйте Cookie в boosty_cookie.txt
  2. Скопируйте Authorization в boosty_auth.txt

Использование

Синхронизация всех авторов

python backup.py

Скачать один пост по URL

python backup.py "https://sponsr.ru/author/12345/post-title/"
python backup.py "https://boosty.to/author/posts/uuid"

Указать другой конфиг

python backup.py -c /path/to/config.yaml

Docker

Для серверов с устаревшим Python можно использовать Docker.

# Сборка образа
docker compose build

# Синхронизация всех авторов
docker compose run --rm backup

# Скачать один пост
docker compose run --rm backup "https://sponsr.ru/author/123/"

# Сборка Hugo-сайта
docker compose run --rm hugo

# Полная синхронизация (backup + hugo)
docker compose run --rm backup && docker compose run --rm hugo

# Пересборка после изменений кода
docker compose build --no-cache

Cron

Для автоматической синхронизации добавьте в crontab:

# Каждый день в 3:00
0 3 * * * cd /path/to/article-backup && docker compose run --rm backup && docker compose run --rm hugo >> /var/log/article-backup.log 2>&1

Структура выходных файлов

backup/
├── index.db                          # SQLite-индекс
├── sponsr/
│   └── pushkin/
│       ├── _index.md
│       └── posts/
│           └── 2026-01-31-article-title/
│               ├── index.md          # Статья с frontmatter
│               └── assets/           # Медиафайлы
└── boosty/
    └── lermontov/
        └── posts/
            └── 2026-01-31-another-article/
                ├── index.md
                └── assets/

Интеграция с Hugo

После каждого запуска backup.py:

  • Автоматически создаётся симлинк site/content → output_dir
  • Генерируется site/hugo.toml из секции hugo: в конфиге
# Запуск локального сервера
cd site && hugo server -D

Откройте http://localhost:1313

Настройка Hugo

Параметры Hugo задаются в config.yaml:

hugo:
  base_url: "https://example.com/"  # URL сайта для production
  title: "Мой архив статей"         # Заголовок сайта
  language_code: "ru"               # Язык контента

Если секция hugo: не указана, используются значения по умолчанию (http://localhost:1313/).

RSS-ленты

Для каждого автора автоматически генерируется RSS-фид:

  • http://localhost:1313/sponsr/pushkin/index.xml
  • http://localhost:1313/boosty/lermontov/index.xml

На странице автора отображается ссылка 📡 для подписки.

Субдомены для авторов (nginx)

Каждого автора можно раздавать на отдельном субдомене. При использовании Docker CSS автоматически копируется в папки авторов.

# Docker (CSS копируется автоматически)
docker compose run --rm backup && docker compose run --rm hugo

# Или локально через build.sh
cd site && ./build.sh

Пример конфига nginx:

server {
    listen 80;
    server_name pushkin.example.site;
    root /var/www/backup/site/public/sponsr/pushkin;
    index index.html;

    # Корень показывает список постов
    location = / {
        try_files /posts/index.html =404;
    }

    location / {
        try_files $uri $uri/ =404;
    }
}

Формат статьи

---
title: "Заголовок статьи"
date: 2024-01-15T12:00:00
source: https://sponsr.ru/pushkin/12345/...
author: pushkin
platform: sponsr
post_id: 12345
tags: ["тег1", "тег2"]
---

# Заголовок статьи

Текст статьи...

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

article_backup-0.1.0.tar.gz (21.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

article_backup-0.1.0-py3-none-any.whl (26.0 kB view details)

Uploaded Python 3

File details

Details for the file article_backup-0.1.0.tar.gz.

File metadata

  • Download URL: article_backup-0.1.0.tar.gz
  • Upload date:
  • Size: 21.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for article_backup-0.1.0.tar.gz
Algorithm Hash digest
SHA256 2d030ad833bc5c8175e1367d7c1c901e3dd05ceefea80b9ad05e594c624c55a5
MD5 da5fde6d0e4350fd616fa1af5ab39ac4
BLAKE2b-256 4c4f8a609868d22f8b1b3f374c64549ef0c8a30cc3bd7d1864cecb6e424c1eae

See more details on using hashes here.

File details

Details for the file article_backup-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: article_backup-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 26.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for article_backup-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 116f8b5784c9f723a69718c3226b1a2458abbdcbb90611fd99329c87ed22ecde
MD5 f3bdebc18847a63db681cefcf1cda171
BLAKE2b-256 34650a3364c3ba49b4f61bdd7bef4cdb38a920fd5736c97a8d59aed412d2af3d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page