用 AI 写 Python 二手 MacBook 价格提醒:合规数据与人工复核

用 AI 写 Python 二手 MacBook 价格提醒:合规数据与人工复核

站
站长
2026年3月31日 · 阅读 820 · 点赞 49 · 预计 6 分钟
分享:

用 AI 写 Python 二手 MacBook 价格提醒:合规数据与人工复核

很多旧教程会让脚本直接抓取二手平台的登录态页面,再承诺“不会封号”“稳定捡漏”。这两类承诺都不可靠:页面结构会变化,平台也可能限制自动访问;二手商品的成色、维修史和实际成交价更不能只靠标题判断。

> 本文只处理你合法取得的 CSV 或表格数据,不抓取登录态页面,不绕过验证码、频率限制或反自动化措施,也不承诺转卖收益。若平台提供官方导出、开放接口或通知功能,应优先使用平台提供的能力并遵守其规则。

先把目标写成可验收规则

一个能交付的价格提醒工具至少要明确以下内容:

  • 数据从哪里来,是否允许程序读取;

  • 哪些关键词必须出现,例如 M1、16GB;

  • 最高价格是多少;

  • 哪些词需要排除,例如“维修”“配件”“空机”;

  • 命中后输出到哪里;

  • 谁负责检查序列号、激活锁、维修史和实物状态。
  • 如果你准备把需求交给开发者,可以先用外包需求整理清单包 ¥29写清数据来源、筛选规则、通知方式和验收样例,避免把“帮我做个监控”变成无法报价的口头需求。

    准备一份可复核的 CSV

    把你手动收藏、获得授权导出或从其他合法来源取得的数据整理为 listings.csv:

    title,price,url,note,updated_at
    MacBook Air M1 8GB 256GB,4299,https://example.com/item/1,支持当面验机,2026-09-09 19:30
    MacBook Pro M1 维修机,3200,https://example.com/item/2,主板维修,2026-09-09 19:35
    MacBook Air M2 16GB 512GB,6399,https://example.com/item/3,有购买凭证,2026-09-09 19:40
    

    真实商品链接只保存在本地文件中。不要把手机号、聊天记录、收货地址或账号凭据写进 CSV。

    用 Python 做筛选和提醒

    下面的脚本需要 Python 3.10 或更高版本,只读取本地 CSV。它不会访问二手平台,也不会自动下单。

    import csv
    import json
    import os
    import re
    from pathlib import Path
    from urllib import request
    
    
    DATA_FILE = Path("listings.csv")
    MAX_PRICE = 5000
    REQUIRED_KEYWORDS = ("m1",)
    EXCLUDED_KEYWORDS = ("维修", "配件", "空机", "仅屏幕")
    
    
    def parse_price(value: str) -> float | None:
        match = re.search(r"\d+(?:\.\d+)?", value.replace(",", ""))
        return float(match.group()) if match else None
    
    
    def load_matches() -> list[dict[str, str]]:
        matches: list[dict[str, str]] = []
        with DATA_FILE.open("r", encoding="utf-8-sig", newline="") as file:
            for row in csv.DictReader(file):
                title = (row.get("title") or "").strip()
                normalized = title.lower()
                price = parse_price(row.get("price") or "")
                if price is None or price > MAX_PRICE:
                    continue
                if not all(keyword in normalized for keyword in REQUIRED_KEYWORDS):
                    continue
                if any(keyword in normalized for keyword in EXCLUDED_KEYWORDS):
                    continue
                matches.append({**row, "price": f"{price:.2f}"})
        return matches
    
    
    def notify(matches: list[dict[str, str]]) -> None:
        if not matches:
            print("本次没有符合条件的条目。")
            return
    
        lines = ["二手 MacBook 待人工复核:"]
        for item in matches:
            lines.append(f"- {item['title']} | ¥{item['price']} | {item.get('url', '')}")
        message = "\n".join(lines)
        print(message)
    
        webhook_url = os.getenv("WEBHOOK_URL", "").strip()
        if not webhook_url:
            return
    
        body = json.dumps({"text": message}, ensure_ascii=False).encode("utf-8")
        req = request.Request(
            webhook_url,
            data=body,
            headers={"Content-Type": "application/json"},
            method="POST",
        )
        with request.urlopen(req, timeout=8) as response:
            if response.status >= 300:
                raise RuntimeError(f"Webhook 返回 HTTP {response.status}")
    
    
    if __name__ == "__main__":
        if not DATA_FILE.exists():
            raise SystemExit("缺少 listings.csv")
        notify(load_matches())
    

    执行:

    python xianyu_alert.py
    

    不配置 WEBHOOK_URL 时,结果只打印在终端。不同通知服务的请求格式并不相同;启用 webhook 前,应按照你所使用服务的官方文档调整请求体,并把密钥放在环境变量中,不要写进代码或提交到 Git。

    怎么验证脚本不是“看起来能跑”

    准备四条固定测试数据:

  • 价格低于阈值且包含 M1,应命中;

  • 价格高于阈值,不应命中;

  • 标题含“维修”,不应命中;

  • 价格字段为空或格式错误,脚本不应崩溃。
  • 每次改筛选规则后都重复这四项。只有当数据来源本身允许自动更新时,才考虑使用系统定时任务;否则定时运行只会反复读取同一份旧 CSV。

    命中后仍要人工验机

    价格提醒只负责缩小候选范围,不负责判断交易是否值得。进一步核对至少包括:

  • 完整型号、内存、存储和年份;

  • 序列号与设备信息是否一致;

  • 电池健康、循环次数和充电状态;

  • 激活锁、企业管理或账号锁定情况;

  • 拆修、进水、扩容和配件来源;

  • 发票、购买记录、保修状态和退换约定;

  • 当面验机或平台担保交易是否可行。
  • 任何“必赚差价”“零风险”“不验机也能买”的说法都不应写进需求或验收标准。

    交给 AI 或开发者时这样描述

    请实现一个只读取本地 listings.csv 的 Python 筛选工具。
    不得访问闲鱼或其他二手平台页面,不得绕过登录、验证码或访问限制。
    输入字段为 title、price、url、note、updated_at。
    筛选规则为:标题包含 M1、价格不高于 5000 元,并排除维修、配件、空机。
    输出终端摘要;webhook 为可选能力,密钥只能从环境变量读取。
    请附 4 个固定测试样例和运行说明。
    

    这个版本的验收边界很清楚:数据输入、筛选结果、通知结果都能复查,也不会把平台访问风险和二手交易判断藏在一句“AI 自动监控”里。

    站
    站长
    人人都是程序员,站长
    ☕

    喜欢这条 tip?打赏作者一杯咖啡

    你的支持是持续更新的动力

    分享: