TwitterContext LinqToTwitter API调用之外的限制

时间:2017-09-06 21:12:18

标签: twitter linq-to-twitter

跟进Extract BearerToken from LinqToTwitter IAuthorizer

虽然我没有将LTT库用于过去授权的任何事情(此时),但在使用

直接调用/ statuses / user_timeline API时,我似乎仍限于200条推文

{参数字符串:user_id = {0}&amp; screen_name = {1} &amp; count = 3200 &amp; exclude_replies = true&amp; include_rts = false&amp; trim_user = false&amp; contributor_details = false} < / p>

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

这是TwitterContext授权的限制吗?如果是这样,如何在不使用库调用的情况下更改该限制?

即。我使用

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

我没有使用该库,因为它正在利用Twitter搜索对象,这可能会因Twitter对搜索对象的限制而产生不一致的结果。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

根据Twitter的statuses/user_timeline documentationcount的最大值为200.但是,这是每个查询的最大值。您可以进行多次查询以检索最多3200条推文。 Twitter在他们的Working with Timelines page中有一个很好的解释,说明如何使用时间轴来检索那些3200条推文。我意识到你不是在用LINQ来推特,但是为了其他任何能够找到这个答案的人的利益,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.");
    }
}

您可以在Querying the User Timeline上的LINQ to Twitter文档中找到它。我还写了一篇博文Working with Timelines with LINQ to Twitter来解释LINQ到Twitter的分页方法。它适用于早期(非异步)版本,但概念仍然相同。