/// <summary> /// Constructs a <see cref="Uri"/> for a search request based on the provided <paramref name="searchString"/> /// <param name="searchString">Search query</param> /// <param name="request">Autocomplete request specifying additional components in the search Url to be generated</param> /// <returns>URI</returns> /// </summary> public Uri BuildSearchUrl(string searchString, AutocompleteRequest request) { var url = new StringBuilder(); url.Append($"{_baseURL}{_apiKey}"); url.Append($"&input={searchString}"); if (!string.IsNullOrWhiteSpace(_language)) { url.Append($"&language={_language}"); } if (request != null) { if (!string.IsNullOrWhiteSpace(request.Components)) { url.Append($"&components={request.Components}"); } if (!string.IsNullOrWhiteSpace(request.Types)) { url.Append($"&types={request.Types}"); } if (!string.IsNullOrWhiteSpace(request.Region)) { url.Append("®ion=au"); } } return(new Uri(url.ToString())); }
/// <summary> /// Invokes <see cref="SearchAsync(string, AutocompleteRequest)"/> with the given <paramref name="autocomleteRequest"/> and caches the results /// <param name="input">Search string</param> /// <param name="request">Autocomplete request specifying additional components in the search Url to be generated</param> /// </summary> public async Task <OperationResult <PlaceResponse> > AutocompleteAsync(string input, AutocompleteRequest autocomleteRequest = null) { //Get cached results var result = _cachingProvider.GetAutocompleteResult(input); if (result != null) { return(OperationResult <PlaceResponse> .AsSuccess(result)); } OperationResult <PlaceResponse> searchResult; if (autocomleteRequest != null) { searchResult = await SearchAsync(input, autocomleteRequest); } else { searchResult = await SearchAsync(input, new AutocompleteRequest() { Region = "au" }); } if (!searchResult.IsSuccessful) { return(OperationResult <PlaceResponse> .AsFailure("Search response result is null")); } _cachingProvider.StoreAutocompleteResult(input, searchResult.Result); return(searchResult); }
/// <summary> /// Invokes places search webservice /// <param name="searchString">Search string</param> /// <param name="request">Autocomplete request specifying additional components in the search Url to be generated</param> /// <returns>Place result with predictions</returns> /// </summary> public async Task <OperationResult <PlaceResponse> > SearchAsync(string searchString, AutocompleteRequest request) { if (string.IsNullOrWhiteSpace(searchString)) { return(OperationResult <PlaceResponse> .AsFailure("PlaceId cannot be empty")); } var url = _urlFactory.BuildSearchUrl(searchString, request); using (var client = new HttpClient()) { AcceptJsonResponse(client); var response = await client.GetAsync(url).ConfigureAwait(false); if (!response.IsSuccessStatusCode) { return(OperationResult <PlaceResponse> .AsFailure(response.ReasonPhrase)); } var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var result = JsonConvert.DeserializeObject <PlaceResponse>(content); return(OperationResult <PlaceResponse> .AsSuccess(result)); } }
/// <summary> /// Invokes <see cref="SearchAsync(string, AutocompleteRequest)"/> with the given <paramref name="autocomleteRequest"/> and caches the results /// <param name="input">Search string</param> /// <param name="request">Autocomplete request specifying additional components in the search Url to be generated</param> /// </summary> public async Task <OperationResult <PlaceResponse> > AutocompleteAsync(string input, AutocompleteRequest autocomleteRequest) { //Get cached results var result = _cachingProvider.GetAutocompleteResult(input); if (result != null) { return(OperationResult <PlaceResponse> .AsSuccess(result)); } var searchResult = await SearchAsync(input, new AutocompleteRequest { Region = "au" }) .ContinueWith(response => { if (response.Result == null) { return(OperationResult <PlaceResponse> .AsFailure("Search response result is null")); } return(response.Result); }) .ConfigureAwait(false); if (searchResult.IsSuccessful) { _cachingProvider.StoreAutocompleteResult(input, searchResult.Result); } return(searchResult); }
/// <summary> /// Invokes places search webservice /// <param name="searchString">Search string</param> /// <param name="request">Autocomplete request specifying additional components in the search Url to be generated</param> /// <returns>Place result with predictions</returns> /// </summary> public Task <OperationResult <PlaceResponse> > SearchAsync(string searchString, AutocompleteRequest request) { if (string.IsNullOrWhiteSpace(searchString)) { Task.Run(() => { return(OperationResult <DetailsResponse> .AsFailure("PlaceId cannot be empty")); }); } var url = _urlFactory.BuildSearchUrl(searchString, request); using (var client = new HttpClient()) { client.DefaultRequestHeaders.Add("Content-Type", "application/json;charset=utf-8"); return(client.GetStringAsync(url) .ContinueWith(response => { var result = JsonConvert.DeserializeObject <PlaceResponse>(response.Result); return OperationResult <PlaceResponse> .AsSuccess(result); })); } }