@@ -24,11 +24,11 @@ def __init__(self, vk):
2424
2525 self .vk = vk
2626
27- def get_all (self , method , values = None , max_count = 200 , key = 'items' ,
27+ def get_all (self , method , max_count , values = None , key = 'items' ,
2828 limit_count = None ):
2929 """ Получить все элементы
30- Работает в методах, где в ответе есть items или users
31- За один запрос получает max_count * 25 элементов
30+ Работает в методах, где в ответе есть count и items или users
31+ За один запрос получает max_count * 25 элементов
3232
3333 :param method: метод
3434 :param values: параметры
@@ -48,15 +48,18 @@ def get_all(self, method, values=None, max_count=200, key='items',
4848 offset = 0
4949
5050 while True :
51- run_code = code_get_all_items % (max_count , offset ,
52- json .dumps (values ), key ,
51+ run_code = code_get_all_items % (max_count , offset , key ,
52+ json .dumps (values ),
5353 method , method )
5454
5555 response = self .vk .method ('execute' , {'code' : run_code })
5656
5757 items += response ['items' ]
5858
59- if response ['end' ] or (limit_count and len (items ) >= limit_count ):
59+ if response ['offset' ] >= response ['count' ]:
60+ break
61+
62+ if limit_count and len (items ) >= limit_count :
6063 break
6164
6265 offset = response ['offset' ]
@@ -65,7 +68,7 @@ def get_all(self, method, values=None, max_count=200, key='items',
6568
6669 def get_all_slow (self , method , values = None , max_count = 200 , key = 'items' ):
6770 """ Получить все элементы
68- Работает в методах, где в ответе есть count и items или users
71+ Работает в методах, где в ответе есть count и items или users
6972
7073 :param method: метод
7174 :param values: параметры
@@ -97,7 +100,7 @@ def get_all_slow(self, method, values=None, max_count=200, key='items'):
97100
98101# Полный код в файле vk_procedures
99102code_get_all_items = """
100- var z =%s,x =%s,y=%s,k= "%s",p={" count":z}+y, r=API.%s(p),c=r[" count"],j=r[k],o=0 ,
101- i=1;while(i<25&&o<c){o =i*z+x;p={"count":z," offset":o}+y;r= API.%s(p);j=j+r[k ];i
102- =i+1;}; return{" count":c," items" :j," offset":o,"end":o+z>=c };
103+ var m =%s,n =%s,b= "%s",v=n;var c={ count:m,offset:v}+%s;var r=API.%s(c),k=r. count,
104+ j=r[b], i=1;while(i<25&&v+m<=k){v =i*m+n;c. offset=v;j=j+ API.%s(c)[b ];i=i+1;}
105+ return { count:k, items:j,offset:v+m };
103106""" .replace ('\n ' , '' )
0 commit comments