قائمة وثائق المطورين

قدّر إيرادات عقار

متوسط

اقرأ كل جزء من استجابة التقدير، وقارن بين أعداد غرف النوم، واختبر أثر نصف القطر في النتيجة.

الإعداد

يستخدم هذا الدرس الأداة المساعدة jokerprice.py من درس البدء السريع. احفظها بجوار نصك البرمجي واضبط JOKERPRICE_API_KEY.

نفّذ الطلب

حدّد إحداثيات العقار (انقر بزر الفأرة الأيمن على نقطة في معظم تطبيقات الخرائط لنسخها). يمثل typeId نوع العقار: 6 شقة، و7 فيلا، و2 شاليه؛ والقائمة الكاملة في التوثيق.

Python
from jokerprice import api

point = {"latitude": 21.5675, "longitude": 39.1293}   # north Jeddah
est = api("POST", "/api/v1/estimate", json={**point, "bedrooms": 3, "typeId": "6", "radiusKm": 3})["estimate"]

تحقق من أساس الأرقام

قبل قراءة الإيرادات، اقرأ حقول basis، فهي تخبرك هل قِيس متوسط السعر اليومي والإشغال من تقويمات متتبَّعة أم اعتمدا على الأسعار المعروضة بديلًا.

Python
print("comparables in radius:", est["asking"]["count"])
print("ADR:", est["adr"]["value"], "from", est["adr"]["basis"])
occ = est["occupancy"]
print("occupancy:", occ["value"], "from", occ["basis"], "| tracked nearby:", occ["trackedNearby"], "| tracking days:", occ["trackingDays"])

اقرأ التوقع أو النطاق أو السيناريوهات

Python
if est["projection"]:
    p = est["projection"]
    print(f"Projection: SAR {p['adr']:.0f} x {p['occupancy']:.0%} -> SAR {p['monthly']:,.0f}/month, SAR {p['annual']:,.0f}/year")
    lo, hi = est["range"]["low"], est["range"]["high"]
    print(f"Range at the 25th-75th percentile rate: SAR {lo['annual']:,.0f} to SAR {hi['annual']:,.0f}/year")
else:
    for sc in est["scenarios"]:
        print(f"Scenario {sc['occupancy']:.0%}: SAR {sc['annual']:,.0f}/year")

for m in est["seasonality"]:
    print(m["month"], m["period"], f"{m['occupancy']:.0%}", round(m["revenue"]))

تعتمد الأرقام الشهرية على 30 ليلة والسنوية على 365 ليلة. ويسرد seasonality الأشهر التي تضم 30 ليلة متتبَّعة على الأقل.

قارن بين أعداد غرف النوم

Python
for bedrooms in (1, 2, 3, 4):
    e = api("POST", "/api/v1/estimate", json={**point, "bedrooms": bedrooms, "typeId": "6"})["estimate"]
    annual = e["projection"]["annual"] if e["projection"] else None
    print(bedrooms, "BR | comps", e["asking"]["count"], "| median ask", e["asking"]["median"], "| annual", round(annual) if annual else "scenarios only")

اختبر نصف القطر

نصف القطر الصغير أكثر محلية لكنه يضم عقارات مماثلة أقل. شغّل العقار نفسه بعدة أنصاف أقطار، وفضّل أصغرها الذي يعطي وسيطًا مستقرًا و15–20 عقارًا مماثلًا على الأقل.

Python
for radius in (1, 2, 3, 5, 8):
    e = api("POST", "/api/v1/estimate", json={**point, "bedrooms": 3, "typeId": "6", "radiusKm": radius})["estimate"]
    print(f"{radius} km: {e['asking']['count']} comps, median SAR {e['asking']['median']}")

راجع العقارات المماثلة

يضم comparables أقرب 12 عقارًا مطابقًا مع روابطها. افتح بعضها: فإذا كانت مختلفة كثيرًا عن عقارك (مسبح، إطلالة بحرية)، فعدّل توقعاتك.

Python
for c in est["comparables"]:
    print(f"{c['distanceKm']:.2f} km  SAR {c['nightly']}  {c['bedrooms']} BR  {c['title'][:50]}  {c['url']}")