2

我试图让 TweetSharp 对来自某个区域内的推文进行搜索。不幸的是,这总是返回 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

有没有人有什么建议?

4

1 回答 1

3

通过执行以下步骤,我能够获得 TweetSharp 的搜索以支持 geocode 参数:

  1. 下载 TweetSharp最新源代码
  2. 将 zip 文件解压缩到一个目录(我们称之为tsSource)。
  3. 打开tsSource\src文件夹下的 TweetSharp 解决方案。
  4. 在 VS 解决方案资源管理器中,在.NET 40\TweetSharp\Generated文件夹中找到_TwitterService.Search.json 。
  5. 在文件的第 2 行插入以下内容:TwitterSearchResult, "search", Search, string q, string geocode
  6. 在解决方案资源管理器中,右键单击.NET 40\TweetSharp\Generated文件夹中的TwitterService.tt并选择Run Custom Tool;确认警告对话框。
  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);
}
于 2011-04-28T07:34:48.937 回答