Спасибо за внимание к моему посту, интересно услышать ваши мысли и предложения.
Brief:
Пишу алгоритм для извлечения информации через API ВКонтакте, самый базовый и банальный алгоритм извлечения данных о пользователях работает на ура:
import requests
r=requests.get('https://api.vk.com/method/users.get',params={'user_ids':7979370,'fields':'bdate'})
print(r.json())
Извлекать информацию 1го пользователя - не интересно, поэтому давайте пойдем дальше и попробуем сделать тоже самое с несколькими. Тут тоже проблем особо не возникло:
import requests
UserID = '3674735, 4196136, 5264403, 9690412'
r=requests.get('https://api.vk.com/method/users.get',params={'user_ids':UserID,'fields':'bdate'})
r.json()
Допустим у нас есть целая группа ВК с пользователями о которых мы хотим узнать инфу, начинаем извлекать из группы ID пользователей:
import requests
r=requests.get('https://api.vk.com/method/groups.getMembers',params={'group_id':83388025,'sort':'id_asc'})
print(r.json())
Выводит ID участником группы и результатом получается вот такой вот словарь (или это массив?):
{'response': {'count': 1346, 'users': [255248, 630877, 751755, 903660,....,n]}}
Все бы ничего, но в группе же может быть много пользователей, который нам не интересны: в моем случае я отбирал по локации (г. Харьков) и мне надо было отсеять всех лишних. Вот тут то и начались проблемы.
Проблемы:
1) Информация об участниках в виде списка и при попытке массово извлечь нужную информацию получается печаль:
import requests
r=requests.get('https://api.vk.com/method/groups.getMembers',params={'group_id':26270996,'sort':'id_asc'}) #вытянули нужную инфу
response=r.json() #Сложили её в масив
amount=response['response']['count']
print('Всего подписчиков',amount) #Вывели общее кол-во подписчиков
UserID=response['response']['users'] #вытащили отдельно список пользователей
r=requests.get('https://api.vk.com/method/users.get',params={'user_ids':i,'fields':'city'})
print(r.json()) """получили звездюлей по весьма понятным причинам: нельзя переметре user_ids давать значение строки"""
Немного подумава, было решино обыграть:
import requests
r=requests.get('https://api.vk.com/method/groups.getMembers',params={'group_id':26270996,'sort':'id_asc'})
response=r.json()
amount=response['response']['count']
print('Всего подписчиков',amount)
UserID=response['response']['users']
for i in UserID: """вместо того что бы подставлять всю строку будем через цикл подставлять каждое значение"""
r=requests.get('https://api.vk.com/method/users.get',params={'user_ids':i,'fields':'city'})
print(r.json())
{'response': [{'last_name': 'Секлер', 'first_name': 'Виолетта', 'hidden': 1, 'uid': 11355, 'city': 1}]}
[255248, 630877, 751755, 903660,....,n]
'255248, 630877, 751755, 903660,....,n'
Это бы значительно ускорило процесс и облегчило следующую задачу - отфильтровать лишнее.
2) Не зависимо от того, можно ли перевести в строку или придется мучатся с циклом, хочется отфильтровать лишнее:
import requests
r=requests.get('https://api.vk.com/method/groups.getMembers',params={'group_id':26270996,'sort':'id_asc'})
response=r.json()
amount=response['response']['count']
print('Всего подписчиков',amount)
UserID=response['response']['users']
for i in UserID:
r=requests.get('https://api.vk.com/method/users.get',params={'user_ids':i,'fields':'city'})
city=r.json() #при каждом цикле заносим назначаем переменной city словарь
if city['response'][0]['city']==1: #проверяем на соответствие нужной локации
print(city) #выводим значение
и все было бы ничего, НО: ВКонтакте в группах есть удаленный пользователи и словарь с информацией об этих пользователях не содержит параметр ‘city’, так что когда мы доходим до удаленно пользователя, то получаем вот такую фот лажу:
{'response': [{'deactivated': 'banned', 'last_name': 'Филимонова', 'first_name': 'Маргарита', 'uid': 179050}]}
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-246-79764f36f327> in <module>()
17 print(r.json())
18 city=r.json()
---> 19 if city['response'][0]['city']==1:
20 print(city)
KeyError: 'city'
в связи с чем вопрос: как можно пропустить ненужные значения? - Была идея поставить ещё одно условие, которое бы проверяло действующий ли аккаунт или нет, но пока не совсем понятно как это сделать, ведь если он не действующий, то его же надо пропускать, а как его пропустить?
Спасибо за внимание и буду рад слышать ваши мысли
