/// <summary> /// Locates places near the given coordinates which are similar in name. /// </summary> /// <param name="latitude"></param> /// <param name="longitude"></param> /// <param name="name"></param> /// <param name="containedWithin"> /// This is the place_id which you would like to restrict the search results to. Setting this value means /// only places within the given place_id will be found. /// </param> /// <param name="streetAddress"></param> /// <returns></returns> public TwitterGeoSimilarPlaces RetrieveSimilarPlaces(double latitude, double longitude, string name, string containedWithin = null, string streetAddress = null) { if (String.IsNullOrEmpty(name)) { throw new ArgumentException(); } var queryBuilder = new StringBuilder(); queryBuilder.AppendFormat("?lat={0}&long={1}&name={2}&", latitude, longitude, name); 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 + "/similar_places.json" + queryBuilder.ToString().TrimEnd('&')); TwitterGeoSimilarPlaces similarPlaces = null; try { var response = this.TwitterApi.ExecuteUnauthenticatedRequest(uri); var jsonObj = JObject.Parse(response); similarPlaces = TwitterObject.Parse <TwitterGeoSimilarPlaces>(jsonObj["result"].ToString()); } catch (TwitterException e) { if (e.StatusCode != HttpStatusCode.NotFound) { throw; } } return(similarPlaces); }
/// <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); }