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の検索を取得してジオコードパラメーターをサポートすることができました。

  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を右クリックし、[カスタムツールの実行]を選択します。警告ダイアログを確認します。
  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 に答える