-
Notifications
You must be signed in to change notification settings - Fork 0
/
vk.py
86 lines (64 loc) · 3.95 KB
/
vk.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import time
import requests
import json
with open('./vk_token.txt') as f:
token = f.read()
USER_ID = input("Введите имя или ID пользователя: ")
params = {'access_token': token, 'v': '5.67', 'fields': 'first_name,last_name', 'user_id': USER_ID, 'extended': 1}
def account_friends(token):
r_profile = requests.get('https://api.vk.com/method/users.get', params).json()
r_friends = requests.get('https://api.vk.com/method/friends.get', params).json()
acc_friends = [{i['last_name']: i['first_name']} for i in r_friends['response']['items']]
friends_id = [i['id'] for i in r_friends['response']['items']]
print('Список друзей пользователя {} {}'.format(r_profile['response'][0]['first_name'],
r_profile['response'][0]['last_name']),
'\nВсего {} человека - {}'.format(r_friends['response']['count'], acc_friends))
return friends_id
def account_groups(token):
r_groups = requests.get('https://api.vk.com/method/groups.get', params).json()
groups_id = [i['id'] for i in r_groups['response']['items']]
print('Группы, в которых состоит наш пользователь: {}.\nВсего групп - {}.\n'.format(
'; '.join([i['name'] for i in r_groups['response']['items']]), r_groups['response']['count']))
return groups_id
def acc_individual_groups(token):
friends_id = account_friends(token)
groups_id = account_groups(token)
print('\nОжидайте, данные обрабатываются ...\nНомер шага соответсвует номеру друга и их не может быть более чем {}'.format(
len(friends_id)))
counter = 0
for j, i in enumerate(friends_id, start=1):
try:
params = {'access_token': token, 'v': '5.67', 'fields': 'first_name,last_name', 'user_id': i, 'extended': 1}
r_groups = requests.get('https://api.vk.com/method/groups.get', params).json()
time.sleep(0.4)
friend_groups_id = [i['id'] for i in r_groups['response']['items']]
groups_id = set(groups_id) - set(friend_groups_id)
if counter != len(groups_id):
counter = len(groups_id)
print(f'Шаг {j}. Колво индивидуальных групп - {counter}')
print(f'Осталось обработать {len(friends_id)-j}')
if len(groups_id) == 0:
break
except KeyError:
continue
print('----------------------------------')
return groups_id
def output_data(token):
counter = acc_individual_groups(token)
if len(counter) > 0:
print('Данные успешно обработаны\n', 'Колво индивидуальных групп - {}шт.\n'.format(len(counter)))
else:
print('Данные успешно обработаны\n Индивидуальных групп НЕТ!')
# тянем информацию об индивидуальных группах аккаунта
individ_groups = requests.get('https://api.vk.com/method/groups.getById',
{'group_ids': ','.join(list(map(str, counter))), 'fields': 'members_count'}).json()
for i in individ_groups['response']: # Вот тут у меня ерунда. 2-мя способами сделал и ни один мне не нравится!!
del (i['screen_name'], i['is_closed'], i["photo"], i["photo_medium"], i["photo_big"], i["type"])
# list.append({'gid': i['gid'], 'name':i['name'],'members_count': i['members_count'] })
with open('individual_groups.json', 'w', encoding='utf-8') as f:
json.dump(individ_groups['response'], f, indent=2, ensure_ascii=False)
print('Индивидуальные группы записаны в файл {}'.format(f.name))
def main():
output_data(token)
if __name__ == '__main__':
main()