API и GET запрос requests.get() - где причина ошибки?

ДЕнь добрый. Изучаю API и пытаюсь разобраться в API запросах от VK

Создал приложение. Получил токет. Авторизация пользователя пройдены.

Теперь метод 'photos.getAlbums'

class Get_Basic_info(Basis):
    def __init__(self, user_id):
    self.user_id = user_id

    self.title_method = 'photos.getAlbums'
    self.album_ids  = '262360414, 258122480'
    self.version_api  = str
    self.access_token  = str

    self.params = {'user_ids' : self.user_id, 'access_token' : self.access_token, 'fields' : 'bdate', 'v' : \
self.version_api, 'album_ids' : self.album_ids, 'offset'  : 0 }
#     self.params отправлял и через с список кортежей.

    def get_info(self):
    super().__init__()
    url = self.protocol + self.domen + self.path_ + self.title_method
    
    r = re.compile(r"^[a-zA-Z0-9]+$", re.S | re.I | re.U)

    
    if r.search(str(self.user_id)):

        # print(self.path_)
        print('URA')
        informasion = requests.get(url, headers =  {}, params = self.params)
        informasion.status_code
        informasion.json()
    else:
        print('No no no no')

на выходе

Найден
self.version_api : 5.131
self.user_id : 163911024
URA
*Traceback (most recent call last):
    File "D:/django-sites/Netologe/coursework-vk/main.py", line 53, in <module>
    basic_info.get_info()
    File "D:\django-sites\Netologe\coursework-vk\get.py", line 71, in get_info
    informasion = requests.get(url, headers =  {}, params = self.params)
    File "C:\Users\tryd0\anaconda3\envs\learn_django\lib\site-packages\requests\api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
    File "C:\Users\tryd0\anaconda3\envs\learn_django\lib\site-packages\requests\api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
    File "C:\Users\tryd0\anaconda3\envs\learn_django\lib\site-packages\requests\sessions.py", line 515, in request
    prep = self.prepare_request(req)
    File "C:\Users\tryd0\anaconda3\envs\learn_django\lib\site-packages\requests\sessions.py", line 453, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
    File "C:\Users\tryd0\anaconda3\envs\learn_django\lib\site-packages\requests\models.py", line 318, in prepare
    self.prepare_url(url, params)
    File "C:\Users\tryd0\anaconda3\envs\learn_django\lib\site-packages\requests\models.py", line 436, in prepare_url
    enc_params = self._encode_params(params)
    File "C:\Users\tryd0\anaconda3\envs\learn_django\lib\site-packages\requests\models.py", line 102, in _encode_params
    for v in vs:
TypeError: 'type' object is not iterable*

Понятно, что вызывая

line 102, in _encode_params

получаем не соответствие типов. Создавая http запрос ручками в адресной строке браузера - получаю целевую информацию

Но как разобраться, как найти причину ошибки?


Редактор кода Pycharm (хоть это и не важно)


Ответы (1 шт):

Автор решения: Dmitry

Значит так. В методе __init__() у вас используется поле класса

self.version_api  = str

str это зарезервированное определение для типа данных строка. Воспроизведу вашу ошибку

>>> version_api = str
>>> for i in version_api:
...   print(i)
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'type' object is not iterable

Почему вы ее получаете? Вы передаете этот объект в словарь params, который должен быть представлен в виде набора строковых символов, а не в виде набора неких экземпляров класса.

Чтобы ее исправить, определите значение для данного поля, как нибудь вот так

    self.version_api  = "5.131"
    self.access_token  = "access_token_here_like_a_string"

PS совсем не в курсе как работает доступ к vk api

→ Ссылка