-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Flood control #19
Comments
Сейчас за 5 минут накостылил такое решение: вставлять мусорные запросы между нужными. Выглядит ущербно и работает гораздо медленнее (только в 1 потоке). Если есть идеи, буду рад. diff --git a/vkms/actions.py b/vkms/actions.py
index 61b5f81..c5d6166 100644
--- a/vkms/actions.py
+++ b/vkms/actions.py
@@ -1,7 +1,9 @@
import logging
from time import sleep
+from random import choice
import vk
+from vk.api import APIRequest
from sqlalchemy import func
from vk.exceptions import VkAPIError
@@ -30,10 +32,27 @@ def dump(out_dir, include, exclude, token, nthreads, max_msgs, append, export_js
"""
# Получаем объект для работы с VK API
class API(vk.API):
+ def send(self, request, *args, flood=False, **kwargs):
+ if not flood:
+ methods = [
+ 'users.get',
+ 'wall.get',
+ 'docs.get',
+ 'friends.get',
+ 'pages.get',
+ 'account.getInfo'
+ ]
+ self.send(APIRequest(choice(methods), request.method_params), flood=True)
+
+ return super().send(request, *args, **kwargs)
+
def on_api_error_6(self, request):
sleep(1)
return self.send(request)
+ def on_api_error_100(self, request):
+ return
+
def get_captcha_key(self, request):
return input(f'Captcha needed ({request.api_error.captcha_img}): ') |
Выяснил экспериментально, что ошибка Flood Control привязывается к определнному приложению, т.е. чем больше токенов от разных приложений используется, тем меньше шанс ее возникновения. Пробовал тестить с 8 разными токенами в одном потоке, работает несколько циклов и все равно выдает ошибку. Нужно как-нибудь нафаззить дополнительных |
Почему-то я все еще могу выгружать сообщения через execute (без ошиюок в 4 потока). Если мне не изменяет память, использование методов API через execute тоже подсчитывалось. Как будет время попробую переписать дамп на API.execute |
vkms под флуд контроль попадает потому-что для юзеров есть лимит в 3 rps class API(vk.API):
def send(self, *args, **kwargs):
if hasattr(self, "_last_req"):
elapsed = time() - self._last_req
delta = 0.34 - elapsed
if delta > 0: sleep(delta)
self._last_req = time()
return super().send(*args, **kwargs) полноценный пул реквест делать лень xdddd |
vkms -vv -i xxxxxxxxx dump -a -t 1 --export-json
как бороться? пробовал выжидать время - даже спустя несколько часов с первого же раза Flood control
The text was updated successfully, but these errors were encountered: