Skip to content

Commit 82a9dc5

Browse files
committed
VkTools.get_all_items rename to VkTools.get_all
Add "key" param in VkTools.get_all
1 parent c40e6a1 commit 82a9dc5

2 files changed

Lines changed: 20 additions & 18 deletions

File tree

vk_api/vk_tools.py

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@ class VkTools(object):
66
def __init__(self, vk):
77
self.vk = vk
88

9-
def get_all_items(self, method, values=None, max_count=200):
9+
def get_all(self, method, values=None, max_count=200, key='items'):
1010
''' Получить все элементы
11-
Работает в методах, где в ответе есть count и items
11+
Работает в методах, где в ответе есть items или users
1212
За один запрос получает max_count * 25 элементов
1313
1414
:param method: метод
1515
:param values: параметры
1616
:param max_count: максимальное количество элементов,
1717
которое можно получить за один раз
18+
:param key: ключ элементов, которые нужно получить
1819
'''
1920

2021
if values:
@@ -26,13 +27,12 @@ def get_all_items(self, method, values=None, max_count=200):
2627
offset = 0
2728

2829
while True:
29-
run_code = code_get_all_items % (max_count, offset, json.dumps(values), method, method)
30+
run_code = code_get_all_items % (
31+
max_count, offset, json.dumps(values),
32+
key, method, method
33+
)
3034

31-
try:
32-
response = self.vk.method('execute', {'code': run_code})
33-
except Exception as e:
34-
print run_code
35-
print e
35+
response = self.vk.method('execute', {'code': run_code})
3636

3737
items += response['items']
3838

@@ -41,16 +41,17 @@ def get_all_items(self, method, values=None, max_count=200):
4141

4242
offset = response['offset']
4343

44-
return {'count': len(items), 'items': items}
44+
return {'count': len(items), key: items}
4545

46-
def get_all_items_slow(self, method, values=None, max_count=200):
46+
def get_all_slow(self, method, values=None, max_count=200, key='items'):
4747
''' Получить все элементы
48-
Работает в методах, где в ответе есть count и items
48+
Работает в методах, где в ответе есть count и items или users
4949
5050
:param method: метод
5151
:param values: параметры
5252
:param max_count: максимальное количество элементов,
5353
которое можно получить за один раз
54+
:param key: ключ элементов, которые нужно получить
5455
'''
5556

5657
if not values:
@@ -62,17 +63,17 @@ def get_all_items_slow(self, method, values=None, max_count=200):
6263

6364
response = self.vk.method(method, values)
6465
count = response['count']
65-
items = response['items']
66+
items = response[key]
6667

6768
for i in xrange(max_count, count + 1, max_count):
6869
values.update({
6970
'offset': i
7071
})
7172

7273
response = self.vk.method(method, values)
73-
items += response['items']
74+
items += response[key]
7475

75-
return {'count': len(items), 'items': items}
76+
return {'count': len(items), key: items}
7677

7778
# Полный код в файле vk_procedures
78-
code_get_all_items = 'var z=%s,x=%s,y=%s,p={"count":z}+y,r=API.%s(p),c=r["count"],j=r["items"],o=0,i=1;while(i<25&&o<c){o=i*z+x;p={"count":z,"offset":o}+y;r=API.%s(p);j=j+r["items"];i=i+1;};return{"count":c,"items":j,"offset":o,"end":o+z>=c};'
79+
code_get_all_items = '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,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=i+1;};return{"count":c,"items":j,"offset":o,"end":o+z>=c};'

vk_procedures

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
==========
22
CODE: get items x25
3-
INPUT: max_count, start_offset, params:in_JSON, method, method
3+
INPUT: max_count, start_offset, params:in_JSON, key, method, method
44
----------
55
var max_count = %s;
66
var start_offset = %s;
77
var my_params = %s;
8+
var key = %s;
89

910
var params = {"count": max_count} + my_params;
1011

1112
var res = API.%s(params);
1213
var count = res["count"];
13-
var items = res["items"];
14+
var items = res[key];
1415

1516
var offset = 0;
1617

@@ -21,7 +22,7 @@ while(i < 25 && offset < count) {
2122
params = params + my_params;
2223

2324
res = API.%s(params);
24-
items = items + res["items"];
25+
items = items + res[key];
2526

2627
i = i + 1;
2728
}

0 commit comments

Comments
 (0)