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);
173   2  

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

    Ничего не найдено.