TweetSharp 2.0搜索和地理编码

时间:2011-04-27 13:43:58

标签: c# twitter tweetsharp

我正在尝试让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");
}

这似乎生成了一个带有&amp;的查询。和%字符转义,服务然后没有转换意味着我得到你必须输入查询的错误:

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

有人有任何建议吗?

1 个答案:

答案 0 :(得分:3)

我能够通过以下步骤获得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 ,然后选择运行自定义工具;确认警告对话框。
  7. 代码生成完成后构建 TweetSharp 项目。
  8. 位于 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);
    }