You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从RETS服务器获取房源信息变更历史?

获取RETS服务器房源变更历史的方案

标准RETS实现方式

RETS本身没有强制统一的历史数据获取规范,但绝大多数MLS(房地产多重上市服务)会通过以下两种常规方式提供房源变更记录:

1. 专用历史资源/类

很多RETS服务器会提供命名为PropertyHistory、ListingHistory这类专用的历史资源,对应的资源类(Class)通常包含变更时间、变更字段、旧值/新值、变更类型(价格调整、状态变更等)核心字段。

你可以先通过GetMetadata请求获取服务器元数据,确认是否存在这类资源:

GET /rets/Login?Transaction=GetMetadata&Type=Resource&ID=*&Format=COMPACT

解析返回结果,查找带「History」关键词的资源,再进一步获取该资源的类和字段详情。

2. 增量查询+版本字段

如果没有专用历史资源,可利用RETS的增量查询结合房源版本字段(比如ModificationTimestamp、ListingVersion)自行生成历史:

  • 定期(按业务需求设置为每小时/每天)调用Search接口,筛选指定时间范围内修改过的房源:
    POST /rets/Search
    Query=(ModificationTimestamp=2024-01-01T00:00:00+)
    SearchType=Property
    Class=ResidentialProperty
    Format=COMPACT
    
  • 请求时务必包含ListingVersion(或类似版本标识字段),每次获取到新版本房源后,与本地存储的旧版本对比,提取变更字段及内容,自行生成历史记录。

权限与配置注意事项

  • 部分RETS服务器的历史数据需要额外申请访问权限,若查询不到相关资源,直接联系MLS管理员确认权限是否开通。
  • 部分服务器会限制历史数据的保留时长(比如仅保留90天),需提前确认数据覆盖范围。

代码示例(Python)

检查是否存在专用历史资源

import rets

# 初始化RETS客户端
client = rets.RetsClient(
    login_url="https://your-rets-server.com/rets/login",
    username="your-username",
    password="your-password"
)
client.login()

# 获取所有资源元数据
resources = client.get_metadata(resource_type="resource")
for resource in resources:
    if "History" in resource["ResourceName"]:
        print(f"找到历史资源: {resource['ResourceName']} ({resource['ResourceID']})")
        # 获取该资源的类信息
        classes = client.get_metadata(resource_type="class", resource_id=resource["ResourceID"])
        for cls in classes:
            print(f"  类: {cls['ClassName']} ({cls['ClassID']})")
            # 获取字段信息
            fields = client.get_metadata(resource_type="table", resource_id=resource["ResourceID"], class_id=cls["ClassID"])
            for field in fields:
                print(f"    字段: {field['SystemName']} - {field['LongName']}")

client.logout()

增量查询生成变更历史

import rets
from datetime import datetime, timedelta

client = rets.RetsClient(
    login_url="https://your-rets-server.com/rets/login",
    username="your-username",
    password="your-password"
)
client.login()

# 筛选过去24小时修改的房源
yesterday = datetime.now() - timedelta(days=1)
query = f"(ModificationTimestamp={yesterday.strftime('%Y-%m-%dT%H:%M:%S')}+)"

# 搜索房源,包含版本字段
results = client.search(
    search_type="Property",
    class_="ResidentialProperty",
    query=query,
    select="ListingKey,ListingVersion,Price,Status,ModificationTimestamp"
)

# 对比本地存储的旧数据,生成历史记录
for result in results:
    listing_key = result["ListingKey"]
    new_version = int(result["ListingVersion"])
    # 假设local_db是你的本地数据库实例
    old_data = local_db.get_listing(listing_key)
    if old_data and old_data["ListingVersion"] < new_version:
        # 找出变更字段
        changes = []
        for field in ["Price", "Status"]:
            if old_data[field] != result[field]:
                changes.append({
                    "field": field,
                    "old_value": old_data[field],
                    "new_value": result[field],
                    "change_time": result["ModificationTimestamp"]
                })
        # 保存变更历史到本地
        local_db.save_history(listing_key, changes)

client.logout()

替代方案

如果RETS服务器完全不提供历史数据,只能通过定期全量同步,每次同步后与本地数据对比生成变更记录,但这种方式效率极低,仅适合小体量房源数据场景。

内容的提问来源于stack exchange,提问作者Iman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:05:18