Ограничения TwitterContext вне вызовов API LinqToTwitter

Продолжайте извлекать BearerToken из LinqToTwitter IAuthorizer

Хотя я не использую библиотеку LTT для чего-либо, прошедшего авторизацию (на данный момент), я все еще, кажется, ограничен 200 твитами при обращении напрямую к /statuses/user_timeline API с

{строка параметров: user_id = {0} & screen_name = {1}& count = 3200& exclude_replies = true & include_rts = false & trim_user = false & contributor_details = false}

А также

webClient.Headers.Add(String.Format("Authorization:  Bearer {0}", BearerToken));

Это предел TwitterContext Авторизация? Если да, как я могу изменить этот лимит без использования библиотечных вызовов?

т.е. я не пользуюсь

statusResponse = (from tweet in twitterCtx.Status ...)

Я не использую библиотеку, потому что она использует поисковый объект Twitter, который может давать противоречивые результаты в соответствии с ограничениями Twitter для поискового объекта.

Заранее спасибо!

1 ответ

Решение

В соответствии с документацией Твиттера statuses / user_timeline, максимальное значение count равно 200. Тем не менее, это на запрос макс. Вы можете сделать несколько запросов, чтобы получить до 3200 твитов. На странице " Работа с временными шкалами" в Twitter есть хорошее объяснение, как работать с временными шкалами для получения этих 3200 твитов. Я понимаю, что вы не запрашиваете LINQ to Twitter, но в интересах любого, кто найдет этот ответ, вот как LINQ to Twitter делает это:

static async Task RunUserTimelineQueryAsync(TwitterContext twitterCtx)
{
    //List<Status> tweets =
    //    await
    //    (from tweet in twitterCtx.Status
    //     where tweet.Type == StatusType.User &&
    //           tweet.ScreenName == "JoeMayo"
    //     select tweet)
    //    .ToListAsync();

    const int MaxTweetsToReturn = 200;
    const int MaxTotalResults = 100;

    // oldest id you already have for this search term
    ulong sinceID = 1;

    // used after the first query to track current session
    ulong maxID;

    var combinedSearchResults = new List<Status>();

    List<Status> tweets =
        await
        (from tweet in twitterCtx.Status
         where tweet.Type == StatusType.User &&
               tweet.ScreenName == "JoeMayo" &&
               tweet.Count == MaxTweetsToReturn &&
               tweet.SinceID == sinceID &&
               tweet.TweetMode == TweetMode.Extended
         select tweet)
        .ToListAsync();

    if (tweets != null)
    {
        combinedSearchResults.AddRange(tweets);
        ulong previousMaxID = ulong.MaxValue;
        do
        {
            // one less than the newest id you've just queried
            maxID = tweets.Min(status => status.StatusID) - 1;

            Debug.Assert(maxID < previousMaxID);
            previousMaxID = maxID;

            tweets =
                await
                (from tweet in twitterCtx.Status
                 where tweet.Type == StatusType.User &&
                       tweet.ScreenName == "JoeMayo" &&
                       tweet.Count == MaxTweetsToReturn &&
                       tweet.MaxID == maxID &&
                       tweet.SinceID == sinceID &&
                       tweet.TweetMode == TweetMode.Extended
                 select tweet)
                .ToListAsync();

            combinedSearchResults.AddRange(tweets);

        } while (tweets.Any() && combinedSearchResults.Count < MaxTotalResults);

        PrintTweetsResults(tweets);
    }
    else
    {
        Console.WriteLine("No entries found.");
    }
}

которую вы можете найти в документации LINQ to Twitter по запросу пользовательской временной шкалы. Я также написал пост в блоге " Работа с временными шкалами с LINQ to Twitter", чтобы объяснить подход LINQ to Twitter к пейджингу. Это для более ранней (не асинхронной) версии, но концепции все те же.

Другие вопросы по тегам