public async Task <IEnumerable <PlaceTransporter> > LookForNearbyPlacesAsync(PlacesQueryTransporter query) { var placesList = new List <PlaceTransporter>(); foreach (string placeType in query.PlacesTypes) { var foundPlaces = await this.FireGooglePlacesQueryAsync(placeType, query); if (foundPlaces != null) { var responsesPlacesList = new List <GooglePlaceTransporter>(); if (!string.IsNullOrEmpty(foundPlaces.NextPageToken)) { var nextPageResponse = await this.FireGooglePlacesQueryAsync(foundPlaces.NextPageToken); if (nextPageResponse != null) { responsesPlacesList.AddRange(nextPageResponse.Results); } if (!string.IsNullOrEmpty(nextPageResponse?.NextPageToken)) { nextPageResponse = await this.FireGooglePlacesQueryAsync(foundPlaces.NextPageToken); } if (nextPageResponse != null) { responsesPlacesList.AddRange(nextPageResponse.Results); } } placesList.AddRange(responsesPlacesList.Select(rp => (PlaceTransporter)rp)); placesList.AddRange(foundPlaces.Results.Select(r => (PlaceTransporter)r)); } } return(placesList); }
private async Task <GooglePlacesResponse> FireGooglePlacesQueryAsync(string placeType, PlacesQueryTransporter query) { string latitudeString = query.Latitude.ToString("N4", CultureInfo.InvariantCulture); string longitudeString = query.Longitude.ToString("N4", CultureInfo.InvariantCulture); var keykey = Configuration["GoogleServices:GoogleServicesKey"]; string radiusString = query.Radius.ToString(); var parameters = new FormUrlEncodedContent(new[] { new KeyValuePair <string, string>("key", keykey), new KeyValuePair <string, string>("location", $"{latitudeString},{longitudeString}"), new KeyValuePair <string, string>("radius", radiusString), new KeyValuePair <string, string>("type", placeType) }); var queryString = await parameters.ReadAsStringAsync(); var response = await this.Client.GetAsync($"?{queryString}"); if (response.IsSuccessStatusCode) { var gPlaceTransporter = JsonConvert.DeserializeObject <GooglePlacesResponse>(await response.Content.ReadAsStringAsync()); if (gPlaceTransporter.Status == GooglePlacesResponseStatus.Ok) { return(gPlaceTransporter); } } return(null); }