@@ -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};'
0 commit comments