Как управлять ограничением скорости с твиттером в узле js?

Я работал с твиттером API. Я пытаюсь записать некоторые твиты из группы учетных записей. Есть 250 учетных записей, которые я отслеживаю. Это, конечно, превышает ограничение скорости. Код для сбора данных ниже:

docs.forEach(function (doc) {
    client.get('statuses/user_timeline', {
        screen_name: doc.screen_name,
        limit: 20
    }, function (error, tweets, response) {
        if (error) {
            console.log(error);
            if (error.code == 88) {
                console.log(error);
            }
        } else {
            tweets.sort(function (a, b) {
                return b.retweet_count - a.retweet_count
            });
            var top = tweets.slice(0, 3);
            col_tweets.insert(top, {
                w: 1
            }, function (err, result) {
                if (error) {
                    console.log("error while logging");
                } else {
                    console.log("logged: " + doc.screen_name);
                }
            });
        }
    });

});

Как вы можете видеть, программа регистрирует некоторые твиты с этих учетных записей. Я сталкиваюсь с ошибками ограничения скорости. Я хотел бы найти решение для времени запросов, чтобы я не столкнулся с этими ошибками. На мой взгляд, есть две проблемы: а) у меня в конце концов закончились запросы (очевидная проблема) б) я считаю, что скорость, с которой я делаю запросы, слишком высока, что приводит к проблеме превышения спорадического ограничения скорости, т.е. у меня будет 10 успешных запросы и затем код: 88 ошибок, затем семь хороших и так далее, пока у меня не закончатся звонки. Как обычно решаются проблемы такого рода? Если есть простое решение, которое я вижу в коде, я ценю это, но в противном случае я хотел бы услышать любые предложения. Спасибо!

1 ответ

Решение

Существует несколько различных способов решения этой проблемы, но я бы предложил создать рабочую очередь для данных для всех запросов, которые вы хотите сделать (например, массив объектов данных).

Затем вы можете запускать элементы из конца очереди по таймеру, так что вы никогда не будете делать запросы чаще, чем один раз каждые N секунд, и, возможно, у вас никогда не будет более M запросов одновременно. Если ограничения скорости не публикуются, то вам, возможно, придется поэкспериментировать, чтобы увидеть, с какой скоростью вам разрешено последовательно обрабатывать запросы (путем настройки времени таймера) без каких-либо ограничений.

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