Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }