价格监控
从登记商品与读取页面,到每天早上收到「哪家公司、卖多少钱」,包括未能读取的来源如何处理。
本站首页所讲的那件事:不是行情,而是哪家公司、卖多少钱。 以下是每天早上连同来源记录一起收到它的方法。
早期访问阶段。 公开注册尚未开放。有兴趣请与我们联系。
三个词
| 商品 | 您的型号或 SKU。填入自己的不含税价格,差额会自动算出 |
| 来源 | 为该商品读取的一个页面,以及从哪个国家读取 |
| 扫描(sweep) | 把所有到期来源跑一遍。默认每天一次 |
来源之所以是商品 × 页面 × 国家,是因为同一个网址发给柏林和发给东京的价格并不相同。
决定读取什么
对每个页面,选择价格、卖家、商品名、库存、货币中要取哪些。CSS 选择器是可选的 —— 留空时,免费的结构化数据层会从多数商店已经公开的机器可读标记中提取。只有在那行不通时才需要写选择器。
没有选择任何项目的来源,每天早上都会被读取并返回空 —— 这与「页面上本来就什么都没有」无法区分。控制台会就此发出警告。
每天早上的扫描
POST /v1/monitor/sweep
{ "limit": 25 }取出到期的来源并记录结果。来源在读取之前就被占用,所以您自己的 cron 与我们的执行重叠时,同一个来源不会被扫描两次。
重复扫描不是「行重复」的问题。第二次找不到第一次记录的商品,于是对每一条都计入一次缺席。 同一个早上跑两次,就足以触及消失判定。
读取经由 POST /v1/extract。扫描的计费、限流与策略检查,与手动发起完全相同。 没有另外的价格,也没有另外的路径。
返回什么
{
"batch_id": "mrun_...",
"sources": 3, "answered": 2,
"seen": 7, "added": 1, "repriced": 2, "gone": 0, "pending": 0,
"excluded": [{ "sourceId": "msrc_...", "status": "refused", "error": "rate limited" }]
}answered 是实际返回了页面的数量,只有这些参与消失判定 —— 因为失败的来源与库存售罄的来源,都返回「什么都没有」。
未能读取的来源如何处理
这就是这个产品的核心。
- 它的商品原样保留。不计为售出,也不计为下架
- 只消失一次不算成交。 排序变了、分页变了就消失,每天都在发生
- 403 或 429 记录为拒绝,绝不当作「内容为空的成功」
空结果会被读成「那里什么都没有」,让人去怀疑选择器 —— 而真正的信息是「请放慢速度」。
如何送达
画面 —— 今天早上的表格。每行包含卖家、国家、不含税价格、与上次的差额、与您的价格之比、取得时刻、汇率及汇率自身的公布日、以及商品链接。 今天未读取的行会变色,并标注 last known — not read today。
CSV —— 相同的行,另外为每个未能读取的来源也生成一行(价格留空, read_status 为 not_read)。默默略去它们,会让比上周更短的列表被读成市场萎缩。
邮件 —— 扫描之后,只在有价格变动或有来源未能读取的早上送出。发给工作区的全体成员,一次。
未能读取的来源写在价格之前 —— 让只扫一眼数字就关掉的人,一定先经过那句会改变这些数字含义的话。
1 source did not answer this morning. Their listings are unchanged. Nothing from them is counted as sold or withdrawn.
>
REFUSED https://... (DE) — rate limited
>
1 price moved:
>
SKU-4471 Retailer B — New York (US) ¥14,600 → ¥13,900 −¥700
全部读到且没有任何变动的早上不发送。 五天里有四天是空的邮件会被规则过滤掉,然后在它真的有话说的那天被漏掉。但只要有失败,即使价格没动也会发送。
Webhook —— monitor.sweep_completed,每次扫描一次,携带 not_answered。同一批次重跑不会再次触发。
数字的约定
- 比较只读取不含税、已换算为日元的那一列。 用含税价减去不含税价会让符号反转
- 含税或不含税按来源声明。 没有默认值 —— 默认值正是同一事故再次发生的路径
- 汇率记录包含所采用的汇率,以及该汇率自身的公布日。 跨过周末时两者是不同的日期
最后更新