/// <summary> /// Given a latitude and a longitude, searches for up to 20 places that can be used as /// a placeId when updating a status. /// </summary> /// <param name="latitude"></param> /// <param name="longitude"></param> /// <param name="accuracy"></param> /// <param name="granularity"></param> /// <param name="maxResults"></param> /// <returns></returns> public TwitterPlace[] ReverseGeoCode(double latitude, double longitude, string accuracy = null, TwitterPlaceType granularity = TwitterPlaceType.Neighborhood, int?maxResults = null) { var queryBuilder = new StringBuilder(); queryBuilder.AppendFormat("?lat={0}&long={1}&granularity={2}&", latitude, longitude, granularity.ToString().ToLowerInvariant()); if (!String.IsNullOrEmpty(accuracy)) { queryBuilder.AppendFormat("accuracy={0}&", accuracy); } if (maxResults.HasValue) { queryBuilder.AppendFormat("max_results={0}", maxResults); } var uri = new Uri(this.CommandBaseUri + "/reverse_geocode.json" + queryBuilder.ToString().TrimEnd('&')); TwitterPlace[] places = null; try { var response = this.TwitterApi.ExecuteUnauthenticatedRequest(uri); var jsonObj = JObject.Parse(response); places = JsonConvert.DeserializeObject <TwitterPlace[]>(jsonObj["result"]["places"].ToString()); } catch (TwitterException e) { if (e.StatusCode != HttpStatusCode.NotFound) { throw; } } return(places); }
/// <summary> /// Search for places that can be attached to a statuses/update. /// </summary> /// <param name="latitude"></param> /// <param name="longitude"></param> /// <param name="query"></param> /// <param name="ipAddress"></param> /// <param name="granularity"></param> /// <param name="accuracy"></param> /// <param name="maxResults"></param> /// <param name="containedWithin"></param> /// <param name="streetAddress"></param> /// <returns></returns> public TwitterGeoSimilarPlaces Search(double?latitude, double?longitude, string query, IPAddress ipAddress, TwitterPlaceType granularity = TwitterPlaceType.Neighborhood, string accuracy = null, int?maxResults = null, string containedWithin = null, string streetAddress = null) { if (!latitude.HasValue && !longitude.HasValue && String.IsNullOrEmpty(query) && ipAddress == null) { throw new ArgumentException("At least one of the following parameters must be provided to " + "this resource: lat, long, ip, or query."); } var queryBuilder = new StringBuilder(); queryBuilder.AppendFormat("?granularity={0}&", granularity.ToString().ToLowerInvariant()); if (latitude.HasValue) { queryBuilder.AppendFormat("lat={0}&", latitude); } if (longitude.HasValue) { queryBuilder.AppendFormat("long={0}&", longitude); } if (!String.IsNullOrEmpty(query)) { queryBuilder.AppendFormat("query={0}&", query); } if (ipAddress != null) { queryBuilder.AppendFormat("ip={0}&", ipAddress.ToString()); } if (!String.IsNullOrEmpty(accuracy)) { queryBuilder.AppendFormat("accuracy={0}&", accuracy); } if (maxResults.HasValue) { queryBuilder.AppendFormat("max_results={0}&", maxResults); } if (!String.IsNullOrEmpty(containedWithin)) { queryBuilder.AppendFormat("contained_within=(0}&", containedWithin); } if (!String.IsNullOrEmpty(streetAddress)) { queryBuilder.AppendFormat("attribute:street_address={0}", streetAddress); } var uri = new Uri(this.CommandBaseUri + "/search.json" + queryBuilder.ToString().TrimEnd('&')); TwitterGeoSimilarPlaces places = null; try { var response = this.TwitterApi.ExecuteUnauthenticatedRequest(uri); var jsonObj = JObject.Parse(response); places = TwitterObject.Parse <TwitterGeoSimilarPlaces>(jsonObj["result"].ToString()); } catch (TwitterException e) { if (e.StatusCode != HttpStatusCode.NotFound) { throw; } } return(places); }
/// <summary> /// Search for places that can be attached to a statuses/update. /// </summary> /// <param name="latitude"></param> /// <param name="longitude"></param> /// <param name="query"></param> /// <param name="ipAddress"></param> /// <param name="granularity"></param> /// <param name="accuracy"></param> /// <param name="maxResults"></param> /// <param name="containedWithin"></param> /// <param name="streetAddress"></param> /// <returns></returns> public TwitterGeoSimilarPlaces Search(double? latitude, double? longitude, string query, IPAddress ipAddress, TwitterPlaceType granularity = TwitterPlaceType.Neighborhood, string accuracy = null, int? maxResults = null, string containedWithin = null, string streetAddress = null) { if (!latitude.HasValue && !longitude.HasValue && String.IsNullOrEmpty(query) && ipAddress == null) throw new ArgumentException("At least one of the following parameters must be provided to " + "this resource: lat, long, ip, or query."); var queryBuilder = new StringBuilder(); queryBuilder.AppendFormat("?granularity={0}&", granularity.ToString().ToLowerInvariant()); if (latitude.HasValue) queryBuilder.AppendFormat("lat={0}&", latitude); if (longitude.HasValue) queryBuilder.AppendFormat("long={0}&", longitude); if (!String.IsNullOrEmpty(query)) queryBuilder.AppendFormat("query={0}&", query); if (ipAddress != null) queryBuilder.AppendFormat("ip={0}&", ipAddress.ToString()); if (!String.IsNullOrEmpty(accuracy)) queryBuilder.AppendFormat("accuracy={0}&", accuracy); if (maxResults.HasValue) queryBuilder.AppendFormat("max_results={0}&", maxResults); if (!String.IsNullOrEmpty(containedWithin)) queryBuilder.AppendFormat("contained_within=(0}&", containedWithin); if (!String.IsNullOrEmpty(streetAddress)) queryBuilder.AppendFormat("attribute:street_address={0}", streetAddress); var uri = new Uri(this.CommandBaseUri + "/search.json" + queryBuilder.ToString().TrimEnd('&')); TwitterGeoSimilarPlaces places = null; try { var response = this.TwitterApi.ExecuteUnauthenticatedRequest(uri); var jsonObj = JObject.Parse(response); places = TwitterObject.Parse<TwitterGeoSimilarPlaces>(jsonObj["result"].ToString()); } catch (TwitterException e) { if (e.StatusCode != HttpStatusCode.NotFound) throw; } return places; }
/// <summary> /// Given a latitude and a longitude, searches for up to 20 places that can be used as /// a placeId when updating a status. /// </summary> /// <param name="latitude"></param> /// <param name="longitude"></param> /// <param name="accuracy"></param> /// <param name="granularity"></param> /// <param name="maxResults"></param> /// <returns></returns> public TwitterPlace[] ReverseGeoCode(double latitude, double longitude, string accuracy = null, TwitterPlaceType granularity = TwitterPlaceType.Neighborhood, int? maxResults = null) { var queryBuilder = new StringBuilder(); queryBuilder.AppendFormat("?lat={0}&long={1}&granularity={2}&", latitude, longitude, granularity.ToString().ToLowerInvariant()); if (!String.IsNullOrEmpty(accuracy)) queryBuilder.AppendFormat("accuracy={0}&", accuracy); if (maxResults.HasValue) queryBuilder.AppendFormat("max_results={0}", maxResults); var uri = new Uri(this.CommandBaseUri + "/reverse_geocode.json" + queryBuilder.ToString().TrimEnd('&')); TwitterPlace[] places = null; try { var response = this.TwitterApi.ExecuteUnauthenticatedRequest(uri); var jsonObj = JObject.Parse(response); places = JsonConvert.DeserializeObject<TwitterPlace[]>(jsonObj["result"]["places"].ToString()); } catch (TwitterException e) { if (e.StatusCode != HttpStatusCode.NotFound) throw; } return places; }