/// <summary> /// Calls the Google Places API to retrieve autofill suggestions /// </summary> /// <returns>The places.</returns> /// <param name="newTextValue">New text value.</param> /// <param name="apiKey">The API key</param> /// <param name="bias">The location bias (can be NULL)</param> /// <param name="components">The components (can be NULL)</param> /// <param name="type">Filter for the returning types </param> /// <param name="language">The language of the results</param> public static async Task <AutoCompleteResult> GetPlaces(string newTextValue, string apiKey, LocationBias bias, Components components, PlaceType type, GoogleAPILanguage language) { if (string.IsNullOrEmpty(apiKey)) { throw new Exception("You have not assigned a Google API key to PlacesBar"); } try { var requestURI = CreatePredictionsUri(newTextValue, apiKey, bias, components, type, language); var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Get, requestURI); var response = await client.SendAsync(request); if (!response.IsSuccessStatusCode) { Debug.WriteLine("PlacesBar HTTP request denied."); return(null); } var result = await response.Content.ReadAsStringAsync(); if (result == "ERROR") { Debug.WriteLine("PlacesSearchBar Google Places API returned ERROR"); return(null); } return(AutoCompleteResult.FromJson(JObject.Parse(result))); } catch (Exception ex) { Debug.WriteLine("PlacesBar HTTP issue: {0} {1}", ex.Message, ex); return(null); } }
/// <summary> /// Creates the predictions URI. /// </summary> /// <returns>The predictions URI.</returns> /// <param name="newTextValue">New text value.</param> /// <param name="apiKey">The API key</param> /// <param name="bias">The location bias (can be NULL)</param> /// <param name="components">The components (can be NULL)</param> /// <param name="type">Filter for the returning types </param> /// <param name="language">The language of the results</param> private static string CreatePredictionsUri(string newTextValue, string apiKey, LocationBias bias, Components components, PlaceType type, GoogleAPILanguage language) { var url = "https://maps.googleapis.com/maps/api/place/autocomplete/json"; var input = Uri.EscapeUriString(newTextValue); var pType = PlaceTypeValue(type); var constructedUrl = $"{url}?input={input}&types={pType}&key={apiKey}"; if (bias != null) { constructedUrl = constructedUrl + bias; } if (components != null) { constructedUrl += components; } if (language != GoogleAPILanguage.Unset) { constructedUrl += "&Language=" + GoogleAPILanguageHelper.ToAPIString(language); } return(constructedUrl); }
public static string ToAPIString(GoogleAPILanguage lng) { // https://developers.google.com/maps/faq#languagesupport switch (lng) { case GoogleAPILanguage.Afrikaans: return("af"); case GoogleAPILanguage.Albanian: return("sq"); case GoogleAPILanguage.Amharic: return("am"); case GoogleAPILanguage.Arabic: return("ar"); case GoogleAPILanguage.Armenian: return("ar"); case GoogleAPILanguage.Azerbaijani: return("az"); case GoogleAPILanguage.Basque: return("eu"); case GoogleAPILanguage.Belarusian: return("be"); case GoogleAPILanguage.Bengali: return("bn"); case GoogleAPILanguage.Bosnian: return("bs"); case GoogleAPILanguage.Bulgarian: return("bg"); case GoogleAPILanguage.Burmese: return("my"); case GoogleAPILanguage.Catalan: return("ca"); case GoogleAPILanguage.Chinese: return("zh"); case GoogleAPILanguage.ChineseSimplified: return("zh-CN"); case GoogleAPILanguage.ChineseHongKong: return("zh-HK"); case GoogleAPILanguage.ChineseTraditional: return("zh-TW"); case GoogleAPILanguage.Croatian: return("hr"); case GoogleAPILanguage.Czech: return("cs"); case GoogleAPILanguage.Danish: return("da"); case GoogleAPILanguage.Dutch: return("nl"); case GoogleAPILanguage.English: return("en"); case GoogleAPILanguage.EnglishAustralian: return("en-AU"); case GoogleAPILanguage.EnglishGreatBritain: return("en-GB"); case GoogleAPILanguage.Estonian: return("et"); case GoogleAPILanguage.Farsi: return("fa"); case GoogleAPILanguage.Finnish: return("fi"); case GoogleAPILanguage.Filipino: return("fil"); case GoogleAPILanguage.French: return("fr"); case GoogleAPILanguage.FrenchCanada: return("fr-CA"); case GoogleAPILanguage.Galician: return("gl"); case GoogleAPILanguage.Georgian: return("ka"); case GoogleAPILanguage.German: return("de"); case GoogleAPILanguage.Greek: return("el"); case GoogleAPILanguage.Gujarati: return("gu"); case GoogleAPILanguage.Hebrew: return("iw"); case GoogleAPILanguage.Hindi: return("hi"); case GoogleAPILanguage.Hungarian: return("hu"); case GoogleAPILanguage.Icelandic: return("is"); case GoogleAPILanguage.Indonesian: return("id"); case GoogleAPILanguage.Italian: return("it"); case GoogleAPILanguage.Japanese: return("ja"); case GoogleAPILanguage.Kannada: return("kn"); case GoogleAPILanguage.Kazakh: return("kk"); case GoogleAPILanguage.Khmer: return("km"); case GoogleAPILanguage.Korean: return("ko"); case GoogleAPILanguage.Kyrgyz: return("ky"); case GoogleAPILanguage.Lao: return("lo"); case GoogleAPILanguage.Latvian: return("lv"); case GoogleAPILanguage.Lithuanian: return("lt"); case GoogleAPILanguage.Macedonian: return("mk"); case GoogleAPILanguage.Malay: return("ms"); case GoogleAPILanguage.Malayalam: return("ml"); case GoogleAPILanguage.Marathi: return("mr"); case GoogleAPILanguage.Mongolian: return("mn"); case GoogleAPILanguage.Nepali: return("ne"); case GoogleAPILanguage.Norwegian: return("no"); case GoogleAPILanguage.Polish: return("pl"); case GoogleAPILanguage.Portuguese: return("pt"); case GoogleAPILanguage.PortugueseBrazil: return("pt-BR"); case GoogleAPILanguage.PortuguesePortugal: return("pt-PT"); case GoogleAPILanguage.Punjabi: return("pa"); case GoogleAPILanguage.Romanian: return("ro"); case GoogleAPILanguage.Russian: return("ru"); case GoogleAPILanguage.Serbian: return("sr"); case GoogleAPILanguage.Sinhalese: return("si"); case GoogleAPILanguage.Slovak: return("sk"); case GoogleAPILanguage.Slovenian: return("sl"); case GoogleAPILanguage.Spanish: return("es"); case GoogleAPILanguage.SpanishLatinAmerica: return("es-419"); case GoogleAPILanguage.Swahili: return("sw"); case GoogleAPILanguage.Swedish: return("sv"); case GoogleAPILanguage.Tamil: return("ta"); case GoogleAPILanguage.Telugu: return("te"); case GoogleAPILanguage.Thai: return("th"); case GoogleAPILanguage.Turkish: return("tr"); case GoogleAPILanguage.Ukrainian: return("uk"); case GoogleAPILanguage.Urdu: return("ur"); case GoogleAPILanguage.Uzbek: return("uz"); case GoogleAPILanguage.Vietnamese: return("vi"); case GoogleAPILanguage.Zulu: return("zu"); case GoogleAPILanguage.Unset: return("zu"); default: return(""); } }