Skip to main content
Glama
spelech
by spelech

📦 APKPipe

APKとRSSリリースパイプラインを自動化。Real-Debridのアンリストリクト、ヘッドレスJDownloaderフォールバック、Nextcloudストレージ取り込み、Appriseアラート、Webダッシュボード、ネイティブMCPサーバーを統合。

CI Coverage Python Docker License


📖 目次


🌟 概要

Nextcloudやローカルネットワークストレージ上で最新のセルフホスト型Androidアプリライブラリを維持するには、従来は手間のかかる手作業が必要でした。リリースフォーラム(Mobilismなど)の閲覧、バージョン文字列の確認、マルチホスターのミラーリンク(Rapidgator、Uploady、DropGalaxy)の回避、アーカイブの解凍、APKのリネーム、適切なディレクトリへの移動、Nextcloudのファイルインデックスのトリガー、リリース履歴の追跡などです。

APKPipe はこのライフサイクルを完全に自動化します。

  1. RSSフィードを定期的に監視し、新しいアプリのリリースを検出します。

  2. カスタマイズ可能なウォッチリストと照合し、正規表現パターン、リリーサーのホワイトリスト([Balatan][derrin][RockMODS])、SemVerバージョンゲートを使用します。

  3. 3層戦略(Real-Debrid API $\rightarrow$ JDownloader 2 $\rightarrow$ Playwrightスクレイパー)でダウンロードリンクを解決します。

  4. アーカイブをダウンロードして解凍し(.zip.rar.7z.tar)、APKバイナリを抽出します。

  5. バイナリを整理し、クリーンで標準化されたディレクトリ構造({DOWNLOAD_DIR}/{AppName}/{AppName} v{Version} [{Releaser}].apk)に配置します。

  6. Nextcloud OCCスキャンコマンドocc files:scan)を実行し、ファイルがモバイルNextcloudアプリに即座に表示されるようにします。

  7. Appriseを介してDiscord、Telegram、Pushover、Ntfyにリッチなステータスアラートをプッシュします。

  8. ネイティブMCPサーバーツールとWebダッシュボードを公開し、人間による管理と自律的な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フィードソースを定期的にポーリングし、重複を排除します。

  • 🎯 細粒度マッチャー: 名前または正規表現で特定のアプリをターゲットにし、最小バージョンしきい値を要求し、信頼できるリリーサータグでフィルタリングします。

  • マルチティアリンクアンリストリクト:

    • ティア1 (Real-Debrid): 50以上のファイルホスター向けの直接高速APIアンリストリクト。

    • ティア2 (JDownloader 2): ヘッドレスMyJDownloaderクラウドAPIまたはローカルフォルダーリンクグラバー。

    • ティア3 (Playwrightスクレイパー): 動的ランディングページ向けのヘッドレスブラウザスクレイパーフォールバック。

  • 📦 自動アーカイブ抽出: .zip.rar.7z.tar.gzアーカイブを透過的に処理し、ネストされた.apkバイナリを抽出します。

  • 📂 Nextcloud OCC統合: Nextcloudユーザーディレクトリへのシームレスな配置と、自動occ files:scan呼び出し。

  • 🔔 マルチチャネルホームラボ通知: Apprise APIとNtfyを介したプッシュ通知。リリースメタデータ、ファイルサイズ、ダウンロード時間を含みます。

  • 🤖 ネイティブModel Context Protocol (MCP): Claude Desktop、Cursor、mcp-routerと互換性のある8つの組み込みツール。

  • 💻 レスポンシブWebダッシュボード: 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(Caddy経由でルーティングする場合はhttps://apk.wileyriley.com)を開きます。


環境変数

変数

デフォルト

説明

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

""

Real-Debrid APIトークン(real-debrid.com/apitokenから)

APKPIPE_JDOWNLOADER_EMAIL

""

MyJDownloaderアカウントメール(オプションのティア2)

APKPIPE_JDOWNLOADER_PASSWORD

""

MyJDownloaderアカウントパスワード

APKPIPE_JDOWNLOADER_DEVICE_NAME

""

MyJDownloaderターゲットデバイス名

APKPIPE_JDOWNLOADER_WATCH_DIR

""

ヘッドレスJDownloader .crawljobファイル用の監視ディレクトリ

APKPIPE_SCRAPER_URL

http://scraper:8080

PlaywrightヘッドレススクレイパーサービスのURL

APKPIPE_NEXTCLOUD_URL

""

NextcloudサーバーのベースURL

APKPIPE_NEXTCLOUD_TOKEN

""

Nextcloud WebDAV / API認証トークン

APKPIPE_NEXTCLOUD_OCC_COMMAND

""

OCCスキャンコマンドテンプレート({path}が置換されます)

APKPIPE_APPRISE_URL

""

Apprise API通知エンドポイント

APKPIPE_NTFY_TOPIC

""

プッシュ通知用のNtfyトピック識別子


⚡ ダウンロードエンジンとリゾルバー

ティア1: Real-Debrid API

APKPipeはReal-DebridのREST API /unrestrict/linkとネイティブに認証します。フォーラム投稿にミラー(Rapidgator、Uploady、DropGalaxy、Mega、Katfileなど)が含まれている場合、Real-Debridはリンクを高速な直接CDN URLにアンリストリクトします。

Real-Debridの設定方法:

  1. real-debrid.com/apitokenでAPIトークンを生成します。

  2. 環境変数またはWeb UIの設定タブでAPKPIPE_REAL_DEBRID_API_TOKEN=your_tokenを設定します。

ティア2: ヘッドレスJDownloader 2

Real-Debridがサポートしていないホスターや、特殊なデクリプターが必要な場合、APKPipeはヘッドレスJDownloader 2インスタンスに接続します:

  • MyJDownloaderクラウドAPI: 接続されたデバイスにダウンロードパッケージを直接送信します。

  • リンクグラバー監視ディレクトリ: 共有フォルダーに.crawljob命令をドロップします。

ティア3: Playwrightスクレイパークライアント

ダウンロードランディングページがJavaScriptリダイレクトやクラウド保護で保護されている場合、APKPipeはページ評価タスクをplaywright-csharp-scraperhttp://scraper:8080)にディスパッチし、DOMを評価して最終的な直接ダウンロードミラーを抽出します。


🔗 ホームラボ統合

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 / ホスト実行: APKPipeがホスト上で直接実行される場合の直接コマンド呼び出し。

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_onlycategoryquery

apkpipe__add_to_watchlist

監視する新しいアプリを追加

app_namepackage_nametitle_regexmin_versionreleaser_whitelist

apkpipe__remove_from_watchlist

ウォッチリストエントリを無効化または削除

watchlist_idapp_namedelete

apkpipe__search_feed

キャッシュまたはライブRSSフィードを検索

queryis_regexfeed_urllimit

apkpipe__trigger_poll

フィードポーリングサイクルを手動実行

feed_id(オプション)

apkpipe__download_url

ダウンロードリンクを手動送信

urlapp_nameversionreleaser

apkpipe__get_history

ダウンロード履歴と監査ログを取得

limitstatusquery

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 UIはhttp://localhost:8429/docsで利用できます。

ウォッチリストエンドポイント

  • GET /api/watchlist - オプションの検索/フィルタリング付きで全ウォッチリスト項目を一覧表示。

  • POST /api/watchlist - ウォッチリストに新しいアプリを追加。

  • GET /api/watchlist/{id} - 特定のウォッチリストエントリを取得。

  • PUT /api/watchlist/{id} - ウォッチリスト項目を更新。

  • DELETE /api/watchlist/{id} - ウォッチリストエントリを削除。

フィードソースエンドポイント

APIエンドポイント

  • 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 - ダイレクト/ミラーURLからの即時ダウンロードをトリガーします。

  • POST /api/downloads/{task_id}/retry - 失敗したダウンロードタスクを再試行します。

システムとヘルスのエンドポイント

  • GET /health - システムのヘルスチェックプローブ。

  • GET /api/settings - 現在のアプリケーション設定を取得します。

  • POST /api/settings - ランタイム設定を更新します。


🖥️ WebダッシュボードUI

APKPipeには、ポート8429でアクセス可能な組み込みのWeb UIが含まれています:

  • ダッシュボード/):概要メトリクス、アクティブなポーリングステータス、最近のダウンロード、システムストレージ。

  • ウォッチリスト/watchlist):監視対象アプリケーションの追加、編集、フィルタリング、削除。

  • フィードソース/feeds):RSS URL、ポーリング頻度の管理、手動同期のトリガー。

  • 履歴/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を参照してください。

-
license - not tested
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

  • Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.

  • MCP server for Google Veo AI video generation

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/spelech/apkpipe'

If you have feedback or need assistance with the MCP directory API, please join our Discord server