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