Как управлять ограничением скорости с помощью twitter в node 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, затем семь хороших запросов и так далее, пока у меня не закончатся звонки. Как обычно решаются такие проблемы? Если есть простое решение, которое я вижу в коде, я ценю его, но в противном случае я хотел бы услышать какие-либо предложения. Спасибо!


person Aidan Collins    schedule 25.05.2015    source источник


Ответы (1)


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

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

person jfriend00    schedule 25.05.2015