2011-04-27 46 views
2

我试图让TweetSharp在特定区域内对推文执行搜索。不幸的是,这总是返回0结果。TweetSharp 2.0搜索和地理编码

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"); 
} 

这似乎产生了&和%转义字符该服务,则不会转换意味着我得到的错误,你必须输入一个查询的查询:

http://search.twitter.com/search.json?test%26geocode%3D51.50788772102843%2C-0.102996826171875%2C50mi

如果我运行此查询与字符就位它似乎工作正常:

http://search.twitter.com/search.json?test&geocode=51.50788772102843,-0.102996826171875,50mi

有没有人有任何建议?

+0

你必须找到另一种扩展方法,或写自己,接受一个独立的地理编码参数。由于TweetSharp无法将您的地理编码参数与部分搜索字词区分开来。 – Rup 2011-04-27 13:56:25

回答

3

我能得到TweetSharp的搜索通过以下步骤来支持地理编码参数:

  1. 下载TweetSharp的latest source code
  2. 解压压缩文件到一个目录(我们称之为tsSource)。
  3. 打开tsSource \ src文件夹下的TweetSharp解决方案。
  4. 在VS解决方案资源管理器中,找到_TwitterService.Search.json,.NET 40 \ TweetSharp \ Generated文件夹。
  5. 插入第2行文件中的以下内容:TwitterSearchResult, "search", Search, string q, string geocode
  6. 在Solution Explorer中,右击TwitterService.tt.NET 40 \ TweetSharp \生成文件夹并选择运行自定义工具;确认警告对话框。
  7. 生成代码生成完成后的TweetSharp项目。

位于tsSource \ bin \ lib \ 4.0目录中的TweetSharp.dll程序集将包含新方法。你会打电话像这样的新方法:

service.Search("test", "51.50788772102843,-0.102996826171875,50mi"); 

或者,你可以使用Twitterizer来支持你的搜索查询。它的搜索功能不会超出查询字符串参数,它应该能够与TweetSharp并排运行。如果你走这条路线,搜索查询代码应该是这样的:

//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); 
} 
+0

非常感谢您的帮助,您的代码更改很好地工作。我会和Twitterizer一起玩。 – 2011-04-28 08:54:22