Поиск и геокодирование TweetSharp 2.0

#c# #twitter #tweetsharp

#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   "amp;geocode=51.50788772102843,-0.102996826171875,50mi");
}
  

Похоже, это генерирует запрос с экранированными символами amp; и%, которые затем служба не преобразует, что означает, что я получаю сообщение об ошибке «Вы должны ввести запрос»:

http://search.twitter.com/search.json?test&geocode=51.50788772102843,-0.102996826171875,50mi

Если я выполняю этот запрос с символами на месте, кажется, что он работает нормально:

http://search.twitter.com/search.json?testamp;geocode=51.50788772102843,-0.102996826171875,50 миль

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

Комментарии:

1. Вам придется найти другой метод расширения или написать свой собственный, который принимает отдельный параметр geocode. В нынешнем виде TweetSharp не может отличить ваш параметр геокода от части поискового запроса.

Ответ №1:

Я смог заставить поиск TweetSharp поддерживать параметр geocode, выполнив следующие шаги:

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

The TweetSharp.dll сборка, расположенная в каталоге tsSourcebinlib 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);
}
  

Комментарии:

1. Отлично, спасибо за вашу помощь, ваше изменение кода сработало отлично. Я поиграю с Twitterizer.