-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGetDataVK.py
More file actions
158 lines (109 loc) · 4.5 KB
/
Copy pathGetDataVK.py
File metadata and controls
158 lines (109 loc) · 4.5 KB
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
import vk
from transliterate import translit
import time
class DataVKGroup:
def __init__(self, token, group_id, count):
self._need_fields_user = ['uid', 'first_name', 'last_name', 'interests', 'sex', 'city', 'country']
self._need_field_user_personal = ['political', 'people_main', 'life_main', 'smoking', 'alcohol']
self._session = vk.Session(token)
self._api = vk.API(self._session, lang='en')
self._users = []
self._export_users_from_group(group_id, count)
self._friends_for_users = self._get_friends()
self._cities = self._get_cities()
self._countries = self._get_countries()
def _export_users_from_group(self, group_id, count):
group_members = self._api.groups.getMembers(group_id=group_id, count=count)
self._users = self._api.users.get(user_ids=group_members['users'],
fields='city,country,sex,interests,personal')
self._users = [user for user in self._users if 'deactivated' not in user]
self._translit_user_interests()
self._fill_none_field()
def _check_user(self, user):
if 'city' not in user or 'country' not in user:
return False
if not user['city'] or not user['country']:
return False
if 'university' not in user or 'university_name' not in user or user['university_name'] == '':
return False
return True
def _get_user_data(self, user):
return {
'uid': user['uid'],
'country': self._api.database.getCountriesById(country_ids=user['country']),
'city': self._api.database.getCitiesById(city_ids=user['city']),
'university': user['university_name']
}
def _get_cities(self):
if len(self._users) == 0:
print("Users aren't exist")
return
cities = set()
for user in self._users:
if 'city' in user:
cities.add(user['city'])
cities_data = self._api.database.getCitiesById(city_ids=cities)
cities_list = []
for cityData in cities_data:
cities_list.append({'id': cityData['cid'], 'name': cityData['name']})
print('Got cities')
return cities_list
def _get_countries(self):
if len(self._users) == 0:
print("Users aren't exist")
return
countries = set()
for user in self._users:
if 'country' in user:
countries.add(user['country'])
countries_data = self._api.database.getCountriesById(country_ids=countries)
countries_list = []
for countryData in countries_data:
countries_list.append({'id': countryData['cid'], 'name': countryData['name']})
print('Got countries')
return countries_list
def _translit_user_interests(self):
for user in self._users:
if 'interests' in user:
user['interests'] = translit(user['interests'], 'ru', reversed=True)
def _get_friends(self):
if len(self._users) == 0:
print("Users aren't exist")
return
friends_for_users = []
for user in self._users:
print(user)
friends_for_users.append({'user': user['uid'], 'friends': self._api.friends.get(user_id=user['uid'])})
time.sleep(0.4)
return friends_for_users
def _fill_none_field(self):
fill_users = []
for user in self._users:
data = {}
for field in self._need_fields_user:
if field not in user:
data[field] = 'null'
else:
if str(user[field]) == '':
data[field] = 'null'
else:
data[field] = user[field]
if 'personal' in user:
for field in self._need_field_user_personal:
if field not in user['personal']:
data[field] = 0
else:
data[field] = user['personal'][field]
else:
for field in self._need_field_user_personal:
data[field] = 0
fill_users.append(data)
self._users = fill_users
def get_users(self):
return self._users
def get_friends(self):
return self._friends_for_users
def get_cities(self):
return self._cities
def get_countries(self):
return self._countries