Track configured Beijing Housing Commission new-home projects from bjjs.zjw.beijing.gov.cn project-detail URLs, read project signed-unit counts, signed area, and average price, crawl building tables including “查看更多” and paginated lists, treat both “已签约” and “网上联机备案” as signed units, estimate the implied average price per m² of newly signed rooms from changes between the previous and current project summaries, cache unsold room metadata locally, persist rows into a Feishu spreadsheet as the single source of truth, and send Feishu DM notifications after each run. Use when asked to monitor one or more Beijing pre-sale projects, update a project mapping, sync newly signed rooms into a Feishu sheet, infer newly signed average price, verify duplicate insertion behavior, or notify on updates.
使用 scripts/tracker.js 维护多个地块名到北京住建委项目详情链接的映射,并把新发现的“已签约 / 网上联机备案”房屋写入飞书表格。
projects.json:项目映射 + 飞书表格配置scripts/tracker.js:抓取、解析、估算、写入、排序主脚本room-cache.json:本地房源缓存(缓存未签约房屋的建筑面积/户型,供后续签约时补齐)pageId=411612 楼盘表列表页。已签约 与 网上联机备案 统一视为签约房屋。room-cache.json,缓存未签约房屋的 建筑面积 与 户型。已签约套数已签约面积(M2)项目成交均价0估计新签约均价 = (本次已签约面积 * 本次项目成交均价 - 上次已签约面积 * 上次项目成交均价) / (本次已签约面积 - 上次已签约面积)
地块名,销售楼号,自然楼层,房号,建筑面积,户型,估计成交价,项目已签约套数,已签约面积(M2),项目成交均价,更新时间
YYYY-MM-DD HH:MM:SS。room-cache.json地块名 + 销售楼号 + 自然楼层 + 房号建筑面积 与 户型scripts/tracker.js 按楼盘表颜色识别状态:
#FF0000 → 已签约#d2691e → 网上联机备案#FFCC99 → 已预订#33CC00 → 可售#CCCCCC → 不可售#ffff00 → 已办理预售项目抵押#00FFFF → 资格核验中只有 已签约 和 网上联机备案 会写入飞书表格;未签约状态会用于刷新本地缓存。
projects.json 示例:
{
"feishu": {
"sheetUrl": "https://my.feishu.cn/sheets/Y944sbj2khtLcNtb7jec7MIrnxd",
"spreadsheetToken": "Y944sbj2khtLcNtb7jec7MIrnxd",
"sheetId": "eee767",
"sheetTitle": "Sheet1",
"appId": "cli_xxx",
"appSecret": "xxx",
"notifyUserOpenId": "ou_xxx"
},
"projects": [
{
"name": "清樾府04地块",
"url": "http://bjjs.zjw.beijing.gov.cn/eportal/ui?pageId=320794&projectID=8138177&systemID=2&srcId=1"
}
]
}
也可以通过环境变量覆盖:
FEISHU_SHEET_URLFEISHU_APP_IDFEISHU_APP_SECRETFEISHU_NOTIFY_USER_OPEN_IDnode scripts/tracker.js set-feishu --sheet-url "https://my.feishu.cn/sheets/Y944sbj2khtLcNtb7jec7MIrnxd" --app-id "cli_xxx" --app-secret "xxx" --notify-user-open-id "ou_xxx"
node scripts/tracker.js add --name "清樾府04地块" --url "http://bjjs.zjw.beijing.gov.cn/eportal/ui?pageId=320794&projectID=8138177&systemID=2&srcId=1"
# 同一地块名重复 add 新链接时,脚本会把链接追加到该地块配置下
node scripts/tracker.js list
node scripts/tracker.js sync
node scripts/tracker.js sync --name "清樾府04地块"
也可以临时同步一个未写入配置的项目:
node scripts/tracker.js sync --name "临时项目" --url "http://bjjs.zjw.beijing.gov.cn/eportal/ui?pageId=320794&projectID=8138177&systemID=2&srcId=1" --sheet-url "https://my.feishu.cn/sheets/Y944sbj2khtLcNtb7jec7MIrnxd" --app-id "cli_xxx" --app-secret "xxx"
签约套数变化 与 本次发现的新房号数 不一致,输出警告,但仍按当前楼盘表结果判断哪些房号需要新增。feishu.notifyUserOpenId(或环境变量 FEISHU_NOTIFY_USER_OPEN_ID)控制。