2011-04-27 41 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