LinqToTwitter API 调用之外的 TwitterContext 限制
TwitterContext Limitations outside of LinqToTwitter API calls
跟进
虽然我没有将 LTT 库用于任何过去的授权(此时),但在使用
{参数字符串: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 对搜索对象的限制,它可能会产生不一致的结果。
提前致谢!
根据 Twitter 的 statuses/user_timeline documentation, the max value of count
is 200. However, that's a per query max. You can make multiple queries to retrieve up to 3200 tweets. Twitter has a nice explanation, in their Working with Timelines page,关于如何使用时间线检索那 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.");
}
}
您可以在 Querying the User Timeline. I also wrote a blog post, Working with Timelines with LINQ to Twitter 上的 LINQ to Twitter 文档中找到它,以解释 LINQ to Twitter 的分页方法。它适用于较早的(非异步)版本,但概念仍然相同。
跟进
虽然我没有将 LTT 库用于任何过去的授权(此时),但在使用
{参数字符串: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 对搜索对象的限制,它可能会产生不一致的结果。
提前致谢!
根据 Twitter 的 statuses/user_timeline documentation, the max value of count
is 200. However, that's a per query max. You can make multiple queries to retrieve up to 3200 tweets. Twitter has a nice explanation, in their Working with Timelines page,关于如何使用时间线检索那 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.");
}
}
您可以在 Querying the User Timeline. I also wrote a blog post, Working with Timelines with LINQ to Twitter 上的 LINQ to Twitter 文档中找到它,以解释 LINQ to Twitter 的分页方法。它适用于较早的(非异步)版本,但概念仍然相同。