Travel Advisor

GRATIS CON POSSIBILITÀ DI UPGRADE
Verified
Da Api Dojo | Aggiornamento a month ago | Transportation
Popolarità

9.9 / 10

Latenza

2,969ms

Livello di servizio

100%

Health Check

N/A

Torna a tutte le discussioni

Troubles with hotel request

Rapid account: Norskiy 88
norskiy88
a month ago

Hello! I’m getting an error when trying to request to hotel. What could be the problem? Here is my code

def request_to_city(city_name: str) -> List[Dict[str, Any]]:
url = "https://travel-advisor.p.rapidapi.com/locations/v2/auto-complete"
querystring = {“query”: city_name, “lang”: “ru_RU”}
headers = {
“x-rapidapi-host”: “travel-advisor.p.rapidapi.com”,
“x-rapidapi-key”: os.getenv(“RAPID_API_KEY”)
}

try:
    response = requests.get(url, params=querystring, headers=headers)
    response.raise_for_status()
    response_json = response.json()

    cities = []
    results = response_json.get("data", {}).get("Typeahead_autocomplete", {}).get("results", [])
    for result in results:
        city_info = result.get("detailsV2", {})
        city_name = city_info.get("names", {}).get("name")
        city_id = city_info.get("locationId")
        if city_name and city_id:
            cities.append({
                "city_name": city_name,
                "geoId": city_id
            })

    return cities

except requests.exceptions.RequestException as e:
    print("Error with request to API:", e)
    return []

def request_hotels(user_id: str, chat_id: str, sort_order: str, is_reverse: bool = False) -> Dict[str, Any]:
with bot.retrieve_data(user_id, chat_id) as hotels_data:
url = "https://travel-advisor.p.rapidapi.com/hotels/v2/list"
querystring = {“currency”: “RUB”, “lang”: “ru_RU”}

    headers = {
        "content-type": "application/json",
        "X-RapidAPI-Key": os.getenv("RAPID_API_KEY"),
        "X-RapidAPI-Host": "travel-advisor.p.rapidapi.com"
    }

    payload = {
        "geoId": hotels_data['city_id'],
        "checkIn": hotels_data['check_in'].strftime("%Y-%m-%d"),
        "checkOut": hotels_data['check_out'].strftime("%Y-%m-%d"),
        "sort": sort_order,
        "sortOrder": "asc",
        "filters": [
            {"id": "price", "value": [str(hotels_data['price_min']), str(hotels_data['price_max'])]}
        ],
        "rooms": [
            {"adults": 2, "childrenAges": [2]},
            {"adults": 2, "childrenAges": [3]}
        ],
        "boundingBox": {
            "northEastCorner": {"latitude": 12.248278039408776, "longitude": 109.1981618106365},
            "southWestCorner": {"latitude": 12.243407232845051, "longitude": 109.1921640560031}
        },
        "updateToken": ""
    }

    try:
        response = request_to_api("POST", url, json=payload, params=querystring, headers=headers)
        response.raise_for_status()
        response_json = response.json()

        if 'data' not in response_json or not response_json['data']:
            raise ValueError('Ошибка: Ответ не содержит ожидаемых данных')

        result = response_json['data'].get('AppPresentation_queryAppListV2')
        if not result:
            raise ValueError('Ошибка: Не удалось получить результаты поиска отелей')

        hotels = {}
        for item in result:
            if 'barItems' in item:
                for bar_item in item['barItems']:
                    if 'trackingKey' in bar_item and 'Map' in bar_item.get('buttonText', {}).get('string', ''):
                        hotels = bar_item.get('listItems', [])
                        break

        if is_reverse:
            hotels.reverse()

        data = {}
        for hotel in hotels:
            name = hotel.get('name')
            price = hotel.get('price')
            total_days = hotels_data['total_days'].days if hotels_data['total_days'].days != 0 else 1
            total_price = round(price * total_days) if isinstance(price, int) else None
            address, photos = request_photos(hotel_id=hotel.get('locationId'))

            rating_info = request_rating(hotel_id=hotel.get('locationId'))
            rating = rating_info.get('rating')

            data[name] = {
                'hotel_id': hotel.get('locationId'),
                'address': address,
                'distance': int(
                    hotel.get('destinationInfo', {}).get('distanceFromDestination', {}).get('value', 0)),
                'price': price,
                'total_price': total_price,
                'rating': rating,
                'link': f'https://www.hotels.com/h{hotel.get("locationId")}.Hotel-Information',
                'photos': photos
            }

        return data

    except Exception as e:
        print(f"Error when requesting: {e}")
        return {}
Rapid account: Apidojo
apidojo Commented a month ago

Hello,

I am sorry that I cannot help you with coding. If you want to test the API to see whether or not it works, please use an HTTP client such as postman.com.

Regards.

Partecipa alla discussione - aggiungi un commento di seguito:

Accedi/Iscriviti per pubblicare nuovi commenti