import time, vk_api, json, datetime
from datetime import date
from auth import token
V = '1.131' # Версия VK API
vk = vk_api.VkApi(token=token)
api = vk.get_api()
def search_user_by_age(user_info, group_id, age=(16, 18)):
"""
Вычислить год рождения пользователя через группу
:param user_info: информация о пользователе, которого проверяем
:param group_id: id любой группы у пользователя
:param age: диапазон предполагаемых возрастов
:return: точный год рождения, который указал пользователь
"""
info = api.users.search(q=user_info['first_name'] + ' ' + user_info['last_name'],
group_id=group_id,
age_from=age[0],
age_to=age[1],
count=1000)['items']
for user in info:
if user['id'] == user_info['id']:
if age[0] == age[1]:
return date.today().year - age[0]
return search_user_by_age(user_info=user_info,
group_id=group_id,
age=(age[0], (age[1] - age[0]) // 2 + age[0]))
if age[0] == age[1]:
return date.today().year - age[0] - 1
return search_user_by_age(user_info=user_info,
group_id=group_id,
age=(age[1], (age[1] - age[0]) * 2 + age[0]))
def get_all_members_from(group_id):
members = api.groups.getMembers(group_id=group_id)
count = members['count']
offset = 1000
members = members['items']
while offset < count:
members.extend(
api.groups.getMembers(group_id=group_id, count=1000, offset=offset)['items'])
offset += 1000
time.sleep(5) # иначе даёт ошибку, слишком много запросов.
members_from = []
for member in members:
members_from.append(member)
return members_from
def main():
members = get_all_members_from('группа')
array = []
for member in members:
array.append(search_user_by_age(member, 'группа'))
with open('result1.json', 'w', encoding="utf-8") as f:
for a in array:
json.dump(a, f, indent=4, ensure_ascii=False)
if __name__ == "__main__":
main()