Ограничения 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 к пейджингу. Это для более ранней (не асинхронной) версии, но концепции все те же.