【问题标题】:TweetSharp 2.0 search and GeocodeTweetSharp 2.0 搜索和地理编码
【发布时间】:2011-04-27 13:43:57
【问题描述】:

我正在尝试让 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

有人有什么建议吗?

【问题讨论】:

  • 你必须找到另一种扩展方法,或者编写你自己的方法,它接受一个单独的地理编码参数。就目前而言,TweetSharp 无法将您的地理编码参数与部分搜索词区分开来。

标签: c# twitter tweetsharp


【解决方案1】:

按照以下步骤,我能够让 TweetSharp 的搜索支持地理编码参数:

  1. 下载 TweetSharp 的latest source code
  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);
}

【讨论】:

  • 非常感谢您的帮助,您的代码更改工作得很好。我会玩 Twitterizer。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多