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 шт):
Значит так. В методе __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