Skip to main content
Glama
spelech
by spelech

📦 APKPipe

Автоматизированный конвейер выпуска APK и RSS, объединяющий разблокировку Real-Debrid, резервный headless JDownloader, приём файлов в Nextcloud, уведомления Apprise, веб-панель и нативный MCP-сервер.

CI Coverage Python Docker License


📖 Содержание


Related MCP server: project-hub-mcp

🌟 Обзор

Поддержание актуальной, самостоятельно размещённой библиотеки Android-приложений на Nextcloud или локальном сетевом хранилище традиционно требует утомительной ручной работы: просмотр форумов с релизами (например, Mobilism), проверка строк версий, обход зеркальных ссылок мультихостингов (Rapidgator, Uploady, DropGalaxy), распаковка архивов, переименование APK, перемещение файлов в нужные каталоги, запуск индексации файлов Nextcloud и отслеживание истории выпусков.

APKPipe полностью автоматизирует этот жизненный цикл от начала до конца:

  1. Периодически отслеживает RSS-каналы на предмет новых выпусков приложений.

  2. Сопоставляет выпуски с настраиваемым списком отслеживания с помощью regex-шаблонов, белых списков релизеров ([Balatan], [derrin], [RockMODS]) и проверки версий по SemVer.

  3. Разрешает ссылки на загрузку с помощью трёхуровневой стратегии (Real-Debrid API $\rightarrow$ JDownloader 2 $\rightarrow$ Playwright Scraper).

  4. Загружает и распаковывает архивы (.zip, .rar, .7z, .tar) для извлечения APK-бинарников.

  5. Упорядочивает бинарники в чистую, стандартизированную структуру каталогов ({DOWNLOAD_DIR}/{AppName}/{AppName} v{Version} [{Releaser}].apk).

  6. Запускает команды сканирования Nextcloud OCC (occ files:scan), чтобы файлы немедленно появлялись в вашем мобильном приложении Nextcloud.

  7. Отправляет подробные уведомления о статусе в Discord, Telegram, Pushover или Ntfy через Apprise.

  8. Предоставляет нативные инструменты MCP-сервера и веб-панель для управления человеком и автономных операций AI-агентов.


📐 Архитектура

flowchart TD
    subgraph Sources["Feeds & Control Interfaces"]
        RSS["Mobilism RSS Feeds\n(Apps, Games, Custom)"]
        WebUI["FastAPI Web Dashboard\n(Alpine.js + Tailwind)"]
        MCP["MCP Server Tools\n(AI Agents / mcp-router)"]
    end

    subgraph APKPipeCore["APKPipe Core Engine"]
        Scheduler["AsyncIO / Periodic Poller"]
        Parser["Feed & Post Parser"]
        Matcher["Watchlist Matcher\n(Regex, Releaser Filter, SemVer)"]
        DB[("SQLite Database\n(Watchlist, Feeds, Tasks, History)")]
        Resolver["Tiered Link Resolver"]
        Downloader["Stream Downloader & Extractor"]
        Organizer["File Organizer & Sanitizer"]
        Notifier["Apprise / Ntfy Client"]
    end

    subgraph Resolvers["Download Engines"]
        RD["Real-Debrid API (Tier 1)\n(/unrestrict/link)"]
        JD["Headless JDownloader 2 (Tier 2)\n(MyJDownloader API / Watch Dir)"]
        Scraper["playwright-csharp-scraper (Tier 3)\n(Captcha / Browser Evaluator)"]
    end

    subgraph StorageNotify["Homelab Storage & Alerts"]
        NextcloudFS["Nextcloud Storage\n(/downloads/{AppName}/...)"]
        AppriseAPI["Apprise API (8000) / Ntfy"]
        NextcloudOCC["Nextcloud OCC Scan\n(docker exec occ files:scan)"]
    end

    RSS --> Scheduler
    Scheduler --> Parser
    Parser --> Matcher
    Matcher <--> DB
    WebUI <--> DB
    MCP <--> DB
    Matcher --> Resolver

    Resolver -->|RD Supported Link| RD
    Resolver -->|RD Unsupported / Direct| JD
    Resolver -->|JS / Captcha Protected| Scraper

    RD --> Downloader
    JD --> Downloader
    Scraper --> Downloader
    Downloader --> Organizer
    Organizer --> NextcloudFS
    Organizer --> NextcloudOCC
    Organizer --> Notifier
    Notifier --> AppriseAPI

✨ Ключевые возможности

  • 🔄 Автономный приём каналов: Периодический опрос нескольких источников RSS / ATOM с дедупликацией.

  • 🎯 Точный сопоставитель: Нацеливание на конкретные приложения по имени или regex, требование минимальных порогов версий и фильтрация по доверенным тегам релизеров.

  • ⚡ Многоуровневое разблокирование ссылок:

    • Уровень 1 (Real-Debrid): Прямое высокоскоростное разблокирование через API для 50+ файлообменников.

    • Уровень 2 (JDownloader 2): Headless MyJDownloader Cloud API или локальный linkgrabber по каталогу.

    • Уровень 3 (Playwright Scraper): Резервный headless-браузерный скрапер для динамических целевых страниц.

  • 📦 Автоматическое извлечение архивов: Прозрачная обработка архивов .zip, .rar, .7z и .tar.gz с извлечением вложенных APK-бинарников.

  • 📂 Интеграция с Nextcloud OCC: Бесшовное размещение файлов в пользовательских каталогах Nextcloud с автоматическим вызовом occ files:scan.

  • 🔔 Многоканальные уведомления для Homelab: Push-уведомления через Apprise API и Ntfy с метаданными выпуска, размерами файлов и длительностью загрузки.

  • 🤖 Нативный Model Context Protocol (MCP): 8 встроенных инструментов, совместимых с Claude Desktop, Cursor и mcp-router.

  • 💻 Адаптивная веб-панель: Чистая тёмная/светлая тема на базе Alpine.js и Tailwind CSS.


🚀 Быстрый старт

Развёртывание через Docker Compose

Рекомендуемый способ запуска APKPipe в производственной среде — использование Docker Compose.

  1. Создайте файл docker-compose.yaml:

services:
  apkpipe:
    image: ghcr.io/spelech/apkpipe:latest
    container_name: apkpipe
    restart: unless-stopped
    ports:
      - "8429:8000"
    environment:
      - APKPIPE_APP_NAME=APKPipe
      - APKPIPE_HOST=0.0.0.0
      - APKPIPE_PORT=8000
      - APKPIPE_DATABASE_URL=sqlite+aiosqlite:////data/apkpipe.db
      - APKPIPE_DOWNLOAD_DIR=/downloads
      - APKPIPE_STAGING_DIR=/data/staging
      - APKPIPE_POLL_INTERVAL_SECONDS=900
      - APKPIPE_REAL_DEBRID_API_TOKEN=your_real_debrid_token_here
      - APKPIPE_NEXTCLOUD_URL=http://nextcloud:80
      - APKPIPE_NEXTCLOUD_OCC_COMMAND=docker exec nextcloud-aio-nextcloud sudo -u www-data php /var/www/html/occ files:scan --path="{path}"
      - APKPIPE_APPRISE_URL=http://apprise:8000/notify/apprise
      - APKPIPE_NTFY_TOPIC=apkpipe-alerts
    volumes:
      - ./data:/data
      - /drives/storage/Nextcloud/APKs:/downloads
      - /var/run/docker.sock:/var/run/docker.sock:ro
    labels:
      - "caddy=apk.wileyriley.com"
      - "caddy.reverse_proxy={{upstreams 8000}}"
      - "caddy.import=tinyauth"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 15s
    networks:
      - default
      - caddy

networks:
  default:
    name: apkpipe_net
  caddy:
    external: true
  1. Запустите стек:

docker compose up -d
  1. Откройте браузер по адресу http://localhost:8429 (или https://apk.wileyriley.com, если маршрутизация через Caddy).


Переменные окружения

Переменная

Значение по умолчанию

Описание

APKPIPE_DATABASE_URL

sqlite+aiosqlite:///apkpipe.db

Строка подключения к асинхронной SQLAlchemy SQLite-базе

APKPIPE_DOWNLOAD_DIR

/downloads

Базовый целевой путь для упорядоченной библиотеки APK

APKPIPE_STAGING_DIR

/data/staging

Временная рабочая папка для активных потоков и извлечения

APKPIPE_POLL_INTERVAL_SECONDS

900

Частота опроса каналов в секундах (по умолчанию: 15 минут)

APKPIPE_REAL_DEBRID_API_TOKEN

""

API-токен Real-Debrid (с real-debrid.com/apitoken)

APKPIPE_JDOWNLOADER_EMAIL

""

Email аккаунта MyJDownloader (необязательно, уровень 2)

APKPIPE_JDOWNLOADER_PASSWORD

""

Пароль аккаунта MyJDownloader

APKPIPE_JDOWNLOADER_DEVICE_NAME

""

Имя целевого устройства MyJDownloader

APKPIPE_JDOWNLOADER_WATCH_DIR

""

Каталог наблюдения для файлов .crawljob headless JDownloader

APKPIPE_SCRAPER_URL

http://scraper:8080

URL сервиса headless-скрапера Playwright

APKPIPE_NEXTCLOUD_URL

""

Базовый URL сервера Nextcloud

APKPIPE_NEXTCLOUD_TOKEN

""

Токен аутентификации Nextcloud WebDAV / API

APKPIPE_NEXTCLOUD_OCC_COMMAND

""

Шаблон команды сканирования OCC (подставляется {path})

APKPIPE_APPRISE_URL

""

Конечная точка уведомлений Apprise API

APKPIPE_NTFY_TOPIC

""

Идентификатор темы Ntfy для push-уведомлений


⚡ Движки загрузки и резолверы

Уровень 1: Real-Debrid API

APKPipe нативно аутентифицируется с REST API Real-Debrid /unrestrict/link. Когда сообщение на форуме содержит зеркала (Rapidgator, Uploady, DropGalaxy, Mega, Katfile и т. д.), Real-Debrid разблокирует ссылку в высокоскоростной прямой URL CDN.

Для настройки Real-Debrid:

  1. Сгенерируйте API-токен на real-debrid.com/apitoken.

  2. Установите APKPIPE_REAL_DEBRID_API_TOKEN=your_token в вашем окружении или через вкладку «Настройки» веб-интерфейса.

Уровень 2: Headless JDownloader 2

Для хостингов, не поддерживаемых Real-Debrid, или требующих специализированных дешифраторов, APKPipe подключается к headless-экземплярам JDownloader 2 через:

  • MyJDownloader Cloud API: Отправляет пакеты загрузки напрямую на ваше подключённое устройство.

  • Каталог наблюдения Linkgrabber: Помещает инструкции .crawljob в общую папку.

Уровень 3: Playwright Scraper Client

Когда целевые страницы загрузки защищены JavaScript-редиректами или облачной защитой, APKPipe отправляет задачи оценки страницы в playwright-csharp-scraper (http://scraper:8080), который оценивает DOM и извлекает финальные прямые зеркала загрузки.


🔗 Интеграции для Homelab

Хранилище Nextcloud и автосканирование OCC

APKPipe форматирует и размещает файлы в вашем каталоге хранилища Nextcloud:

/downloads/
├── Spotify/
│   └── Spotify v8.9.18.534 [Balatan].apk
└── Nova Launcher/
    └── Nova Launcher v8.0.18 [Prime].apk

Чтобы сообщить Nextcloud о недавно загруженных файлах, не дожидаясь фоновых задач Nextcloud, APKPipe выполняет occ files:scan:

  • Docker Exec (рекомендуется): Передайте Docker-сокет /var/run/docker.sock и установите:

    APKPIPE_NEXTCLOUD_OCC_COMMAND=docker exec nextcloud-aio-nextcloud sudo -u www-data php /var/www/html/occ files:scan --path="{path}"
  • CLI / Host Exec: Прямой вызов команды, если APKPipe запущен непосредственно на хосте.

Push-уведомления Apprise и Ntfy

APKPipe отправляет структурированные уведомления о событиях:

  • 🔍 feed_matched: Обнаружен выпуск, соответствующий правилу списка отслеживания.

  • ⬇️ download_started: Разблокирование ссылки и запуск потоковой загрузки.

  • ✅ download_completed: Архив извлечён, файл размещён, сканирование OCC завершено.

  • ❌ download_failed: Детали ошибки и причина сбоя.

Поддерживаемые конечные точки уведомлений:

  • Apprise API: http://apprise:8000/notify/apprise

  • Ntfy: https://ntfy.sh/your-topic или собственный сервер Ntfy.


🤖 Сервер Model Context Protocol (MCP)

APKPipe предоставляет нативный MCP-сервер 2024-11-05, позволяющий AI-ассистентам (Claude Desktop, Cursor, Antigravity mcp-router) автономно управлять списками отслеживания, просматривать каналы, запускать опросы и загружать выпуски.

Доступные MCP-инструменты

Имя инструмента

Описание

Ключевые параметры

apkpipe__list_watchlist

Список отслеживаемых приложений

enabled_only, category, query

apkpipe__add_to_watchlist

Добавить новое приложение для отслеживания

app_name, package_name, title_regex, min_version, releaser_whitelist

apkpipe__remove_from_watchlist

Отключить или удалить запись списка

watchlist_id, app_name, delete

apkpipe__search_feed

Поиск по кэшированным или живым RSS-каналам

query, is_regex, feed_url, limit

apkpipe__trigger_poll

Запустить цикл опроса каналов вручную

feed_id (необязательно)

apkpipe__download_url

Вручную отправить ссылку на загрузку

url, app_name, version, releaser

apkpipe__get_history

Получить историю загрузок и журналы аудита

limit, status, query

apkpipe__get_system_status

Запрос состояния, статистики БД, использования хранилища

Нет

Настройка AI-агента

Добавьте APKPipe в ваш claude_desktop_config.json или mcp-router:

{
  "mcpServers": {
    "apkpipe": {
      "command": "python",
      "args": ["-m", "apkpipe.mcp.server"],
      "env": {
        "APKPIPE_DATABASE_URL": "sqlite+aiosqlite:////data/apkpipe.db",
        "APKPIPE_DOWNLOAD_DIR": "/downloads"
      }
    }
  }
}

Или подключитесь через конечную точку Streamable HTTP / SSE:

http://localhost:8429/mcp/sse

🌐 Справочник REST API

Интерактивный интерфейс OpenAPI / Swagger доступен по адресу http://localhost:8429/docs.

Конечные точки списка отслеживания

  • GET /api/watchlist — Список всех элементов списка отслеживания с необязательным поиском/фильтрацией.

  • POST /api/watchlist — Добавить новое приложение в список отслеживания.

  • GET /api/watchlist/{id} — Получить конкретную запись списка отслеживания.

  • PUT /api/watchlist/{id} — Обновить элемент списка отслеживания.

  • DELETE /api/watchlist/{id} — Удалить запись списка отслеживания.

Конечные точки источников каналов

  • GET /api/feeds — Список всех настроенных источников RSS-лент.

  • POST /api/feeds — Добавить новый источник RSS-ленты.

  • POST /api/feeds/{id}/poll — Запустить немедленный опрос конкретной ленты.

  • POST /api/feeds/poll-all — Запустить опрос всех активных источников лент.

Конечные точки загрузок и истории

  • GET /api/downloads/queue — Список активных задач в конвейере загрузок.

  • GET /api/downloads/history — Список завершённых, неудачных и исторических загрузок.

  • POST /api/downloads/manual — Запустить немедленную загрузку по прямой/зеркальной ссылке.

  • POST /api/downloads/{task_id}/retry — Повторить неудачную задачу загрузки.

Конечные точки системы и состояния

  • GET /health — Проверка состояния системы.

  • GET /api/settings — Получить текущие настройки приложения.

  • POST /api/settings — Обновить конфигурацию во время выполнения.


🖥️ Веб-интерфейс панели управления

APKPipe включает встроенный веб-интерфейс, доступный на порту 8429:

  • Панель управления (/): Обзор метрик, статус активного опроса, последние загрузки и системное хранилище.

  • Список отслеживания (/watchlist): Добавление, редактирование, фильтрация и удаление отслеживаемых приложений.

  • Источники лент (/feeds): Управление RSS-ссылками, частотой опроса и запуск ручной синхронизации.

  • История (/history): Журнал аудита завершённых загрузок, времени выполнения, размеров файлов и следов ошибок.

  • Настройки (/settings): Настройка токенов Real-Debrid, путей Nextcloud OCC и хуков уведомлений.


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

Локальная настройка

# Clone repository
git clone https://github.com/spelech/apkpipe.git
cd apkpipe

# Create and activate Python virtual environment
python3 -m venv .venv
source .venv/bin/activate

# Install development dependencies and editable package
pip install -r requirements-dev.txt
pip install -e .

Запуск набора тестов и покрытия

Обеспечение покрытия строк ≥ 80%:

# Run pytest with coverage report
pytest --cov=src/apkpipe --cov-report=term-missing tests/

Запуск локального сервера

# Start FastAPI application with live reloading
uvicorn apkpipe.main:app --host 0.0.0.0 --port 8000 --reload

📄 Лицензия

Этот проект лицензирован под лицензией MIT. Подробности см. в LICENSE.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server that enables AI agents to watch and analyze videos from 1800+ sources, with persistent indexing, OCR, transcription, and a self-verification loop for debugging.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Unified MCP server for media acquisition, subtitle automation, and agent-run media workflows, enabling downloads via Prowlarr/qBittorrent and subtitle translation/sidecar creation.
    1
    MIT