Асинхронный скрипт, основанный на промисах, который грузит картинки с локальной файловой директории в альбомы указанной группы ВКонтакте при помощи токенов редакторов группы.
- Скачать и распаковать
npm i
/yarn install
Перед использованием примеров крайне рекомендуется ознакомится с особенностями работы.
Пример запускного файла: тут
Пример входного файла описаний: тут
Пример лог-файла: тут
У каждого аккаунта есть лимит на количество загружаемых картинок, поэтому не перезапускайте скрипт с одним и тем же токеном. Есть большой шанс нарваться на VK API flood control. Автор поленился найти оптимальную задержку для загрузки более 5000 картинок одним токеном непрерывно, поэтому скрипт не запустится если будет обнаружена попытка загрузить слишком много картинок при малом количестве токенов.
Не забывайте:
- Лимит одного альбома ВК - 10000;
- Лимит картинок в день для одного айпи - 20000. Дальше - ошибка API №1 (unknown);
- Если лишить аккаунт редакторских прав, картинки, загруженные им, станут отображаться от его имени, а не от имени группы.
При создании этого скрипта удалось выяснить примерную информацию о том как работают ограничения API ВКонтакте для выгрузки картинок в альбомы групп. Добавление картинок в альбомы через API состоит из двух этапов:
- Загрузка картинки на сервер ВКонтакте;
- Сохранение картинки в альбоме отдельным запросом.
Главное ограничение заключается в частоте запросов на сохранение картинок. Чем меньше частота, тем быстрее токен получит блокировку (Ошибка API №9 - flood control), которая длится неопределённый срок.
Я получал блокировки длительностью от нескольких минут до 8 часов. У вас этот срок может быть другим.
В этом скрипте картинки сохраняются по 25 штук за раз через vk.api.execute
. 1 запрос - 25 сохранений.
К примеру, вам нужно загрузить 2000 картинок. Минимальная задержка между запросами для 1 токена, при которой возможно загрузить 2000 картинок без блокировки, - 15 секунд. После этих 2000 за 15 секунд токен будет сразу же забанен и через него не получится больше ничего загрузить в ближайшие часы. Если повысить задержку до 30 секунд, токен всё так же будет забанен спустя 2000 картинок. При снижении задержки до 10, токен банится после 100 картинок. При повышении до 65 - 5000 картинок.
То есть, существуют определённые контрольные точки задержек, после которых резко повышается количество загружаемых картинок до блокировки. Я составил таблицу задержек, которая сама применяется в скрипте. Задержка будет выставлена в зависимости от того сколько картинок вы собираетесь загрузить. Пример условия - под таблицей.
Сейчас таблица выглядит так:
Задержка, секунд | Картинок до бана | Примерное затраченное время |
---|---|---|
15 | 2000 | 20 минут |
45 | 2975 | 1 час 30 минут |
65 | 5000 | 3 часа 40 минут |
Пример: если вы грузите от 2001 до 5000 картинок, задержка будет равна 65 секунд. От 1 до 2000 картинок - 15 секунд.
Таблица не просчитана для загрузки более 5000 картинок одним токеном. Скрипт не запустится чтобы избежать
VK API flood control. Это поведение можно изменить задав задержку в options.customDelays.constant
Важно: если вы запустили загрузку, допустим, 2000 картинок, и прервали её на полпути, а затем запустили загрузку ещё 2000, токен уже не сможет загрузить их если сделать перезапуск не подождав какое-то неизвестное время. Скрипт не знает что токен использовался в прошлом запуске и попробует загрузить 2000 картинок с задержкой 15 секунд, но её уже будет недостаточно, и токен будет забанен.
- Консольный вывод: предположительное время окончания загрузки;
- Улучшить обработку ошибок, обрабатывать больше;
- Другие варианты логина в ВК;
- Прикрутить прокси чтобы обходить ограничение в 20000 картинок для одного айпи в день;