public ViatorOperation(IHttpClient httpClient, ViatorSetting viatorSetting) { _httpClient = httpClient; _apiKey = viatorSetting.ApiKey; _baseAddress = viatorSetting.BaseAddress; _defaultCurrencyCode = viatorSetting.CurrencyCode; }
/// <summary> /// get voucher detail /// </summary> /// <param name="voucherKey"></param> /// <returns></returns> public async Task <string> Voucher(string voucherKey, ViatorSetting setting = null) { var uri = $"/service/booking/voucher"; string fullURL = $"{GenerateBaseURL(uri,setting)}&{GenerateQueryString(new { voucherKey })}"; var response = await _httpClient.GetStringAsync(fullURL); return(response); }
/// <summary> /// Get Location/Destination list /// </summary> /// <returns></returns> public async Task <LocationResponse> GetLocations(ViatorSetting setting = null) { var uri = $"service/taxonomy/locations"; var response = await _httpClient.GetStringAsync(GenerateBaseURL(uri, setting)); var result = LocationResponse.FromJson(response); return(result); }
private string GenerateBaseURL(string uri, ViatorSetting setting = null) { if (setting == null) { return($"{_baseAddress}/{uri}?apiKey={_apiKey}"); } else { return($"{setting.BaseAddress}/{uri}?apiKey={setting.ApiKey}"); } }
public async Task <CategoryResponse> GetCategories(string destId, ViatorSetting setting = null) { var uri = $"service/taxonomy/categories"; string fullURL = $"{GenerateBaseURL(uri,setting)}&destId={destId}"; var response = await _httpClient.GetStringAsync(fullURL); var result = CategoryResponse.FromJson(response); return(result); }
/// <summary> /// cofirm booking /// </summary> /// <param name="bookingModel"></param> /// <returns></returns> public async Task <BookingResponse> MakeBooking(BookingRequest bookingModel, ViatorSetting setting = null) { var uri = $"/service/booking/book"; var response = await _httpClient.PostAsync <BookingRequest>(GenerateBaseURL(uri, setting), bookingModel); if (response.IsSuccessStatusCode) { var content = response.Content.ReadAsStringAsync().Result; var result = BookingResponse.FromJson(content); return(result); } else { throw new Exception("Viator API - Booking: Api error response"); } }
public async Task <BookingAvailableTourGrade> AvailableTourGrades(BookingTourGradeRequest bookingTourGradeRequest, ViatorSetting setting = null) { var uri = $"/service/booking/availability/tourgrades"; var response = await _httpClient.PostAsync <BookingTourGradeRequest>(GenerateBaseURL(uri, setting), bookingTourGradeRequest); if (response.IsSuccessStatusCode) { var content = response.Content.ReadAsStringAsync().Result; var result = BookingAvailableTourGrade.FromJson(content); return(result); } else { throw new Exception("Viator API - Tour Grade: Api error response"); } }
public async Task <ProductSearchResponse> ProductSearchByCode(ProductSearchByCodeRequest productSearchByCodeModel, ViatorSetting setting = null) { var uri = $"service/search/products/codes"; try { var response = await _httpClient.PostAsync <ProductSearchByCodeRequest>(GenerateBaseURL(uri, setting), productSearchByCodeModel); if (response.IsSuccessStatusCode) { var content = response.Content.ReadAsStringAsync().Result; var result = ProductSearchResponse.FromJson(content); return(result); } else { throw new Exception($"Viator API - ProductSearchByCode: Api error response - {response.Content} "); } } catch (Exception ex) { throw ex; } }
/// <summary> /// cancel booking /// </summary> /// <param name="bookingModel"></param> /// <returns></returns> public async Task <CancelBookingResponse> CancelMerchantBooking(CancelBookingRequest cancelBookingModel, ViatorSetting setting = null) { var uri = $"/service/merchant/cancellation"; var response = await _httpClient.PostAsync <CancelBookingRequest>(GenerateBaseURL(uri, setting), cancelBookingModel); if (response.IsSuccessStatusCode) { var content = response.Content.ReadAsStringAsync().Result; var result = CancelBookingResponse.FromJson(content); return(result); } else { throw new Exception("Viator API - Booking Status: Api error response"); } }
public async Task <FreeTextSearchResponse> FreeTextSearch(FreeTextSearchRequest freeTextSearchModel, ViatorSetting setting = null) { var uri = $"service/search/freetext"; var response = await _httpClient.PostAsync <FreeTextSearchRequest>(GenerateBaseURL(uri, setting), freeTextSearchModel); if (response.IsSuccessStatusCode) { var content = response.Content.ReadAsStringAsync().Result; var result = FreeTextSearchResponse.FromJson(content); if (result.Data.Count == 0) { throw new Exception("Viator API - FreeTextSearch : Empty response return from server"); } return(result); } else { throw new Exception("Viator API - FreeTextSearch: Api error response"); } }
/// <summary> /// //Get availabe Hotels list for chosen product /// </summary> /// <param name="productCode"></param> /// <returns></returns> public async Task <HotelResponseModel> GetHotels(string productCode, long destId, ViatorSetting setting = null) { var uri = $"/service/booking/hotels"; string fullURL; if (!string.IsNullOrEmpty(productCode)) { fullURL = $"{GenerateBaseURL(uri,setting)}&{GenerateQueryString(new { productCode })}"; } else { fullURL = $"{GenerateBaseURL(uri,setting)}&{GenerateQueryString(new { destId })}"; } var response = await _httpClient.GetStringAsync(fullURL); return(JsonConvert.DeserializeObject <HotelResponseModel>(response)); }
public async Task <MonthlyAvailableTourGrades> AvailableMonthlyAvailableTourGrades(string productCode, int month, int year, string currencyCode, ViatorSetting setting = null) { var uri = $"/service/booking/availability/tourgrades/pricingmatrix"; var request = new MonthlyAvailableTourGradesRequest() { productCode = productCode, currencyCode = currencyCode, month = month.ToString(), year = year.ToString() }; var response = await _httpClient.PostAsync <MonthlyAvailableTourGradesRequest>(GenerateBaseURL(uri, setting), request); var content = response.Content.ReadAsStringAsync().Result; var result = MonthlyAvailableTourGrades.FromJson(content); return(result); }
/// <summary> /// //Calculate price before confirmation booking to confirm the availabity of product on chosen date /// </summary> /// <param name="calculatePriceModel"></param> /// <returns></returns> public async Task <CalculatedBookingPriceResponse> CalculatePrice(CalculateBookingPriceRequest calculatePriceModel, ViatorSetting setting = null) { var uri = $"/service/booking/calculateprice"; var response = await _httpClient.PostAsync <CalculateBookingPriceRequest>(GenerateBaseURL(uri, setting), calculatePriceModel); if (response.IsSuccessStatusCode) { var content = response.Content.ReadAsStringAsync().Result; var result = CalculatedBookingPriceResponse.FromJson(content); return(result); } else { throw new Exception("Viator API - Calculate Price: Api error response"); } }
public async Task <AttractionResponse> GetAttraction(AttractionRequest attractionRequest, ViatorSetting setting = null) { var uri = $"service/taxonomy/attractions"; var response = await _httpClient.PostAsync <AttractionRequest>(GenerateBaseURL(uri, setting), attractionRequest); if (response.IsSuccessStatusCode) { var content = response.Content.ReadAsStringAsync().Result; var result = AttractionResponse.FromJson(content); if (result.Attractions.Count == 0) { throw new Exception("Viator API - GetAttraction : Empty response return from server"); } return(result); } else { throw new Exception("Viator API - GetAttraction: Api error response"); } }
/// <summary> /// //Get All available dates for a product excluding weekdays /// </summary> /// <param name="productCode"></param> /// <returns></returns> public async Task <BookingAvaialbilityDates> GetAvailabeDate(string productCode, ViatorSetting setting = null) { var uri = $"/service/booking/availability/dates"; string fullURL = $"{GenerateBaseURL(uri,setting)}&{GenerateQueryString(new { productCode })}"; var response = await _httpClient.GetStringAsync(fullURL); var result = BookingAvaialbilityDates.FromJson(response); return(result); }
/// <summary> /// Get product availibility list based on product code /// </summary> /// <param name="productAvailabilityModel"></param> /// <returns></returns> public async Task <string> AvailableProducts(ProductAvailabilityRequest productAvailabilityModel, ViatorSetting setting = null) { var uri = $"service/available/products"; var response = await _httpClient.PostAsync <ProductAvailabilityRequest>(GenerateBaseURL(uri, setting), productAvailabilityModel); if (response.IsSuccessStatusCode) { var result = response.Content.ReadAsStringAsync().Result; if (string.IsNullOrEmpty(result)) { throw new Exception("Viator API - AvailableProducts : Empty response return from server"); } return(result); } else { throw new Exception("Viator API - AvailableProducts: Api error response"); } }
/// <summary> /// Get product photos list /// </summary> /// <param name="code"> product code</param> /// <param name="topX">pagination</param> /// <returns></returns> public async Task <ProductPhotoResponse> GetProductPhotos(string code, string topX, bool showUnavailable = false, ViatorSetting setting = null) { var uri = $"service/product/photos"; string fullURL = $"{GenerateBaseURL(uri,setting)}&{GenerateQueryString(new { code, topX, showUnavailable })}"; var response = await _httpClient.GetStringAsync(fullURL); var result = ProductPhotoResponse.FromJson(response); return(result); }
/// <summary> /// Gets Product Reviews list /// </summary> /// <param name="productReviewModel"></param> /// <returns></returns> public async Task <ProductReviewResponse> GetProductReviews(ProductReviewRequest productReviewModel, ViatorSetting setting = null) { var uri = $"service/product/reviews"; string fullURL = $"{GenerateBaseURL(uri, setting)}&{GenerateQueryString(productReviewModel)}"; var response = await _httpClient.GetStringAsync(fullURL); var result = ProductReviewResponse.FromJson(response); return(result); }