项目与户型的 XML 供稿

1. 数据源用途

XML 数据源用于传输房地产项目和典型户型的结构化数据。其目的是让接收系统能够自动创建和更新项目卡片,并展示开发商提供的价格、状态、图库、配套、付款计划、EOI 以及营销推广素材。

该数据源以汇总形式传输户型:一条户型记录描述一种典型户型及该类型可售单位数量。它不是具体公寓、办公室或地块的清单。

  • realty-feed: 整个 XML 数据源的根容器。主 ID:—
  • offers: 一个项目或综合体。主 ID:complex-id
  • layouts: 项目内的典型户型。主 ID:id
  • payment_plans: 一个项目的付款方案。主 ID:id
  • eoi_item: 一项 EOI 条件。主 ID:—
  • stock: 开发商的营销活动、新闻或推广信息。主 ID:—

1.1 什么是 XML 数据源

XML 数据源是一个结构化文件,包含房地产项目和典型户型的数据。它包括描述、照片、价格、地址、状态、规格、配套及其他在代理网站或目录中展示房源所需的数据。

简单来说,XML 数据源就是关于房地产的数据流,接收系统会定期下载、读取并用于自动更新房源卡片。

Alnair 提供数据。网站开发、目录开发、CRM 集成以及导入逻辑由客户或客户的技术团队负责。

1.2 代理机构需要什么

要使用 XML 数据源,代理机构需要具备自己的技术基础设施,能够定期下载 XML、解析其结构并在系统中更新数据。

  • 网站或房产目录: 展示数据源中的项目和户型的位置。
  • 技术团队或开发者: 负责 XML 下载、解析和导入的配置。
  • XML 解析器: 读取 XML 结构并转换为内部数据模型。
  • 导入模块: 创建、更新并停用项目和户型。
  • 任务调度器: 按计划定期执行导入,例如通过 cron 或 scheduler。
  • 错误日志: 监控未知枚举值、空字段和加载错误。

1.3 代理机构如何使用 XML 数据源

典型流程如下:

  1. 代理机构系统从个人网页链接下载 XML。
  2. XML 作为原始快照保存,用于诊断和重新处理。
  3. 解析器读取 realty-feed、offers、layouts 结构及其嵌套块。
  4. 导入模块创建新项目和户型,或更新已有项目和户型。
  5. 在新数据源中消失的对象会被标记为非活动。
  6. 代理机构网站展示最新的项目卡片、价格、图库和状态。

主要集成能力:

  • 自动更新: 项目和户型无需人工干预即可更新。
  • 房源页面创建: 数据源内容可用于项目和户型卡片。
  • 最新价格与状态: 网站按计划接收 XML 更新。
  • 筛选与搜索: 可按区域、价格、房产类型、房间数和面积进行筛选。
  • 媒体图库: 可在界面中展示项目照片、主题图库和户型图片。

2. XML 总体结构

<realty-feed>
  <generation-date>2026-06-17T12:06:39+04:00</generation-date>
  <offers>...</offers>
  <offers>...</offers>
</realty-feed>

  • realty-feed: 对象。根数据块。
  • generation-date: 日期时间。XML 生成日期和时间。用于检查数据新鲜度。
  • offers: 对象[]。项目或综合体列表。每个 offers 块包含项目数据及其户型。

2.1 数据源访问与下载限制

数据源通过个人网页链接提供给客户。该链接对客户唯一,接收系统通过它自动下载 XML。

个人链接可在 Alnair 账户中由管理员获取。管理员可将该链接提供给客户的技术团队进行导入配置。

  • 访问类型: 个人网页链接。客户专属 XML 数据源 URL。
  • 链接获取位置: Alnair 账户。链接由客户管理员获取。
  • 数据源更新频率: 每 4 小时。Alnair 侧每 4 小时更新一次 XML 数据。
  • 最小下载间隔: 不得超过每小时一次。接收系统每小时最多访问一次数据源。
  • 超出限制: 访问阻止。如果请求过于频繁,数据源访问可能会被临时阻止。

推荐的集成逻辑:通过 cron 或 scheduler 配置定时下载,保存最近接收的 XML,不要在每次网站页面加载时都请求数据源。最佳模式是每小时最多下载一次,同时考虑到新数据大约每 4 小时出现一次。

3. 项目:<offers>

offers 是数据源的主实体。它包含项目描述、开发商、位置、施工和销售状态、价格、媒体、配套、付款计划、EOI、营销活动以及典型户型。

<offers>
  <complex-id>5646</complex-id>
  <type>project</type>
  <logo>https://...</logo>
  <photo>https://...</photo>
  <title>...</title>
  <description>...</description>
  <price_on_request>1</price_on_request>
  <status>...</status>
  <construction_start_at>2025-01-01T00:00:00+04:00</construction_start_at>
  <construction_progress>15</construction_progress>
  <planned_completion_at>2027-12-31T00:00:00+04:00</planned_completion_at>
  <predicted_completion_at>2027-12-31T00:00:00+04:00</predicted_completion_at>
  <amenities>...</amenities>
  <developer>...</developer>
  <city>Dubai</city>
  <address>...</address>
  <latitude>25.000000</latitude>
  <longitude>55.000000</longitude>
  <districts>...</districts>
  <album>...</album>
  <albums>...</albums>
  <constructions_count>1</constructions_count>
  <for_sale_count>10</for_sale_count>
  <price>...</price>
  <br_prices>...</br_prices>
  <updated_at>2026-06-17T10:53:20+04:00</updated_at>
  <is_sold_out>0</is_sold_out>
  <payment_plans>...</payment_plans>
  <sales_status>...</sales_status>
  <stocks>...</stocks>
  <eoi>...</eoi>
  <service_charge>...</service_charge>
  <assignment>...</assignment>
  <is_limited_publication>0</is_limited_publication>
  <layouts>...</layouts>
</offers>

  • complex-id: 整数。Alnair 中唯一的项目 ID。作为外部项目 ID 用于 upsert。
  • type: 枚举。顶层实体类型:project 或 compound。保存原始值并按顶层项目导入。
  • logo: URL。项目标志。用于品牌展示,不作封面。
  • photo: URL。项目主图 / 封面。用于封面图和主视觉图。
  • title: 本地化对象。英文/俄文/阿文项目名称。根据界面语言显示。
  • description: 本地化 HTML。英文/俄文/阿文项目描述。安全渲染;HTML 位于 CDATA 中。
  • price_on_request: 0/1。隐藏价格标志。若为 1,显示“价格咨询”。
  • status: 对象。施工状态。不要与 sales_status 混淆。
  • construction_start_at: 日期时间。开工日期。如有值则显示。
  • construction_progress: 小数。施工完成百分比。以百分比形式显示。
  • planned_completion_at: 日期时间。计划竣工日期。作为交房日期使用。
  • predicted_completion_at: 日期时间。预计完工日期。可作为更新后的完工日期。
  • amenities: 对象。项目配套与特色。按 key 映射。
  • developer: 对象。项目开发商。保存名称和 logo。
  • city / address: 字符串。项目所在城市和地址。用于位置信息。
  • latitude / longitude: 小数。坐标。用于地图展示。
  • districts: 对象。项目区域。用于筛选和项目卡片。
  • album: 对象。项目主图库,无分类。作为通用图库展示。
  • albums: 对象。主题图库。按标题分组。
  • for_sale_count: 整数。项目可售单位数量。可显示为库存。
  • price: 对象。项目整体价格区间。若 price_on_request=1 则隐藏。
  • br_prices: 对象[]。按卧室数量或类别划分的价格。用于筛选和列表。
  • updated_at: 日期时间。项目更新时间。用于同步。
  • is_sold_out: 0/1。售罄标志。与 sales_status 一起使用。
  • payment_plans: 对象[]。开发商付款方案。作为付款选项展示。
  • sales_status: 本地化对象。项目销售状态。定义销售阶段。
  • stocks: 对象。开发商营销活动和推广信息。作为推广模块展示。
  • eoi: 对象。意向登记。仅在预售(EOI)时展示。
  • service_charge: 对象。物业费。若有值则显示。
  • assignment: 小数。转让条件。为空表示未说明。
  • is_limited_publication: 0/1。发布限制。若为 1,未经许可不公开发布。
  • layouts: 对象[]。项目典型户型。作为项目子实体导入。

4. 本地化字段

本地化字段结构相同:标签内传递英文、俄文和阿文值。

<title>
  <en>项目名称</en>
  <ru>Название проекта</ru>
  <ar>اسم المشروع</ar>
</title>

  • en: 英文值。建议作为默认回退。
  • ru: 俄文值。
  • ar: 阿文值。

回退规则:

  1. 如果界面语言有值,则使用该语言。
  2. 如果所需语言为空,则使用 en。
  3. 如果 en 为空,则使用 ru。
  4. 如果 ru 为空,则使用 ar。
  5. 如果所有值都为空,则不显示该字段。

5. 状态

5.1 施工状态:<status>

施工状态显示项目的实体建设阶段,不表示销售可用性。

<status>
  <key>development_stage_progress</key>
  <en>进行中</en>
  <ru>Строится</ru>
  <ar>قيد الإنشاء</ar>
</status>

  • Scheduled: 项目已规划。
  • In Progress: 正在施工中。
  • Ready: 项目已完工。
  • Stopped: 施工已停止。

5.2 销售状态:<sales_status>

销售状态显示项目的商业阶段:公告、预售、启动、热销或售罄。

  • Preliminary Info: 项目早期信息。
  • Announcement: 项目已发布公告。
  • Presale (EOI): 正在收集 EOI。
  • Launch: 销售启动。
  • On Sale: 项目可购买。
  • Sold Out: 项目已售罄。
  • Pending: 状态待更新。

6. 开发商与位置

这些块用于展示开发商品牌和项目地理位置。

<developer>
  <title>
    <en>Developer Name</en>
    <ru>Developer Name</ru>
    <ar>Developer Name</ar>
  </title>
  <logo>https://...</logo>
</developer>
<city>Dubai</city>
<address>Project Address, Dubai</address>
<latitude>25.01809076</latitude>
<longitude>55.13354525</longitude>
<districts>
  <district>Jumeirah Village Triangle (JVT)</district>
</districts>

  • developer.title: 本地化对象。开发商名称。
  • developer.logo: URL。开发商 logo。
  • city: 字符串。城市。
  • address: 字符串。地址。
  • latitude / longitude: 小数。地图坐标。
  • districts.district: 字符串[]。项目区域。

7. 价格

7.1 项目价格:<price>

项目级价格显示项目中可售房源的一般价格区间。

<price>
  <min>815462</min>
  <max>2089780</max>
  <min_usd>222009</min_usd>
  <max_usd>568942</max_usd>
  <currency>AED</currency>
</price>

  • min: 小数。最低价格。
  • max: 小数。最高价格。
  • min_usd: 小数。美元最低价格。
  • max_usd: 小数。美元最高价格。
  • currency: 枚举。主货币,通常为 AED。

如果 price_on_request = 1,即使价格有值,也不会公开显示具体价格。

7.2 按类别价格:<br_prices>

br_prices 按卧室数量或房产类型对价格和面积进行分组。这适用于筛选和简版项目卡片。

<br_prices>
  <key>1</key>
  <count>7</count>
  <min_price>1070564</min_price>
  <max_price>1289674</max_price>
  <min_price_m2>17204</min_price_m2>
  <max_price_m2>18483</max_price_m2>
  <currency>AED</currency>
  <min_area><m2>57.92</m2><ft2>623.45</ft2></min_area>
  <max_area><m2>74.17</m2><ft2>798.36</ft2></max_area>
</br_prices>

  • studio: 开间。
  • 1-6: 卧室数量。
  • villa: 别墅。
  • townhouse: 联排别墅。
  • n: 不适用 / 非住宅类别 / 其他。

8. 媒体

数据源中的媒体分为多种类型。不要忽略其用途而将它们合并到一个图库中:一张图可能是项目封面,一张是 logo,一张是推广图,还有一张是户型图。

  • logo: offers.logo。项目 logo。用于项目品牌展示;不要作为封面。
  • photo: offers.photo。项目主图 / 封面。用于卡片封面图和项目页主视觉图。
  • album.image: offers.album.image。项目主图库,无分类。用于项目通用图库。
  • albums.album.images.image: offers.albums.album.images.image。主题图库。按 albums.album.title 分组。
  • developer.logo: offers.developer.logo。开发商 logo。用于开发商模块。
  • stocks.stock.logo: offers.stocks.stock.logo。营销活动图片。用于推广模块内部。
  • layouts.album.image: offers.layouts.album.image。某一典型户型的图库。用于户型层级。
  • levels_photos.level_photo.image: offers.layouts.levels_photos.level_photo.image。按楼层的户型图片。用作户型平面图。

<photo>https://...</photo>
<album>
  <image>https://...</image>
</album>
<albums>
  <album>
    <title><en>基础设施</en><ru>Инфраструктура</ru><ar>...</ar></title>
    <images>
      <image>https://...</image>
    </images>
  </album>
</albums>

  • Project presentation: 项目展示图片。
  • Construction progress: 施工进度照片。
  • Finishing examples: 装修样板。
  • Infrastructure: 项目基础设施。
  • View: 景观与周边环境。

并非每个项目都必须包含所有类别。如果类别标题为空,图片可作为无分类导入,或放入通用图库。

当前结构中没有单独的 history/story XML 标签。新闻、推广消息和项目营销素材通过 stocks 传递。如有 albums 中的 Construction progress 类别,可用于施工历史。

9. 配套设施

amenities 描述项目的配套与特色。集成时最好使用 key,而显示时使用本地化值。

<amenities>
  <amenity>
    <key>project_facilities_gym</key>
    <en>健身房</en>
    <ru>Тренажёрный зал</ru>
    <ar>صالة رياضية</ar>
  </amenity>
</amenities>

  • amenities: 对象。配套容器。
  • amenity: 对象。单个配套。
  • key: 枚举。技术键。
  • en / ru / ar: 字符串。三种语言的配套名称。

键 projecet_hotel_license 含有拼写错误,但必须映射为 Hotel License。建议支持该别名,不要中断导入。

10. 营销推广:<stocks>

stocks 是开发商的营销活动、新闻和推广信息。它们可能包含特价、折扣、开盘条件、EOI 公告、临时付款优惠及广告素材。该块不是库存,也不定义单位可用性。

<stocks>
  <stock>
    <title>...</title>
    <description>...</description>
    <start_at>2025-06-26T00:00:00+04:00</start_at>
    <end_at/>
    <logo>https://...</logo>
  </stock>
</stocks>

  • stocks: 对象。营销信息容器。
  • stock: 对象。一项活动、新闻或推广公告。
  • title: 本地化对象。推广标题。
  • description: 本地化 HTML。推广描述。
  • start_at: 日期时间。开始日期。
  • end_at: 日期时间。结束日期;可为空。
  • logo: URL。推广图片。

房源可用性应使用 for_sale_count、layouts.sale_units_count 和 sales_status,而不是 stocks。

11. EOI

EOI 指 Expression of Interest。该块描述处于预售(EOI)状态项目的意向登记或定金条款。

<eoi>
  <is_eoi_return>0</is_eoi_return>
  <eoi_items>
    <eoi_item>
      <price>100000</price>
      <percent/>
      <description>
        <en>2 卧室的 EOI 金额</en>
        <ru>Сумма EOI для 2-комнатных</ru>
        <ar>...</ar>
      </description>
    </eoi_item>
  </eoi_items>
</eoi>

  • is_eoi_return: 0/1/空。0 = 不可退,1 = 可退,空 = 未说明。
  • eoi_items: 对象。EOI 条款容器。
  • eoi_item: 对象。一项 EOI 条件。
  • price: 小数。固定 EOI 金额。
  • percent: 小数。如适用,EOI 百分比。
  • description: 本地化对象。条件说明。
  • sales_status.en = Presale (EOI) 且 eoi_items 已填写: 显示 EOI。
  • 其他任何 sales_status: 隐藏 EOI。

12. 物业费与转让

<service_charge>
  <value>172.22</value>
  <unit>sq. m</unit>
  <currency>AED</currency>
</service_charge>
<assignment>40.00</assignment>

  • service_charge.value: 物业费金额。如为空,不显示该模块。
  • service_charge.unit: 计费单位,通常为 sq. m。可为空。
  • service_charge.currency: 货币,通常为 AED。可为空。
  • assignment: 达到该百分比后可转让。为空 = 未说明,不代表限制。

13. 付款计划:<payment_plans>

payment_plans 描述开发商为房源提供的付款方式。一个项目可有多个付款计划。每个计划按阶段拆分付款:预订、施工、交房及交房后。费用和附加费用单独传递,因此总百分比可能超过 100%。例如,104% 可能表示房价的 100% + 4% DLD 费用。

  • Basic: id、title、currency。计划标识、标题和货币。title 为自由文本,不是枚举。
  • Booking: on_booking_percent、on_booking_fix、on_booking_payments_count、on_booking_fees。预订阶段的付款和费用。
  • Construction: on_construction_percent、on_construction_fix、on_construction_payments_count、on_construction_fees。施工期间付款。
  • Handover: on_handover_percent、on_handover_fix、on_handover_payments_count、on_handover_fees。交房时付款。
  • Post-handover: post_handover_percent、post_handover_fix、on_post_handover_payments_count、on_post_handover_fees。交房后付款。
  • ROI: roi_percent、roi_fix、roi_payments_count、roi_fees。用于 ROI 或保收益方案的字段。
  • Additional fees: additional、additional_percent、additional_fix、additional_fix_m2。附加付款,例如 DLD Fee。
  • Periods: period_after_handover、period_after_roi。周期性付款频率。
  • Totals: price_total、fees_included_total。计划总额及包含费用。

14. 户型:<layouts>

layouts 描述项目内的一种典型户型。它是汇总单位类型,不是具体公寓或办公室。

  • id: 整数。唯一户型 ID。作为外部户型 ID 使用。
  • title: 本地化对象。户型名称。根据界面语言显示。
  • project_id: 整数。父项目 ID。与 offers.complex-id 关联。
  • building_name: 本地化对象。楼栋名称。若为空则不显示。
  • price_on_request: 0/1。隐藏价格标志。若为 1,则不显示价格。
  • area_min / area_max: 对象。面积范围。m2 和 ft2。
  • area_balcony_min / area_balcony_max: 对象。阳台面积范围。可为空。
  • type: 本地化对象。房产类型。参见单位类型参考。
  • sale_units_count: 整数。该类型可售单位数量。不是地块列表。
  • album: 对象。户型图库。用于户型层级展示。
  • levels_photos: 对象。按楼层图片。用作平面图。
  • floors_count: 整数。楼层数。1、2、3 等。
  • rooms_count: 本地化对象。房间数量。参见房间数参考。
  • price: 对象。户型价格区间。若 price_on_request=1 则隐藏。
  • is_limited_publication: 0/1。发布限制。若为 1,则对公众隐藏。

15. 枚举值参考

  • Project type: project, compound.
  • Sales status: Preliminary Info, Announcement, Presale (EOI), Launch, On Sale, Sold Out, Pending.
  • Construction status: Scheduled, Ready, Stopped, In Progress.
  • Unit type: Apartment, Villa, Townhouse, Duplex, Triplex, Penthouse, Retail, Office, Suite.
  • Rooms count: Studio, 1 BR, 2 BR, 3 BR, 4 BR, 5 BR, 6 BR, 7 BR, 8 BR, NA.
  • BR price key: studio, 1, 2, 3, 4, 5, 6, villa, townhouse, n.
  • Gallery category: Project presentation, Construction progress, Finishing examples, Infrastructure, View.
  • Currency: AED.
  • Service charge unit: sq. m.
  • Boolean flags: 0, 1;部分字段允许为空。

如果数据源包含不在参考列表中的值,导入不得失败。该值必须按原始值保存,映射为未知,并记录供审核。

16. 空值

空值表示“未说明”,不是 0。空标签可写作 <field/> 或 <field></field>。

  • assignment: 未说明转让条件。
  • service_charge.value: 未说明物业费。
  • eoi.is_eoi_return: 未说明 EOI 是否可退。
  • area_balcony_min.m2: 未说明阳台面积。
  • description.en: 描述缺失。

17. 展示规则

  • 隐藏价格: price_on_request = 1。显示“价格咨询”。
  • 显示价格: price_on_request = 0。显示价格最小值/最大值。
  • EOI: sales_status.en = Presale (EOI) 且 EOI 已填写。显示 EOI。
  • EOI 不适用: sales_status.en != Presale (EOI)。隐藏 EOI。
  • 售罄: is_sold_out = 1 或 sales_status.en = Sold Out。显示“已售罄”或从列表中隐藏。
  • 限制发布: is_limited_publication = 1。不要公开发布。
  • assignment 为空: assignment 为空。不要显示转让模块。
  • service charge 为空: service_charge.value 为空。不要显示物业费。

18. 导入规则

  • 项目: 按 complex-id 查找;找到则更新,未找到则创建。
  • 户型: 按 layouts.id 查找;通过 project_id 关联项目。
  • 删除: 如果对象从新数据源中消失,应标记为非活动,而不是立即删除。
  • 未知枚举: 保存原始值,映射为未知,并记录日志。
  • 空值: 不要在没有明确字段规则的情况下将其转换为 0。

项目字段 → 来源

  • external_project_id: complex-id.
  • raw_offer_type: type.
  • title_*: title.
  • description_*: description.
  • developer_name: developer.title.
  • developer_logo_url: developer.logo.
  • city/address/coordinates: city, address, latitude, longitude.
  • districts: districts.district.
  • construction_status: status.en.
  • sales_status: sales_status.en.
  • price_min / price_max: price.
  • price_on_request: price_on_request.
  • galleries: photo, album, albums.
  • payment_plans: payment_plans.
  • eoi: eoi.
  • stocks: stocks.
  • source_updated_at: updated_at.

户型字段 → 来源

  • external_layout_id: layouts.id.
  • external_project_id: layouts.project_id.
  • title_*: layouts.title.
  • building_name_*: building_name.
  • unit_type: type.en.
  • rooms_count: rooms_count.en.
  • sale_units_count: sale_units_count.
  • area_min / area_max: area_min, area_max.
  • balcony_min / balcony_max: area_balcony_min, area_balcony_max.
  • floors_count: floors_count.
  • price_min / price_max: price.
  • layout_gallery: album.
  • levels_photos: levels_photos.
  • is_limited_publication: is_limited_publication.