feat(jm): 新增 JM 漫画下载打包服务(9004,移植自 qqbot jm 模块)

- source/jm/jm.py:aiohttp + jmcomic,GET /jm/get_comic?id=xxx[&range=起-止]
  下载至 cache/jm 隐藏暂存目录 → webp 转 jpg 打包 ZIP → HTTP 直返 → 600s 延时删除
  单次上限 30 章;per-album 锁防并发;cache_sweep 兜底清理;/jm/cache_info 运维接口
- source/main.py:聚合层注册 /jm/get_comic(新增 JM_BACKEND,复用 proxy())
- systemd/jm.service:独立系统服务(Restart=always,日志 /var/log/jm.log)
- README / 部署与运维文档同步更新
This commit is contained in:
RRRosmontis
2026-09-23 10:58:48 +08:00
parent 9ba194ae97
commit 9ecbbbc6d8
5 changed files with 367 additions and 15 deletions
+10
View File
@@ -4,6 +4,7 @@ from aiohttp import web, ClientSession, ClientTimeout
PIXIV_BACKEND = "http://127.0.0.1:9007"
BILIBILI_BACKEND = "http://127.0.0.1:9006"
DUFE_BACKEND = "http://127.0.0.1:9005"
JM_BACKEND = "http://127.0.0.1:9004"
async def handle_pixiv(request):
@@ -30,6 +31,14 @@ async def handle_dufe_sign_in(request):
return await proxy_forward(request, target)
async def handle_jm(request):
qs = request.query_string
target = f"{JM_BACKEND}/jm/get_comic"
if qs:
target += "?" + qs
return await proxy(request, target)
async def proxy(request, target):
timeout = ClientTimeout(total=300)
async with ClientSession(timeout=timeout) as session:
@@ -92,6 +101,7 @@ app.router.add_get("/pixiv/get_image", handle_pixiv)
app.router.add_get("/bilibili/get_video", handle_bilibili)
app.router.add_get("/dufe/ginkgostu_sign_in", handle_dufe_sign_in)
app.router.add_post("/dufe/ginkgostu_sign_in", handle_dufe_sign_in)
app.router.add_get("/jm/get_comic", handle_jm)
if __name__ == "__main__":
web.run_app(app, host="127.0.0.1", port=9008)