福建政采云工具包
福建省框架协议采购(框采)平台(zfcg.czt.fujian.gov.cn)的供应商与交易数据工具。能力对标京华云采技能包,核心是经销商画像——对话本地经销商前,先摸清它的客户群体、成交规模、业务覆盖。
七大能力(触发词)
| 能力 | 触发示例 | 命令 |
|------|---------|------|
| ① 搜商品(找guid) | "查联想M70z" / "联想台式机有哪些" / "罗列全部台式机" | python fujian_zfcg.py --find 联想M70z |
| ② 查经销商 | "查这个商品的经销商" / "电脑经销商有哪些" | python fujian_zfcg.py --dealers <guid> |
| ③ 交易记录+全分析 | "查交易记录" / "谁在卖、谁在买、什么价" | python fujian_zfcg.py --trade <guid[,guid]> |
| ④ 经销商画像(核心) | "分析这个赛道的经销商" / "对话前摸下底" | python fujian_zfcg.py --profile <guid> |
| ⑤ 官方导出 | "导出经销商 Excel" | python fujian_zfcg.py --export <guid> |
| ⑥ 供应商反查 | "某某公司代理了哪些商品" | python fujian_zfcg.py --supplier <公司名> |
| ⑦ 重建索引 | "重新跑全量索引"(30 天过期后) | python fujian_zfcg.py --rebuild-index |
登录(一键,无需手动复制 Cookie)
首次使用或 token 过期(约 4 小时),运行:
python login.py
自动打开浏览器 → 手动登录 → 回命令行按回车 → 登录态自动保存到 config.json。之后所有命令自动复用。
快速上手(3 步)
- 一键登录:
python login.py(自动开浏览器 → 登录 → 回车 → 登录态自动保存,无需手动复制 Cookie) - 说商品名搜 guid:
python fujian_zfcg.py --find 联想M70z(自动拆解品牌+型号,只列 M70z 不看 M70f) - 查经销商/画像:
python fujian_zfcg.py --profile <goodsPriceGuid>
已固化品类:台式机、笔记本(便携式计算机)、打印机(多功能一体机)。搜到新商品自动累积进
goods_map.json。
搜索增强(v1.2 核心)
--find 支持三种输入,自动拆解 + 本地二次过滤:
| 输入 | 行为 | 示例 |
|------|------|------|
| 大类罗列 | 空关键词罗列该品类全部商品(防反爬间隔) | --find "" --category 台式机 |
| 指定品牌 | 品牌词模糊匹配(联想→联想开天) | --find 联想 |
| 品牌+型号 | 自动拆解,型号前缀精确匹配,罗列全部配置 | --find 联想M70z → 只出 M70z 的 G2t-D594/G2t-D601 |
关键机制:接口 keyword 是"宽模糊"(搜"联想M70z"会把 M70 全系带出),脚本在本地做二次过滤——品牌别名表匹配 + 型号前缀精确匹配(大小写不敏感),点名 M70z 就绝不混入 M70f/M70d。结果按大型号分组打印,小型号(配置)单独摘出说明。
交易分析 7-Sheet(v1.2 新增)
--trade 支持逗号分隔多 guid 合并分析,输出 7 个 Sheet,每个分析 Sheet 带专业文字解读(红色标题+黑色解读):
| # | Sheet | 解读要点 | |---|-------|---------| | 1 | 概览总结 | 商品信息卡 + 总成交额/订单数/供应商数/客户数 + TOP3 供应商/客户 + 复购率 + 操作建议 | | 2 | 交易明细 | 全量明细(订单/供应商/客户/价格/数量/时间) | | 3 | 供应商分析 | 头部集中度(TOP3 占比)→ 集中高可重点谈判/低则比价 | | 4 | 客户分析 | 客户类型分布(医院/学校/政府/企业)+ 最大金主 + 跟进建议 | | 5 | 时间维度 | 按月聚合 + 采购节奏判断(开学季/财政年末) | | 6 | 价格分析 | 价格区间/均价/价差 → 议价空间判断 + 报价参考 | | 7 | 复购与关系 | 客户×供应商稳定关系 → 路径依赖识别,切入替换策略 |
深度解读衔接:交易分析输出的 TOP 客户/供应商,可再用「天机商查」技能(business-search)补工商背景(法人/注册/风险),提升画像深度。
供应商反查(v1.2 新增)
平台无纯供应商名反查接口(所有查询围绕 goodsPriceGuid),采用本地累积索引方案:
- 首次运行
python fujian_zfcg.py --rebuild-index:全品类(台式机 337 + 笔记本 + 打印机)跑一遍拉经销商,建supplier_index.json(供应商 → 代理商品映射)。防反爬:请求间隔随机 1.5~3 秒,约 40 分钟。 - 之后
python fujian_zfcg.py --supplier 公司名秒查该供应商代理了哪些商品(精确/包含匹配)。 - 有效期机制:索引带
__built_at__时间戳,30 天有效。反查时自动读时间戳,过期则提示重新--rebuild-index。
数据分析引擎(v1.3 已落地)
三层架构:fujian_zfcg.py(API 层)→ data_store.py + store/(本地 json5 分片数据仓库,增量 upsert 去重)→ analysis_engine.py(三粒度对比 × 5 维度 → 单 Excel 多 Sheet + AI 解读)。
数据仓库(data_store.py)
store/
├── store.index.json5 总索引(分片登记 + 覆盖率)
├── goods_台式/笔记本/打印机.json5 商品分片(guid 主键)
├── dealers_台式/笔记本/打印机.json5 挂靠+联系人分片(供应商名主键,联系人→型号映射)
├── trades_YYYYH#.json5 交易分片(orderGuid 主键,按半年切)
└── dim_客户渠道/渠道客户/客户品牌/渠道品牌.json5 维度分片(v1.3.3:--dims 重算,主体→关联方→{台数,金额,笔数},均按金额降序)
| 命令 | 说明 |
|------|------|
| python data_store.py --init | 建库 |
| python data_store.py --import-index | 从 supplier_index.json 导入初始商品+挂靠(不耗 API) |
| python data_store.py --sync [--category 台式计算机] [--full] | 增量同步(罗列商品→新 guid 拉经销商) |
| python data_store.py --sync-contacts [--brand 联想] [--category 台式计算机] | 补联系人电话(对库内已有商品拉经销商) |
| python data_store.py --sync-trades [--guid x] [--brand 联想] | 拉交易记录(orderGuid 去重,增量) |
| python data_store.py --dims | 重建 4 张维度分片(客户→渠道/渠道→客户/客户→品牌/渠道→品牌;本地重算不耗 API,交易更新后重跑刷新) |
| python data_store.py --stats | 统计 + 覆盖率 |
联系人→型号映射(头儿拍板格式):"联系人": {"张三": {"电话": "139...", "型号": [guid1, guid2]}, "李四": {"电话": "138...", "型号": [guid3]}}——多人多型号,电话以最新为准。
经销商清单导出(export_dealers.py,v1.4.1 新增)
合并 dealers_台式/笔记本.json5 + goods_*.json5(本地聚合,不耗 API),一键产出渠道可直接使用的 Excel。
| 命令 | 说明 |
|------|------|
| python export_dealers.py | 默认导出 经销商清单_全量.xlsx(台式+笔记本合并去重) |
| python export_dealers.py --category 台式 | 只导台式 |
| python export_dealers.py --out my.xlsx | 指定输出路径 |
全量交易拉取(sync_trades_targeted.py,v1.4.3 新增)
只拉「台式+笔记本」交易(避开打印机),每 25 个 guid 落盘防中断,--full 增量去重补新订单。
| 命令 | 说明 |
|------|------|
| python sync_trades_targeted.py | 只补缺口(未拉过的 guid) |
| python sync_trades_targeted.py --full | 全量重拉(已拉的仅补新订单,orderGuid 去重) |
实测:背景跑 704→1601 笔(台式 1522 笔 / 5115.3 万 / 11092 台;笔记本平台整体 0 成交)。拉完跑分析引擎出市场模板。
产出 3 Sheet:①经销商清单(全量,含联系方式/经营品牌/联想标记/联想型号清单,联想行黄色高亮,可筛选)②联想渠道(可触达)(603 家联想经销商,按联想型号数降序,核心出击名单)③汇总(总量/电话覆盖/品牌分布)。
实况(2026-09-03 补电话后):1113 家经销商 100% 有电话;603 家联想经销商为核心出击名单。无电话缺口已用 refresh_nophone.py 精准补齐(详见下)。
精准补电话(refresh_nophone.py,v1.4.2 新增)
当导出清单出现无电话经销商时,别跑全量 --sync-contacts(389 商品慢且费配额)。本脚本只重拉「无电话经销商」关联到的 guid(约 227 个),upsert_dealers 仅非空覆盖、原有电话不丢。
| 命令 | 说明 |
|------|------|
| python refresh_nophone.py | 精准补齐无电话经销商(需 config.json 有效 token;失效先 python login.py) |
实测:149 家无电话 → 0 家(全部补到),笔记本分片还新发现 12 家经销商。
地域深挖:交易 orgGuid 前 6 位 = 行政区划代码 → 地市/区县(如 350521 = 泉州市惠安县)。
分析引擎(analysis_engine.py)
3 种对比粒度(互斥,一次只能用一个):
| 模式 | 参数示例 | 用途 |
|------|---------|------|
| 单品牌全型号 | --brand 联想 | 看自家产品线全貌 |
| 多品牌对比 | --brands 联想,华为,浪潮 | 品牌间市场地位对比 |
| 跨品牌型号对比 | --models M70Z,W525,CE300Z | 竞品分析(不限品牌) |
5 个分析维度(--dims 可多选):概览总结 / 交易分析 / 渠道甄别(四象限)/ 客户分析(含地市)/ 市场格局(份额+CR5/CR10)。维度×粒度按兼容矩阵退化(渠道在多品牌退化、市场在单品牌退化)。
成交透视 Sheet(v1.3.3 引入;v1.4 起仅单品牌盘点模板沿用此格式,多品牌 --brands 改走上方市场分析模板):
品牌份额分析-by客户 / by渠道:双行表头(品牌名跨2列合并 + 数量|占比)、行内占比口径(该品牌台数/该行总台数)、品牌固定配色(联想绿/华为橙…)、占比列百分比格式客户&渠道匹配-客户维度 / 渠道&客户匹配-渠道维度:主体列纵向合并单元格(同客户/同渠道多行只显示首行)——识别并保留了参考表的合并单元格布局成交明细:宽表 + 自动筛选- 口径:主品牌归一化(联想开天/联想/LENOVO/开天/启天/昭阳 → 联想,列头展示
联想/Lenovo);单品牌分析时份额矩阵退化为单列(占比恒 100%),多品牌对比用--brands
双模板(v1.4.0,按粒度分流):
--brands多品牌 → 市场分析模板 9 Sheet(视角×架构去重:一页一决策,不同主体不同表格架构):导读(口径+导航+月度节奏)/ 品牌总览(榜式·三合一+SKU单产/渠道均产效率列)/ 区域战局(矩阵式·地市×品牌,每品牌双列=份额(万,无进度条)+占比(品牌色进度条,0.0%))/ 客户攻坚榜(榜式·主用品牌/状态[未渗透橙|联想客户绿]/行动[首攻A/B/C|加单|维护])/ 渠道招商榜(榜式·可转化台数+招商等级 S≥100台/A≥50/B≥20/已合作)/ 份额矩阵·by渠道 / 匹配×2 / 成交明细--brand/--models单品牌 → 盘点模板(旧结构:5 维度+四象限,下轮精简)- 占比进度条:所有份额/占比/市占列 = Excel 数据条(DataBar),多品牌矩阵按品牌列用各自品牌色(自动加深)
- 默认品牌排序(v1.4.3):所有分析品牌列顺序 = 联想第一、华为第二、其余按整体份额降序(新增
brand_order(),品牌总览/区域战局/份额矩阵by渠道 三处统一);区域战局每品牌拆「份额(万,纯数字无进度条)」+「占比(0.0%进度条)」双列,双行表头,不再单列"联想市占"尾列
口径定稿:成交额 = finalPrice × qty;qty≤0 金额记 0 并进异常清单;四象限切分用中位数(挂名型号数 ≥ 中位数 = 挂名多;实销笔数 >0 = 有实销;A 种子渠道 / B 缺货渠道 / C 可撬动 / D 边缘)。
用法:
python analysis_engine.py --brand 联想 --out 联想全系分析.xlsx
python analysis_engine.py --brands 联想,华为,浪潮 --dims 概览,交易,市场
python analysis_engine.py --models M70Z,W525,CE300Z --dims 概览,交易,渠道,市场
python analysis_engine.py --brand 联想 --guide channel --purpose territory # 引导词预设
python analysis_engine.py --fetch-only # 只拉数据(无人值守后台跑)
python analysis_engine.py --fill interpretations.json5 --out 原文件.xlsx # AI 解读回填
⚠️ 运行环境:analysis_engine/data_store 依赖 openpyxl + json5,用隔离 venv:
C:/Users/Administrator/.workbuddy/binaries/python/envs/default/Scripts/python.exe
分析引导词库(analyze_guides.json5)
默认组合(头儿 2026-09-01 拍板,写入技能默认):
| 维度 | 默认值(均支持多选) | |------|--------| | 角色 | 渠道拓展经理 | | 目的 | 找渠道 + 区域进攻 | | 风格 | 战略视角 + 犀利务实 | | 输出 | 报告式 |
- 多选语义(关键):所有维度可多选;选中的 = 主力视角(篇幅大、详细展开),没选中的 = 辅助参考(篇幅少、一句话带过)——不是不用,是降低占比
- 引导词 = 任务输入参数(启动时确定),不是输出后处理:显式参数 > 预设引用(--guide)> AI 代选 > 默认兜底,永远不等人选择,防任务超时
- 预设组合:default / channel / territory / intel / bid / finance / brief
- 数据拉取(--fetch-only 无人值守)与分析生成(读本地库秒级)解耦
- 本地模板只定规格,实际解读文字由 AI 生成:引擎产出
analyze_brief.json5(数据摘要+引导词+模板规格),AI 据此写解读 →--fill回填 Excel - 完整设计见
analysis_plan.md
关键经验速查(务必遵守)
- 鉴权 = HTTP Header
access_token(从 Cookie 提取 JWT),不是 Cookie、不是 Authorization。这是脱敏开关——带上它,公开接口也返回完整linkMan/linkMobile(不再******)。 - 商品搜索需
nsssjss签名头(已固化脚本,不绑定 timestamp 可长期复用;失效时从浏览器ignore/search请求重新抓取)。 - 商品搜索必须带分类路径(categoryguid/guids/names),光 keyword 报
400 non null hash key required。 - 交易记录接口需要 Header
regionguid(非空即可,如1260001)。 - token 有效期约 4 小时,过期后运行
python login.py重新登录即可。 - 防反爬:全量罗列/索引构建必须保持请求间隔(已内置 1.5~3s 随机),不要改小。
经销商画像解读
--profile 输出的核心是「经销商 × 交易记录」交叉:
- 经销商画像总览:每个经销商的联系人/电话/报价 + 成交单数 + 成交额 + 客户数 + 状态(有成交/未成交)+ 解读。
- 经销商客户明细:每个经销商具体卖给哪些采购单位(客户)、各客户订单数/采购额。
- 成交额 TOP 经销商 = 真正活跃的渠道(577 家经销商里往往只有几十家有实际成交)。
客户类型自动分类:医院/医疗、学校/教育、政府/机关、企业/单位、事业单位。
文档索引(按需读)
| 文件 | 内容 |
|------|------|
| FAQ.md | 使用手册 + 排障指南(快速上手/命令速查/常见问题20条/错误码速查/最佳实践) |
| references/api_docs.md | 接口端点、参数、字段映射、鉴权机制 |
| references/workflows.md | 详细工作流、端到端案例、异常处理 |
目录结构
fujian-zfcg-toolkit/
├── SKILL.md 本文件
├── fujian_zfcg.py 核心脚本(find/dealers/trade/profile/export/rebuild-index/supplier/test)
├── data_store.py v1.3.3 数据仓库(分片 json5,增量 upsert;--dims 维度分片:客户↔渠道↔品牌关系网)
├── analysis_engine.py v1.4.0 分析引擎(双模板:--brands=市场分析9表[导读/品牌总览/区域战局/客户攻坚榜/渠道招商榜/份额矩阵by渠道/匹配×2/明细];--brand=盘点7表[导读/型号总览/区域渗透/渠道四象限/客户榜/匹配/明细];占比=数据条进度条按品牌配色)
├── analyze_guides.json5 v1.3 分析引导词库(角色/目的/风格/输出 + presets)
├── analysis_plan.md 数据分析体系设计文档(v2 定稿,评审 6~10 已标注)
├── interpretations_sample.json5 AI 解读模板样例(含数据异常栏)
├── config.json Cookie 配置(含 access_token)
├── goods_map.json guid ↔ 商品名映射表(自动累积)
├── supplier_index.json 供应商→代理商品 反查索引(rebuild-index 生成)
├── login.py CDP 一键登录助手
├── store/ 数据仓库分片目录
├── references/
│ ├── api_docs.md
│ └── workflows.md
└── FAQ.md
微信扫一扫