Skip to content

Commit 56a2172

Browse files
committed
vk_api.VkTools fix
1 parent 2c4f529 commit 56a2172

2 files changed

Lines changed: 33 additions & 34 deletions

File tree

vk_api/vk_tools.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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
99102
code_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', '')

vk_procedures

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,27 @@
11
==========
22
CODE: get items x25
3-
INPUT: max_count, start_offset, params:in_JSON, key, method, method
3+
INPUT: MAX_COUNT, START_OFFSET, KEY, MY_PARAMS:json, METHOD, METHOD
44
----------
5-
var max_count = %s;
6-
var start_offset = %s;
7-
var my_params = %s;
8-
var key = %s;
9-
10-
var params = {"count": max_count} + my_params;
11-
12-
var res = API.%s(params);
13-
var count = res["count"];
14-
var items = res[key];
15-
16-
var offset = 0;
17-
18-
var i = 1;
19-
while(i < 25 && offset < count) {
5+
var max_count = %s,
6+
start_offset = %s,
7+
key = "%s",
8+
offset = start_offset;
9+
10+
var params = {count: max_count, offset: offset} + %s;
11+
12+
var res = API.%s(params),
13+
count = res.count,
14+
items = res[key],
15+
i = 1;
16+
17+
while(i < 25 && offset + max_count <= count) {
2018
offset = i * max_count + start_offset;
21-
params = {"count": max_count, "offset": offset};
22-
params = params + my_params;
23-
24-
res = API.%s(params);
25-
items = items + res[key];
26-
19+
params.offset = offset;
20+
21+
items = items + API.%s(params)[key];
22+
2723
i = i + 1;
2824
}
29-
30-
return {"count": count, "items": items, "offset": offset, "end": offset >= count};
25+
26+
return {count: count, items: items, offset: offset + max_count};
3127
==========

0 commit comments

Comments
 (0)