ai-goofish-monitor README

The project's README from github.com/Usagi-org/ai-goofish-monitor. As one markdown file: README.md.

闲鱼智能监控系统

[中文] | English

基于 Playwright 和 AI 的闲鱼多任务实时监控,提供完整的 Web 管理界面。

核心特性

截图

监控概览 任务管理 结果查看 通知推送

🐳 Docker 部署(推荐)

git clone https://github.com/Usagi-org/ai-goofish-monitor && cd ai-goofish-monitor
cp .env.example .env
vim .env # 填写相关配置项
docker compose up -d
docker compose logs -f app
docker compose down

如果镜像无法访问或下载速度慢,可尝试使用加速:


docker pull ghcr.nju.edu.cn/usagi-org/ai-goofish:latest
docker tag ghcr.nju.edu.cn/usagi-org/ai-goofish:latest ghcr.io/usagi-org/ai-goofish:latest
docker compose up -d

数据存储与迁移

最少配置

变量 说明 必填
OPENAI_API_KEY AI 模型 API Key 是
OPENAI_BASE_URL OpenAI 兼容接口地址 是
OPENAI_MODEL_NAME 支持图片输入的模型名称 是
WEB_USERNAME / WEB_PASSWORD Web UI 登录账号密码,默认 admin/admin123 否

其余配置见下方“配置说明”。

第一次使用

  1. 打开默认 Web UI http://127.0.0.1:8000 并登录。
  2. 进入“闲鱼账号管理”,使用 Chrome 扩展 导出并粘贴闲鱼登录态 JSON。
  3. 登录态文件会保存到 state/ 目录,例如 state/acc_1.json。
  4. 回到“任务管理”,创建任务并绑定账号后即可运行。

创建第一个任务

用户使用说明

点击展开 Web UI 功能说明

任务管理

  • 支持 AI 创建、关键词规则、价格范围、新发布范围、区域筛选、账号绑定、定时规则。
  • AI 任务创建是后台 job 流程,提交后会打开单独的进度弹窗。
  • 区域筛选会显著缩小结果集,默认留空。

账号管理

  • 支持导入、更新、删除闲鱼账号登录态。
  • 每个任务可指定账号,也可不绑定并交给系统自动选择。

结果查看与运行日志

  • 结果页和导出功能现在从 SQLite 查询,不再直接扫描 jsonl 文件。
  • 日志页按任务展示运行过程,便于排查登录态失效、风控和 AI 调用问题。

系统设置

  • 可查看系统状态、编辑 Prompt、调整代理与轮换相关配置。

开发者开发

环境要求

git clone https://github.com/Usagi-org/ai-goofish-monitor
cd ai-goofish-monitor
cp .env.example .env

一键启动

chmod +x start.sh
./start.sh

start.sh 会先检查 Playwright CLI 和浏览器前置条件;在前置条件满足后自动安装项目依赖、构建前端、复制构建产物并启动后端。

手动启动

# 后端
python -m src.app
# 或
uvicorn src.app:app --host 0.0.0.0 --port 8000 --reload

# 前端
cd web-ui
npm install
npm run dev

测试与校验

PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest
cd web-ui && npm run build

任务创建 API

点击展开 API 行为说明
  • POST /api/tasks/generate
    • decision_mode=ai:返回 202 和 job,需要继续轮询进度。
    • decision_mode=keyword:直接返回已创建任务。
  • GET /api/tasks/generate-jobs/{job_id}:查询 AI 任务生成进度。
  • POST /auth/status:校验 Web UI 登录凭据。

配置说明

点击展开常用配置项

AI 与运行时

  • OPENAI_API_KEY / OPENAI_BASE_URL / OPENAI_MODEL_NAME:AI 模型接入必填项。
  • PROXY_URL:为 AI 请求单独指定 HTTP/SOCKS5 代理。
  • RUN_HEADLESS:是否以无头模式运行爬虫;Docker 中应保持 true。
  • SERVER_PORT:后端监听端口,默认 8000。
  • LOGIN_IS_EDGE:本地环境可切换为 Edge 内核;Docker 镜像未内置 Edge,容器内会固定使用 Chromium。
  • PCURL_TO_MOBILE:是否将 PC 商品链接转换为移动端链接。

通知

  • NTFY_TOPIC_URL
  • GOTIFY_URL / GOTIFY_TOKEN
  • BARK_URL
  • WX_BOT_URL
  • TELEGRAM_BOT_TOKEN / TELEGRAM_CHAT_ID / TELEGRAM_API_BASE_URL
  • WEBHOOK_*

代理轮换与失败保护

  • PROXY_ROTATION_ENABLED
  • PROXY_ROTATION_MODE
  • PROXY_POOL
  • PROXY_ROTATION_RETRY_LIMIT
  • PROXY_BLACKLIST_TTL
  • TASK_FAILURE_THRESHOLD
  • TASK_FAILURE_PAUSE_SECONDS
  • TASK_FAILURE_GUARD_PATH

完整示例见 .env.example。

Web 界面认证

点击展开认证说明
  • Web UI 当前使用登录页收集账号密码,并通过 POST /auth/status 校验。
  • 登录成功后,前端会在浏览器本地保存登录状态,用于路由守卫和 WebSocket 初始化。
  • 默认账号密码为 admin/admin123,生产环境请务必修改。

🚀 工作流程

下图描述了单个监控任务从启动到完成的核心处理逻辑。主服务运行于 src.app,按用户操作或定时调度启动一个或多个任务进程。

graph TD
    A[启动监控任务] --> B[选择账号/代理配置];
    B --> C[任务: 搜索商品];
    C --> D{发现新商品?};
    D -- 是 --> E[抓取商品详情 & 卖家信息];
    E --> F[下载商品图片];
    F --> G[调用AI进行分析];
    G --> H{AI是否推荐?};
    H -- 是 --> I[发送通知];
    H -- 否 --> J[保存记录到 SQLite];
    I --> J;
    D -- 否 --> K[翻页/等待];
    K --> C;
    J --> C;
    C --> L{触发风控/异常?};
    L -- 是 --> M[账号/代理轮换并重试];
    M --> C;

常见问题

点击展开常见问题

AI 任务创建为什么不是立即完成?

AI 模式会先生成分析标准,再创建任务。现在该流程已改为后台 job,提交后会显示独立进度弹窗,避免表单长时间卡住。

区域筛选为什么默认建议留空?

区域筛选会显著减少搜索结果,适合明确只看某个区域的场景。若你先验证整体市场,建议先不填。

本地页面打开后提示前端构建产物不存在?

说明根目录 dist/ 缺失。可直接执行 ./start.sh,或先在 web-ui/ 里执行 npm run build,再确认构建产物已复制到仓库根目录。

./start.sh 为什么提示缺少 Playwright 或浏览器?

这是脚本的前置检查。请先安装 Playwright CLI 与 Chromium,并确保系统中可用 Chrome / Edge(Linux 环境也可用 Chromium),然后重新执行 ./start.sh。

致谢

点击展开致谢内容

本项目在开发过程中参考了以下优秀项目,特此感谢:

以及感谢LinuxDo相关人员的脚本贡献

以及感谢 LinuxDo 社区。

以及感谢 ClaudeCode/Gemini/Codex 等模型工具,解放双手 体验Vibe Coding的快乐。

注意事项

点击展开注意事项详情
  • 请遵守闲鱼的用户协议和robots.txt规则,不要进行过于频繁的请求,以免对服务器造成负担或导致账号被限制。
  • 本项目仅供学习和技术研究使用,请勿用于非法用途。
  • 本项目采用 MIT 许可证 发布,按"现状"提供,不提供任何形式的担保。
  • 项目作者及贡献者不对因使用本软件而导致的任何直接、间接、附带或特殊的损害或损失承担责任。
  • 如需了解更多详细信息,请查看 免责声明 文件。

Star History

Star History Chart

Alt

ai-goofish-monitor (Usagi-org/ai-goofish-monitor)

Searching Database…

What is this?A self-hosted monitoring system for Xianyu (闲鱼, China's largest secondhand marketplace) that scrapes listings with Playwright and uses AI to analyze and filter products in real time or on a schedule, with a full web management UI.
Is this a command-line scraper or a full web application?It's a full self-hosted web application: a FastAPI backend plus a built web frontend, with Playwright running headless in the background to scrape and analyze listings.
How do I get it running?The recommended way is Docker Compose with the prebuilt image (ghcr.io/usagi-org/ai-goofish:latest), which bundles Chromium. For manual setup, run ./start.sh, which checks for Playwright/Chromium, installs dependencies, builds the frontend, and starts the FastAPI backend.
Do I need an OpenAI-style API key and what else is required?Yes — you must set OPENAI_API_KEY, OPENAI_BASE_URL, and OPENAI_MODEL_NAME (a model that accepts image input) for AI analysis. For non-Docker setup you also need Python 3.10+, Node.js/npm, and the Playwright CLI with Chromium.
What's the catch before I can start monitoring?You first need to export your Xianyu login session as a cookie/JSON file using a Chrome extension and import it in Account Management before any task will actually run.
What AI providers can I use for analysis?Any OpenAI-compatible API endpoint with a vision-capable model works, since OPENAI_BASE_URL and OPENAI_MODEL_NAME are configurable — this covers providers like OpenAI or Gemini-compatible gateways.
What notification channels can alert me about matches?ntfy.sh, Bark, WeCom (企业微信), Telegram, Gotify, and generic Webhook are all supported out of the box.
Can I run multiple searches at the same time?Yes, each task has its own keywords, price range, filters, and AI prompt, and tasks can run concurrently with independent account bindings.
Does it handle proxy or account failures automatically?Yes — it supports a rotating proxy pool with retry limits and blacklist TTL, plus automatic task pausing after a configurable number of consecutive failures.
Creator
Usagi-org
Size
9.4 MB
Stars
14.9K
Age
1y
Commits · 90 Days