LINQ to Twitter: получите более 200 твитов
Я пытаюсь восстановить твиты пользователей за последние 2 месяца. Однако LINQ to Twitter ограничивает количество твитов, которые вы можете получить, до 200. Есть ли способ получить больше?
API Twitter позволяет осуществлять подкачку, например:
http://api.twitter.com/1/statuses/user_timeline.json?id=username8&count=200&page=2
Я не смог найти ничего подобного в библиотеке LINQ to Twitter.
Я попробовал следующее, Но это не работает :
var statusTweets = (from tweet in twitterCtx.Status
where tweet.Type == StatusType.User &&
tweet.Count == 200 &&
tweet.ScreenName == "username"
select tweet).Skip(200);
2 ответов:
Хорошо, теперь я чувствую себя немного глупо. Оказывается, есть параметр подкачки.
Решение
for (int i = 0; i < 5; i++) { var statusTweets = (from tweet in twitterCtx.Status where tweet.Type == StatusType.User && tweet.Count == 200 && tweet.ScreenName == "username" && tweet.Page == i select tweet) }
Вот полная функция, чтобы получить все твиты от пользователя
public static List<Status> searchUserTweet(string screenName, int maxPagination) { var twitterCtx = new TwitterContext(authorizer); List<Status> searchResults = new List<Status>(); int maxNumberToFind = 200; int pagination = 0; ulong lastId = 0; int count = 0; var tweets = (from tweet in twitterCtx.Status where tweet.Type == StatusType.User && tweet.ScreenName == screenName && tweet.Count == maxNumberToFind select tweet).ToList(); if (tweets.Count > 0) { lastId = ulong.Parse(tweets.Last().StatusID.ToString()); searchResults.AddRange(tweets); } do { var id = lastId - 1; tweets = (from tweet in twitterCtx.Status where tweet.Type == StatusType.User && tweet.ScreenName == screenName && tweet.Count == maxNumberToFind && tweet.MaxID == id select tweet).ToList(); searchResults.AddRange(tweets); lastId = tweets.Min(x => x.StatusID); pagination++; count = (pagination > maxPagination) ? 0 : tweets.Count; } while (count == maxNumberToFind); return searchResults; }
Comments