TweetSharp 2.0 поиск и геокодирование - PullRequest
2 голосов
/ 27 апреля 2011

Я пытаюсь заставить 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

У кого-нибудь есть какие-либо предложения?

1 Ответ

3 голосов
/ 28 апреля 2011

Мне удалось получить запрос TweetSharp для поддержки параметра геокодирования, выполнив следующие действия:

  1. Загрузите последний исходный код TweetSharp
  2. Распакуйте zip-файлв каталог (назовем это tsSource ).
  3. Откройте решение TweetSharp в папке tsSource \ src .
  4. В обозревателе решений VSнайдите _TwitterService.Search.json в папке .NET 40 \ TweetSharp \ Generated .
  5. Вставьте в строку 2 в файле следующее: TwitterSearchResult, "search", Search, string q, string geocode
  6. В обозревателе решений щелкните правой кнопкой мыши TwitterService.tt в папке .NET 40 \ TweetSharp \ Generated и выберите Запустить пользовательский инструмент ;Подтвердите диалоговое окно с предупреждением.
  7. Создайте проект TweetSharp после завершения генерации кода.

Сборка TweetSharp.dll, расположенная в tsSource \ binКаталог \ lib \ 4.0 будет содержать новый метод.Вы бы назвали новый метод следующим образом:

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);
}
...