Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 16, 2020 08:54:35

AndrewP
Зарегистрирован: 2020-04-16
Сообщения: 7
Репутация: +  1  -
Профиль   Отправить e-mail  

Задача по API VK

Всем хорошего дня! Я совсем новичок, второй день туплю над кодом, помогите, люди добрые.
Задача:
Необходимо написать клиент к API VK , который будет считать распределение возрастов друзей для указанного пользователя. То есть на вход подается username или user_id пользователя, на выходе получаем список пар (<возраст>, <количество друзей с таким возрастом>), отсортированный по убыванию по второму ключу (количество друзей) и по возрастанию по первому ключу (возраст). Например:

 [(26, 8), (21, 6), (22, 6), (40, 2), (19, 1), (20, 1)]

Сделать нужно обязательно по этому шаблону (на входе в ф-ю юзер айди):
 def calc_age(user_id):
    pass
if __name__ == '__main__':
    res = calc_age('reigning')
    print(res)
Удалось написать только код для обращения к API:
 def calc_age(user_id):
api_url = 'https://api.vk.com/method/users.get?v=5.71&access_token=17da724517da724517da72458517b8abce117da17da72454d235c274f1a2be5f45ee711&user_ids='
user_name = input("Enter user ID or nickname: ")
r = requests.get(api_url + user_name)
user_id = r.text.split(':')[2]
 
api_url = 'https://api.vk.com/method/friends.get?v=5.71&access_token=17da724517da724517da72458517b8abce117da17da72454d235c274f1a2be5f45ee711&user_id='
r = requests.get(api_url + user_id[:-13] + '&fields=bdate')
data = r.json()
friend_list = data ['response']['items']
birthday = friend_list['bdate'].split('.')
Выдает ошибку: File “DPython/Python_SF/Python_SF/InstallTest/FirstLesson.py”, line 18, in <module>
birthday = friend_list.split('.')
TypeError: list indices must be integers or slices, not str

Все, ступор. Не понимаю, как вытащить bdate из list

Офлайн

#2 Апрель 16, 2020 12:41:35

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Задача по API VK

friend_list = data
birthday = friend_list.split('.')
Судя по всему (в том числе по ошибке), в friend_list - это список друзей. Ты почему-то из него сразу пытаешься взять поле ‘bdate’, хотя оно , наверное, находится в элементах этого списка. Так что проходи циклом по всем этим элементам списка и вытаскивай эту ‘bdate’ оттуда:
 friend_list = data ['response']['items']
dates = []
for item in friend_list:
    birthday = item['bdate'].split('.')
    dates.append(birthday)



Офлайн

#3 Апрель 16, 2020 15:30:07

AndrewP
Зарегистрирован: 2020-04-16
Сообщения: 7
Репутация: +  1  -
Профиль   Отправить e-mail  

Задача по API VK

Striver
Судя по всему (в том числе по ошибке), в friend_list - это список друзей. Ты почему-то из него сразу пытаешься взять поле ‘bdate’, хотя оно , наверное, находится в элементах этого списка. Так что проходи циклом по всем этим элементам списка и вытаскивай эту ‘bdate’ оттуда:

Спасибо за ответ. Выдает такую ошибку:
 File "D:/Python/Python_SF/Python_SF/InstallTest/FirstLesson.py", line 20, in <module>
birthday = item ['bdate'] .split('.')
KeyError: 'bdate'

friend_list выглядит так:
  
[{'id': 10, 'first_name': 'Alexander', 'last_name': 'Kuznetsov', 'track_code': '12992d65Aav5qQ17YIBZr6tVdEOSu1FarPP8P2MUCFv0tjZ5j4ZswKKaPX40twH62eehjnK-'}, {'id': 135, 'first_name'
итд

Отредактировано AndrewP (Апрель 16, 2020 15:31:58)

Офлайн

#4 Апрель 16, 2020 17:18:39

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Задача по API VK

friend_list выглядит так:


[{'id': 10, ‘first_name’: ‘Alexander’, ‘last_name’: ‘Kuznetsov’, ‘track_code’: ‘12992d65Aav5qQ17YIBZr6tVdEOSu1FarPP8P2MUCFv0tjZ5j4ZswKKaPX40twH62eehjnK-’}, {'id': 135, ‘first_name’

итд
Ну, тут никакой bdate и нету.
На самом деле посмотри, может, это поле есть у части элементов списка, тогда строки
 birthday = item['bdate'].split('.')
dates.append(birthday)
надо поменять на
 if 'bdate' in item:
    birthday = item['bdate'].split('.')
    dates.append(birthday)
Ну а если их нигде нет, то внимательнее читай API вконтакта, что-то не так при запросе делаешь.



Отредактировано Striver (Апрель 16, 2020 17:19:24)

Офлайн

#5 Апрель 22, 2020 07:55:07

AndrewP
Зарегистрирован: 2020-04-16
Сообщения: 7
Репутация: +  1  -
Профиль   Отправить e-mail  

Задача по API VK

Striver
Получилось, большое спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version