I'm trying to get TweetSharp to perform a search on tweets from within a certain area. Unfortunately this always returns 0 results.
public IEnumerable<TwitterSearchStatus> Search(string terms)
{
TwitterSearchResult result = ServiceManager.Instance.service.Search(terms,100);
IEnumerable<TwitterSearchStatus> returnValue = result.Statuses;
return returnValue;
}
public IEnumerable<TwitterSearchStatus> SearchGeolocation(string terms)
{
return Search(terms + "&geocode=51.50788772102843,-0.102996826171875,50mi");
}
This seems to generate the query with a & and % characters escaped which the service then does not convert meaning I get the error you must enter a query:
http://search.twitter.com/search.json?test%26geocode%3D51.50788772102843%2C-0.102996826171875%2C50mi
If I run this 开发者_如何学编程query with the characters in place it appears to work fine:
http://search.twitter.com/search.json?test&geocode=51.50788772102843,-0.102996826171875,50mi
Does anyone have any suggestions?
I was able to get TweetSharp's search to support the geocode parameter by following these steps:
- Download TweetSharp's latest source code
- Unpack the zip file to a directory (let's call this tsSource).
- Open the TweetSharp solution under the tsSource\src folder.
- In the VS solution explorer, find _TwitterService.Search.json in the .NET 40\TweetSharp\Generated folder.
- Insert the following at line 2 in the file:
TwitterSearchResult, "search", Search, string q, string geocode
- In solution explorer, right click on TwitterService.tt in the .NET 40\TweetSharp\Generated folder and select Run Custom Tool; Confirm the warning dialog.
- Build the TweetSharp project after code generation is complete.
The TweetSharp.dll assembly located in the tsSource\bin\lib\4.0 directory will contain the new method. You would call the new method like so:
service.Search("test", "51.50788772102843,-0.102996826171875,50mi");
Alternatively, you could use Twitterizer to support your search queries. Its search feature does not over-escape the querystring parameters, and it should be able to run side by side with TweetSharp. If you go this route, the search query code would look like this:
//reference Twitterizer2.dll
var tokens = new Twitterizer.OAuthTokens {
ConsumerKey = @"consumerKey",
ConsumerSecret = @"consumerSecret",
AccessToken = @"accessToken",
AccessTokenSecret = @"accessTokenSecret"
};
var response = Twitterizer.TwitterSearch.Search(tokens, "test",
new Twitterizer.SearchOptions {
GeoCode = "51.50788772102843,-0.102996826171875,50mi"
});
if (response.Result != Twitterizer.RequestResult.Success)
return;
foreach (var status in response.ResponseObject)
{
Console.WriteLine(status.Text);
}
精彩评论