
Rajinder Singh
Deep Learning Researcher

एआई यात्रा एजेंट के लिए होटल मूल्य निगरानी डेटा केवल तभी मूल्यवान होता है जब प्रत्येक दर तुलनीय, वर्तमान और इसके स्रोत से ट्रेस करने योग्य होता है। एक प्रदर्शित रात दर शायद करों को छोड़ सकती है, व्यस्तता पर निर्भर कर सकती है, सदस्यता की आवश्यकता हो सकती है, या इसके साथ अलग रद्दी नीति का उपयोग कर सकती है। इसलिए सही वास्तुकला आधिकारिक होटल और यात्रा API से शुरू होती है, प्रत्येक ऑफर को एक सामान्य स्कीमा में परिवर्तित करती है, एक पारदर्शी ठहराव कुल की गणना करती है और संग्रह के समय और शर्तों को दर्ज करती है। अनुमति प्राप्त ब्राउजर संग्रह दस्तावेज़ित अंतराल भर सकता है, लेकिन CAPTCHA बहाली को नियंत्रित अपवाद के रूप में रखना चाहिए, जबकि मुख्य अधिग्रहण विधि नहीं होना चाहिए। इस गाइड ने एआई यात्रा एजेंट के लिए एक व्यावहारिक मूल्य निगरानी पाइपलाइन बनाई है जो दर चेतावनी, लचीली-तारीख सिफारिश, समानता विश्लेषण और यात्रा योजना के साथ बनी रहती है जबकि सहमति, स्रोत शर्तों और मानव मंजूरी के साथ बुकिंग के लिए बरकरार रखती है।
एक दर तब तक तुलनीय नहीं होती जब तक कि एजेंट को गेस्ट के द्वारा प्राप्त होने वाले चीजों और लागू होने वाली सीमाओं के बारे में ज्ञान न हो। न्यूनतम, निम्नलिखित को एकत्र करें:
from dataclasses import dataclass, field
from datetime import datetime, timezone
@dataclass
class HotelOffer:
property_id: str
property_name: str
source: str
check_in: str
check_out: str
adults: int
children: int
room_type: str
meal_plan: str | None
refundable: bool | None
cancellation_deadline: str | None
currency: str
nightly_base: float
taxes: float
fees: float
total_price: float
rate_key: str | None
collected_at: str = field(
default_factory=lambda: datetime.now(timezone.utc).isoformat()
)
कुल मूल्य के अनुरोधित ठहराव और व्यस्तता का प्रतिनिधित्व करना चाहिए। यदि कर या अनिवार्य शुल्क अज्ञात हैं, तो ऑफर को अधूरा चिह्नित करें, बजाय इसके कि इसे सबसे सस्ता विकल्प के रूप में रैंक करें।
CapSolver वेब-स्क्रैपिंग ब्लॉग में सामान्य संग्रह पैटर्न हैं, और CapSolver वेब-स्क्रैपिंग FAQ सामान्य ऑपरेशनल प्रश्नों को कवर करता है।
आधिकारिक API स्पष्ट स्कीमा, प्रमाणीकरण और वाणिज्यिक शर्तें प्रदान करते हैं। Sabre Get Hotel Rate Info API विभिन्न आपूर्ति स्रोतों से जीवंत संपत्ति-दर प्राप्त करने का वर्णन करता है। इसका उत्तर औसत रात दर, मुद्रा, पूर्व और बाद के कर राशि, शुल्क, कमरा विवरण, भोजन योजना, गारंटी की आवश्यकता, रद्दी शर्तें और एक दर कुंजी शामिल हो सकते हैं।
गूगल के होटल मूल्य दस्तावेज़ीकरण होटल सूची, उपलब्धता, दर और स्टॉक, लेन-देन, दर नियम, प्रश्न और तारीख/समय फॉर्मेट के लिए साझेदार संसाधनों की परिभाषा करता है। वर्तमान Amadeus Enterprise API पोर्टल अनुमोदित एंटरप्राइज कस्टमर्स के लिए होटल संबंधी API तक पहुंच प्रदान करता है।
| डेटा स्रोत | सबसे अच्छा उपयोग | ताकत | सीमा |
|---|---|---|---|
| होटल या श्रृंखला API | प्रथम-पक्ष उपलब्धता और सीधी दर | स्पष्ट स्वामित्व और वर्तमान स्टॉक | एक आपूर्तिकर्ता तक सीमित |
| GDS या यात्रा API | बहु-आपूर्तिकर्ता दर खोज | संरचित ऑफर और बुकिंग की चाबी | समझौता और प्रमाणीकरण की आवश्यकता |
| साझेदार फीड | बड़ा स्टॉक और मूल्य अपडेट | कुशल बैच प्रक्रिया | साझेदार मंजूरी और फीड नियम |
| अनुमति प्राप्त सार्वजनिक पृष्ठ | पुष्टि या अंतर ढकें | गेस्ट-फेसिंग प्रदर्शन को दर्शाता है | डिज़ाइन बदलाव और ट्रैफिक पुष्टि |
एक साझेदार फीड को सामान्य सार्वजनिक एंडपॉइंट के रूप में न लें। प्रदाता समझौते, कैश नीति, प्रदर्शन नियम और बुकिंग आवश्यकताओं का पालन करें।
अलग-अलग स्रोत अलग-अलग संरचना लौटाते हैं। प्रत्येक स्रोत के पीछे एक छोटा एडैप्टर रखें जो समान HotelOffer मॉडल लौटाता है।
import requests
from decimal import Decimal
class HotelRateAdapter:
def __init__(self, base_url: str, token: str):
self.base_url = base_url.rstrip("/")
self.token = token
def search(
self,
property_id: str,
check_in: str,
check_out: str,
adults: int = 2,
currency: str = "USD",
) -> list[HotelOffer]:
response = requests.post(
f"{self.base_url}/hotel-rates/search",
headers={
"Authorization": f"Bearer {self.token}",
"Accept": "application/json",
},
json={
"propertyId": property_id,
"checkIn": check_in,
"checkOut": check_out,
"adults": adults,
"currency": currency,
},
timeout=30,
)
response.raise_for_status()
return [self._normalize(item) for item in response.json()["offers"]]
def _normalize(self, raw: dict) -> HotelOffer:
base = Decimal(str(raw["price"]["base"]))
taxes = Decimal(str(raw["price"].get("taxes", 0)))
fees = Decimal(str(raw["price"].get("fees", 0)))
return HotelOffer(
property_id=raw["propertyId"],
property_name=raw["propertyName"],
source=raw["source"],
check_in=raw["checkIn"],
check_out=raw["checkOut"],
adults=raw["occupancy"]["adults"],
children=raw["occupancy"].get("children", 0),
room_type=raw["room"]["name"],
meal_plan=raw.get("mealPlan"),
refundable=raw.get("refundable"),
cancellation_deadline=raw.get("cancellationDeadline"),
currency=raw["price"]["currency"],
nightly_base=float(base),
taxes=float(taxes),
fees=float(fees),
total_price=float(base + taxes + fees),
rate_key=raw.get("rateKey"),
)
उपरोक्त एंडपॉइंट और क्षेत्र मानचित्रण एक एडैप्टर सीमा का प्रतिनिधित्व करता है; अपने अनुमोदित प्रदाता के ठीक संकल्प के साथ बदलें। उत्पादन कोड में कभी-कभी प्रदाता क्षेत्र न बनाएं।
मूल्य तुलना त्रुटियां अक्सर असंगत शर्तों से आती हैं, न कि गणित से। जब वे एक ही संपत्ति, ठहराव की तारीखें, व्यस्तता, कमरा श्रेणी और दर सीमा साझा करते हैं तो केवल ऑफर के समूह बनाएं।
from dataclasses import asdict
def comparison_key(offer: HotelOffer) -> tuple:
return (
offer.property_id,
offer.check_in,
offer.check_out,
offer.adults,
offer.children,
offer.room_type.strip().lower(),
(offer.meal_plan or "unknown").strip().lower(),
offer.refundable,
)
def comparable_snapshot(offers: list[HotelOffer]) -> list[dict]:
return sorted(
[asdict(o) for o in offers],
key=lambda item: (
item["total_price"],
item["source"],
),
)
मुद्रा के साथ एक समय-चिह्नित स्रोत का उपयोग करें और मूल राशि को बरकरार रखें। एक रद्दी ब्रेकफास्ट दर की तुलना एक गैर-रद्दी कमरा-केवल दर के साथ बिना एक स्पष्ट समायोजन या उपयोगकर्ता पसंद के बिना न करें।
CapSolver पायथन स्क्रैपिंग गाइड एडैप्टर बनाने में उपयोगी है, जबकि CapSolver शब्दावली टीमों के बीच शब्दावली को मानकीकृत करने में मदद कर सकता है।
होटल दरें संपत्ति, तारीख, स्टॉक दबाव और बुकिंग खिड़की के अनुसार बदलती हैं। एक नीति-चालित योजना का उपयोग करें, जबकि सभी संपत्ति को समान आवृत्ति पर पॉलिंग न करें।
from datetime import date
def monitoring_interval_days(check_in: date, today: date) -> int:
days_out = (check_in - today).days
if days_out <= 3:
return 1
if days_out <= 14:
return 2
if days_out <= 60:
return 4
return 7
एक उत्पादन स्केड्यूलर भी प्रदाता सीमाओं, संपत्ति प्राथमिकता, हाल के मूल्य अस्थिरता और उपयोगकर्ता चेतावनी सेटिंग को ध्यान में रखना चाहिए। जॉब शुरू करने के समय में जिफ़र रखें ताकि अनुरोध बर्स्ट को बचाया जा सके।
छोटे मुद्रा या गोलाकार अंतर पर चेतावनी न दें। सभी-शामिल कुल और महत्वपूर्ण नीति परिवर्तन की तुलना करें।
from decimal import Decimal
def detect_offer_change(previous: HotelOffer, current: HotelOffer) -> dict:
old_total = Decimal(str(previous.total_price))
new_total = Decimal(str(current.total_price))
amount_change = new_total - old_total
pct_change = (
(amount_change / old_total * 100) if old_total else Decimal("0")
)
policy_changed = any([
previous.refundable != current.refundable,
previous.cancellation_deadline != current.cancellation_deadline,
previous.meal_plan != current.meal_plan,
])
return {
"amount_change": float(amount_change),
"percent_change": round(float(pct_change), 2),
"policy_changed": policy_changed,
"alert": abs(pct_change) >= Decimal("5") or policy_changed,
}
सीमा एप्लिकेशन के अनुरूप होनी चाहिए। एक कॉर्पोरेट यात्रा कार्यक्रम को छोटे नीति परिवर्तन में रुचि हो सकती है, जबकि एक उपभोक्ता चेतावनी बड़े कुल-मूल्य कमी पर जोर दे सकती है।
कुछ अनुमोदित वर्कफ़्लो को एक सार्वजनिक प्रदर्शित दर की पुष्टि करने या संवाददाता API के माध्यम से अनुपलब्ध क्षेत्र के एकत्र करने की आवश्यकता हो सकती है। जब वेबसाइट की शर्तें और आपके समझौते अनुमति देते हैं तभी ब्राउजर फॉलबैक का उपयोग करें।
उपयोगकर्ता द्वारा प्रदान किए गए CapSolver एजेंट दस्तावेज़ में ब्राउजर बहाली को detect() और solve_on_page() में capsolver-core में मैप किया गया है:
import os
from capsolver_core import Capsolver
cap = Capsolver(
api_key=os.environ["CAPSOLVER_API_KEY"],
default_timeout=180,
)
async def recover_rate_check(page) -> dict:
challenge = await cap.detect(page)
if not challenge:
return {"handled": False, "reason": "No supported challenge detected"}
result = await cap.solve_on_page(page)
return {"handled": True, "result": result}
एक ही अनुमति प्राप्त ब्राउजर सत्र बनाए रखें, एक आशावादी मार्गदर्शन दर के साथ अनुरोध करें, और एक सीमित बहाली प्रयास के बाद बंद कर दें। CapSolver CAPTCHA-हल करने वाला FAQ सामान्य कार्यक्रम जीवन चक्र की व्याख्या करता है, जबकि CapSolver समस्या निवारण FAQ सामान्य विफलता स्थितियों को कवर करता है।
बोनस कोड: CapSolver डैशबोर्ड पर WEBS कोड का उपयोग करके हर रीचार्ज पर 5% का अतिरिक्त बोनस प्राप्त करें।
AI यात्रा एजेंट को क्रूर प्रदाता पेलोड के बजाय एक संक्षिप्त, साक्ष्य-आधारित स्नैपशॉट प्राप्त करना चाहिए।
def build_agent_snapshot(offers: list[HotelOffer]) -> dict:
complete = [
offer for offer in offers
if offer.total_price > 0 and offer.currency and offer.room_type
]
complete.sort(key=lambda offer: offer.total_price)
return {
"query": {
"property_id": complete[0].property_id if complete else None,
"check_in": complete[0].check_in if complete else None,
"check_out": complete[0].check_out if complete else None,
},
"best_flexible_offer": asdict(complete[0]) if complete else None,
"alternatives": [asdict(o) for o in complete[1:6]],
"warnings": [
"दरें बुकिंग से पहले बदल सकती हैं।",
"चेकआउट पर कुल, उपलब्धता और रद्दी शर्तों की पुष्टि करें।",
],
}
एजेंट को मूल्य और लचीलापन के बीच व्यापार-के-विनिमय की व्याख्या करने के लिए प्रेरित करें। यह एक कमरा आरक्षित है या एक दर गारंटीकृत है कहने का दावा नहीं करेगा जब तक कि प्रदाता के बुकिंग या मूल्य-जांच एंडपॉइंट द्वारा इसकी पुष्टि नहीं की गई है।
मॉनिटरिंग रीड-ओनली है। बुकिंग स्टॉक बदलती है, एक वित्तीय बाध्यता बनाती है और आमतौर पर व्यक्तिगत डेटा की आवश्यकता होती है। इन क्षमताओं को अलग सेवाओं में रखें और किसी भी बुकिंग एंडपॉइंट को कॉल करने से पहले स्पष्ट मंजूरी की आवश्यकता होती है।
| चरण | स्वचालन स्तर | आवश्यक नियंत्रण |
|---|---|---|
| दर संग्रह | स्वचालित | अनुमोदित स्रोत और दर सीमा |
| सामान्यीकरण | स्वचालित | स्कीमा वैधता और स्रोत की प्रामाणिकता |
| चेतावनी जनरेशन | स्वचालित | उपयोगकर्ता-निर्धारित बाध्यता |
| सिफारिश | सहायता | पारदर्शी तुलना मानदंड |
| मूल्य पुनः जांच | स्वचालित खरीदारी से पहले | ताजा प्रदाता पुष्टि |
| बुकिंग और भुगतान | मानव-पुष्टि | प्रमाणीकरण और स्पष्ट स्वीकृति |
इस सीमा एक AI एजेंट को अप्रासंगिक खरीदारी में अपडेटेड मॉनिटरिंग अवलोकन को बदलने से रोकती है।
संपत्ति मेल संभावना, स्रोत देरी, अज्ञात कर, मुद्रा परिवर्तन समय, दोहराए गए दर कुंजी, पारसर वर्जन और संग्रह त्रुटियां ट्रैक करें। जब अनुमति होती है, तो क्रूर प्रदाता उत्तर या एक अखंडता हैश बरकरार रखें। जब कोई संपत्ति अलग-अलग स्रोतों में विश्वसनीय रूप से मैच नहीं की जा सकती है, तो इसे समीक्षा के लिए भेजें, बस नाम द्वारा रिकॉर्ड को मिलाने के बजाय।
उपयोगी मापदंड शामिल हैं: प्रत्येक स्रोत पर सफल अवलोकन, अधूरी-मूल्य दर, माध्य संग्रह देरी, महत्वपूर्ण मूल्य-परिवर्तन दर, चुनौती पाए जाने की दर और मानव-समीक्षा आय। ये मापदंड अनुशंसाओं को प्रभावित करने से पहले डेटा गुणवत्ता समस्याओं को खोजते हैं।
केवल अधिकृत API, फीड, वेबसाइट और खातों के साथ होटल मूल्य निगरानी का उपयोग करें। साझेदार समझौते, वेबसाइट शर्तें, कैश सीमा, क्षेत्रीय उपभोक्ता-मूल्य नियम और गोपनीयता आवश्यकताओं का पालन करें। व्यक्तिगत बुकिंग डेटा या लॉयल्टी-खाता जानकारी बिना स्पष्ट स्वीकृति के एकत्र न करें। ब्राउजर ट्रैफिक को कम करें और जब भी संभव हो आधिकारिक संरचित इंटरफ़ेस का उपयोग करें।
भरोसेमंद होटल मूल्य निगरानी डेटा केवल एक पृष्ठ से एक संख्या एकत्र करने से अधिक है। एआई यात्रा एजेंट को निर्धारित ठहराव की शर्तें, सभी-शामिल कुल, नीति विवरण, समय-चिह्न और स्रोत प्रामाणिकता की आवश्यकता होती है। आधिकारिक होटल और GDS API के आधार पर होना चाहिए; अनुमति प्राप्त ब्राउजर चेक एक सीमित अंतर कवर कर सकते हैं, जबकि CapSolver एक नियंत्रित बहाली परत के रूप में कार्य करता है जब एक समर्थित चुनौती सत्र के दौरान बाधा डालती है।
पहला अनुमोदित वर्कफ़्लो CapSolver के साथ बनाएं, फिर प्रदाता-विशिष्ट एडाप्टर्स, मूल्य-बदलाव की सीमा और किसी भी बुकिंग कार्रवाई से पहले अनिवार्य पुनरावलोकन जोड़ें।
न्यूनतम, संपत्ति ID, ठहराव की तारीखें, आवास, कमरा प्रकार, भोजन योजना, रिफंड की योग्यता, रद्दगी की अंतिम तारीख, मुद्रा, कर, शुल्क, कुल मूल्य, स्रोत, और संग्रह के समय।
पहले आधिकारिक API और साझेदार फीड का उपयोग करें। जब संरचित पहुंच किसी आवश्यक क्षेत्र को प्रदान नहीं कर सकती है, तो अनुमति प्राप्त सार्वजनिक पृष्ठों या अनुमोदित QA और मान्यता कार्यक्रमों तक ब्राउज़र संग्रह सीमित रखें।
बुकिंग खिड़की, मूल्य अस्थिरता, प्रदाता सीमाएं, और चेतावनी तीव्रता पर आधारित नीति का उपयोग करें। निकट भविष्य के ठहराव के लिए अधिक आवृत्ति से जांच करें और दूर के ठहराव कम आवृत्ति से जांच करें।
नहीं। बुकिंग से तुरंत पहले प्रदाता के माध्यम से मूल्य और उपलब्धता की पुनरावलोकन करें, और बुकिंग या भुगतान बाध्यता बनाने से पहले उपयोगकर्ता की स्पष्ट पुष्टि करें।
कैपसॉल्वर स्वीकृत ब्राउज़र सत्रों में समर्थित चुनौतियों के लिए नियंत्रित बहाली परत है। यह प्रदाता पहुंच अधिकार, दर सीमाएं, API या बुकिंग पुष्टि को स्थानांतरित नहीं करता है।
Rust में वेब स्क्रैपिंग के स्केलेबल आर्किटेक्चर सीखें, reqwest, scraper, असिंक्रोनस स्क्रैपिंग, हेडलेस ब्राउज़र स्क्रैपिंग, प्रॉक्सी रोटेशन, और संगत CAPTCHA का निपटारा।

CapSolver के साथ RoxyBrowser के एकीकरण करें ताकि ब्राउज़र के कार्यों को स्वचालित किया जा सके और reCAPTCHA, Turnstile और अन्य CAPTCHAs को बायपास किया जा सके।
