Travel Partner Prices API
Interfejs Travel Partner Prices API udostępnia interfejs RESTful do przesyłania cen obiektów do Google.
Usługa: travelpartnerprices.googleapis.com
Zalecamy wywołanie tej usługi przy użyciu dostarczonych przez Google bibliotek klienta. Jeśli aplikacja musi wywoływać tę usługę przy użyciu własnych bibliotek, skontaktuj się z zespołem ds. technicznej obsługi klienta, aby uzyskać dokument Discovery tej usługi.
Punkt końcowy usługi
Punkt końcowy usługi to podstawowy adres URL, który określa adres sieciowy usługi interfejsu API. Jedna usługa może mieć wiele punktów końcowych. Ta usługa ma następujący punkt końcowy i wszystkie wymienione identyfikatory URI odnoszą się do niego:
https://travelpartnerprices.googleapis.com
| Metody | |
|---|---|
ingestLosPropertyPrices |
POST /v1/accounts/account_id/properties/property_id:ingestLosPropertyPrices
Prześlij podane ceny za długość pobytu w przypadku określonego obiektu. Wymaga zakodowanej w formacie JSON wiadomości z cenami LoS (patrz poniżej) jako treści wiadomości HTTP.
|
Uwierzytelnianie interfejsu API
Interfejs Travel Partner Prices API używa protokołu OAuth 2.0 do uwierzytelniania aplikacji, dzięki czemu możesz uzyskiwać dostęp do interfejsów API.
Aby uzyskać autoryzację interfejsu Travel Partner Prices API, postępuj zgodnie z instrukcjami konfiguracji OAUTH 2.0.
Gdy tworzysz nowy projekt dla interfejsu Travel Partners Prices API, musisz włączyć dostęp do nowego projektu w konsoli Google Cloud. Jest to podobne do instrukcji podanych w interfejsie Travel Partner API.
Aby włączyć projekt, postępuj zgodnie z instrukcjami podanymi w przypadku interfejsu Travel Partner API i zastąp wszystkie wystąpienia „Travel Partner API” ciągiem „Travel Partner Prices API”.
Zakres interfejsu Travel Partner Prices API:"https://travelpartnerprices.googleapis.com"
Ścieżka przesyłania danych w przypadku interfejsu Travel Partner Prices API to:
"/travel/lodging/uploads/accounts/<account_id>/property_data"
Żądania
Składnia
Wiadomość LoS Prices ma tę składnię:
{
"requestTime": YYYY-MM-DDTHH:mm:ss.SSSZ,
"propertyPrices": {
"arrivalDatePrices": [{
"startDate": {
"year": int
"month": int
"day": int
}
"endDate": {
"year": int
"month": int
"day": int
}
"productPrices": [{
"roomTypeId": "string"
"ratePlanId": "string"
"occupancyPrices": [{
"adults": int
"prices": [{
"rateRuleId": "string"
"currencyCode": "string"
"rates": [night_1,night_2,...]
"taxes": [night_1,night_2,...]
"fees": [night_1,night_2,...]
}]
}]
}]
}]
}
}
Elementy i atrybuty
Wiadomość z cenami za długość pobytu zawiera te elementy i atrybuty:
| Element | Wystąpienia | Typ | Opis |
|---|---|---|---|
| requestTime | 1 | string | Moment wysłania wiadomości z ceną LoS, wyrażony jako ciąg znaków w formacie RFC 3339. Wiadomości wysłane w ciągu ostatnich 24 godzin z symbolem Wiadomości są przetwarzane w kolejności Standard RFC 3339 wymaga w pełni określonych dat i godzin w formacie Ułamki sekund są opcjonalne i mogą być wyrażone z dokładnością do nanosekundy. Na przykład |
| propertyPrices | 1 | Object | ceny obowiązujące w obiekcie; Wszystkie ceny w tym propertyPrices
dotyczą tej samej usługi.
Ten element nie jest powtarzany. Aby wysłać ceny dla wielu usług, musisz wysłać kilka żądań HTTP (co najmniej jedno na usługę). |
| arrivalDayPrices[] | 1..n | Object | ceny dla daty przyjazdu. Wszystkie ceny w tym arrivalDayPrices
dotyczą konkretnego obiektu, ale różnych dat przyjazdu. |
| startDate | 1 | Object | productPrices obowiązuje w przypadku wszystkich dat przyjazdu między startDate a endDate włącznie.
Jeśli chcesz podać tylko jedną datę przyjazdu (a nie zakres), wpisz ją w polach |
| startDate.year | 1 | integer | Rok startDate. Wartość musi mieścić się w przedziale od 1 do 9999. |
| startDate.month | 1 | integer | Miesiąc roku. Musi mieścić się w przedziale od 1 do 12. |
| startDate.day | 1 | integer | Dzień miesiąca. Wartość musi mieścić się w zakresie od 1 do 31 i być prawidłowa w przypadku danego roku i miesiąca. |
| endDate | 0..1 | Object | Ceny produktów są stosowane do wszystkich dat przyjazdu między startDate a endDate włącznie.
Jeśli chcesz podać tylko jedną datę przyjazdu (a nie zakres), możesz pominąć parametr |
| endDate.year | 1 | integer | Rok endDate. Wartość musi mieścić się w przedziale od 1 do 9999. |
| endDate.month | 1 | integer | Miesiąc roku. Musi mieścić się w przedziale od 1 do 12. |
| endDate.day | 1 | integer | Dzień miesiąca. Wartość musi mieścić się w zakresie od 1 do 31 i być prawidłowa w przypadku danego roku i miesiąca. |
| productPrices[] | 1..n | Object | Ceny produktu. Wszystkie ceny w tym productPrices
dotyczą konkretnej kombinacji obiektu i daty przyjazdu, ale różnych produktów.
|
| roomTypeId | 0..1 | string | Unikalny identyfikator pokoju, do którego odnosi się ta cena. Użyj tego identyfikatora, aby dopasować dane pakietu pokoju do danych przesłanych w parametrze roomdata. Więcej informacji znajdziesz w artykule Metadane pakietu Room Bundle. |
| ratePlanId | 0..1 | string | Unikalny identyfikator danych pakietu, do którego odnosi się ta cena. Użyj tego identyfikatora, aby dopasować dane pakietu pokoju do danych przesłanych w ramach parametru packagedata. Więcej informacji znajdziesz w artykule Metadane pakietu Room Bundle. |
| occupancyPrices[] | 1..n | Object | ceny za pobyt, Wszystkie ceny w tym occupancyPrices
dotyczą konkretnego obiektu, daty przyjazdu i kombinacji produktów, ale różnych liczb gości.
|
| adults | 1 | integer | Maksymalna liczba gości, których można zarezerwować w pokoju, w tym osoby dorosłe i dzieci. Ta wartość jest ustawiana dla wszystkich stawek w odpowiednim polu occupancyPrices i musi być dodatnią liczbą całkowitą z zakresu od 1 do 99.
Uwaga: aby wysłać dane o zajętości w przypadku więcej niż 4 osób dorosłych, skontaktuj się z zespołem pomocy. |
| prices[] | 1..n | Object | Ceny za długość pobytu. Wszystkie ceny w prices dotyczą konkretnej kombinacji obiektu, daty przyjazdu, produktu i liczby osób.
|
| rateRuleId | 0..1 | string | W przypadku cen warunkowych ten identyfikator dopasowuje cenę do definicji w pliku definicji reguł dotyczących cen. Limit znaków w tym polu wynosi 40. |
| currencyCode | 1 | string | Trzyliterowy kod waluty, w której podane są wartości rates i taxes. np. "USD" w przypadku dolarów amerykańskich.
|
| rates[] | 30 | float | Składnik ceny za pobyt o określonej długości, który stanowi stawka podstawowa.
Jeśli podana jest odpowiednia wartość Wartość w indeksie Musisz przesyłać pełny zestaw 30 cen LoS naraz. Jeśli wyślesz mniej niż 30 cen LoS, wszystkie podane ceny LoS zostaną przetworzone w normalny sposób, a pozostałe stawki będą niedostępne do poziomu LoS 30. Jeśli wyślesz więcej niż 30 stawek,wszystkie stawki powyżej 30. zostaną odrzucone. Niedostępne długości pobytu powinny być oznaczone symbolem |
| taxes[] | 30 | float | Składnik podatkowy cen za długość pobytu.
Wartość w indeksie |
| fees[] | 30 | float | Składnik opłaty w cenach za długość pobytu.
Wartość w indeksie |
Przykład
Stawki i podatki na podstawie długości pobytu
W tym przykładzie pokazujemy, jak ustawić minimalną długość pobytu na 2 noce w przypadku jednej daty zameldowania i brak dostępności w przypadku innej daty zameldowania.
Jeśli ustawisz startDate od 1 września 2023 r. bez podania endDate, oznacza to, że określasz stawki tylko dla jednej daty i możesz pominąć endDate.
Tablica occupancyPrices ustawiona na 2 umożliwia ustawianie różnych stawek
przy różnym obłożeniu. Dlatego brak wolnych miejsc w dniu 09.04.23 r. ogranicza dostępność rates.
Wyświetlany zakres taxes jest obliczany jako 10% stawki.
Tablica fees pokazuje opłatę za sprzątanie w wysokości 50 USD za pobyt.
Jeśli cała data zameldowania jest niedostępna – 3.9.2023, musisz wyraźnie wysłać datę i pominąć znaki rates, taxes i productPrices, aby wskazać, że w wybranym dniu nie ma dostępności.
{
"requestTime": "2023-08-10T12:15:222",
"propertyPrices": {
"arrivalDatePrices": [
{
"startDate": {
"year": 2023,
"month": 9,
"day": 1
},
"productPrices": [
{
"occupancyPrices": [
{
"adults": 2,
"prices": [
{
"currencyCode": "USD",
"rates": [
0, 200, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
],
"taxes": [
0, 20, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
],
"fees": [
0, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
]
}
]
}
]
}
]
},
{
"startDate": {
"year": 2023,
"month": 9,
"day": 3
},
"productPrices": [
{
"occupancyPrices": [
{
"adults": 2,
"prices": [
{
"currencyCode": "USD",
"rates": [
0, 200, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
],
"taxes": [
0, 20, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
],
"fees": [
0, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
]
}
]
}
]
}
]
}
]
}
}
Treść odpowiedzi
W przypadku powodzenia treść żądania zawiera dane o następującej strukturze:
| Zapis JSON | |
|---|---|
{
"name": "string"
}
|
|
| Pola | |
|---|---|
name |
Nazwa zasobu PropertyPrices, który został zmodyfikowany. ma postać:accounts/{account}/properties/{property}.
|