Skip to content

langchou/informer-py

Repository files navigation

Chiphell 二手区监控 - Python 版本

一个功能强大的 Chiphell 论坛二手交易区监控工具,基于 Python 实现,集成了关键词匹配、多机器人钉钉通知、Web 管理界面、LLM 内容分析等高级功能。

✨ 功能特点

  • 🚀 实时监控: 准实时监控 Chiphell 二手交易区的新帖子。
  • 🌐 Web 管理界面: 提供图形化界面,轻松管理机器人、用户、关键词和系统配置,支持密码保护和安全验证。
  • 🤖 多机器人管理: 支持配置多个钉钉机器人,并将用户和关键词分配给特定机器人。
  • 🎯 高级关键词匹配:
    • 为不同用户设置独立的关键词。
    • 支持设置“全局”机器人,接收所有新帖通知。
    • 支持为用户设置“总是@”模式,无论是否匹配关键词都会收到通知。
  • 🧠 LLM 智能分析: (可选) 对接大语言模型(如 OpenAI、Gemini 等),自动从帖子内容中提取商品名称、价格等关键信息。
  • 🔄 智能代理池: 支持对接代理池 API,有效规避访问限制。
  • 🔔 灵活的通知:
    • 批量合并通知,避免消息轰炸。
    • 支持对指定用户进行 @ 提醒。
    • 用户订阅到期前自动发送提醒。
  • 🗃️ 数据持久化: 使用 SQLite 存储已处理的帖子,防止重复通知。
  • 🔐 安全可靠: 支持登录密码、登录防爆破、Cloudflare Turnstile 人机验证。
  • 🐳 Docker 支持: 提供 docker-compose 配置,实现一键部署。

🚀 快速开始

方法一:Docker(推荐)

最简单、最推荐的部署方式。

  1. 克隆仓库

    git clone https://github.com/langchou/informer-py.git
    cd informer-py
  2. 创建并编辑配置

    # 复制配置文件模板
    cp data/config_example.yaml data/config.yaml
    
    # 根据下方“配置说明”编辑配置文件
    nano data/config.yaml
  3. 启动服务

    docker-compose up -d
  4. 访问 Web 界面 服务启动后,在浏览器中打开 http://<你的服务器IP>:5000 即可访问 Web 管理界面。

Docker 相关命令

# 查看实时日志
docker logs -f informer-py-app-1

# 停止服务
docker-compose down

# 更新镜像并重启
docker-compose pull
docker-compose up -d --force-recreate

# 重启服务
docker-compose restart

方法二:本地安装

  1. 克隆仓库

    git clone https://github.com/langchou/informer-py.git
    cd informer-py
  2. 安装依赖 建议使用 uvpip 安装。

    # 使用 uv
    uv pip install -r requirements.txt
    
    # 或者使用 pip
    pip install -r requirements.txt
  3. 创建并编辑配置

    mkdir -p data
    cp data/config_example.yaml data/config.yaml
    nano data/config.yaml
  4. 启动程序

    python -m informer.main

    程序将同时启动后台监控和 Web 服务。访问 http://127.0.0.1:5000

⚙️ 配置说明

核心配置文件为 data/config.yaml。以下是一个完整的配置示例:

# Web界面密码,留空表示无需密码
web_password: "your_strong_password"

# Cloudflare Turnstile 人机验证 (可选)
turnstile:
  enabled: false
  site_key: "your_site_key"
  secret_key: "your_secret_key"

# 日志配置
log_config:
  file: "logs/app.log"
  max_size: 10
  max_backups: 5
  max_age: 30
  compress: true
  level: "INFO"

# 钉钉机器人配置 (核心)
dingtalk:
  robots:
    - name: "主力监控机器人"
      token: "your_dingtalk_token_1"
      secret: "your_dingtalk_secret_1"
      enabled: true # 是否启用此机器人
      receive_all: false # 是否接收所有新帖,无论有无关键词匹配
      users:
        "13800138000": # 用户手机号
          keywords: ["4090", "3080ti", "显卡"] # 关键词列表
          always_at: false # 无论是否匹配关键词,都@此用户
          is_permanent: true # 是否为永久用户
          expire_date: "" # 到期日期,格式 YYYY-MM-DD
        "13900139000":
          keywords: ["NUC", "ITX"]
          always_at: true
          is_permanent: false
          expire_date: "2025-12-31"
    - name: "全局通知机器人"
      token: "your_dingtalk_token_2"
      secret: "your_dingtalk_secret_2"
      enabled: true
      receive_all: true # 此机器人将接收所有新帖
      users: {}

# 代理池API,留空表示不使用
proxy_pool_api: ""

# Chiphell 网站的 Cookies
cookies: "your_cookies_string"

# 监控循环的等待时间范围(秒)
wait_time_range:
  min: 30
  max: 60

# LLM 分析器配置 (可选)
llm_config:
  enabled: false # 是否启用LLM分析
  provider: "openai" # 支持 openai, moonshot, gemini 等
  model: "gpt-4-turbo" # 模型名称
  api_key: "sk-your_openai_api_key"
  base_url: "https://api.openai.com/v1" # 可选,用于代理

🏗️ 项目结构

informer-py/
├── data/
│   └── config_example.yaml # 配置模板
├── informer/               # 主程序包
│   ├── __init__.py
│   ├── config.py           # 配置加载与数据模型
│   ├── database.py         # 数据库操作 (SQLite)
│   ├── expiration_manager.py # 用户到期管理
│   ├── fetcher.py          # 网页抓取与解析
│   ├── llm_analyzer.py     # LLM 内容分析器
│   ├── logger.py           # 日志配置
│   ├── main.py             # 主程序入口 (Flask Web App)
│   ├── monitor.py          # 核心监控器
│   ├── notifier.py         # 钉钉通知管理器
│   └── proxy_manager.py    # 代理管理器
├── tests/                  # 测试目录
├── web/                    # Web 界面文件
│   ├── static/
│   └── templates/
├── .gitignore
├── docker-compose.yml      # Docker Compose 配置
├── Dockerfile
├── pyproject.toml          # 项目元数据与依赖
├── README.md               # 本文档
└── requirements.txt        # 依赖列表 (用于 pip)

⚠️ 注意事项

  1. Cookie 有效期: Chiphell 的 Cookie 有一定的有效期,失效后会导致抓取失败。请定期通过浏览器获取最新的 Cookie 并更新到配置中。
  2. 代理使用: 仅在访问受限时启用代理。请确保你的代理池服务稳定可靠。
  3. 安全性: 如果将 Web 界面暴露在公网,请务必设置一个强壮的 web_password

⚖️ 免责声明

本工具仅用于学习和技术研究目的,请勿用于任何非法用途。所有因使用本工具而产生的任何后果,由使用者自行承担。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages