Перестала работать публикация в ВК через python API

Что-то сломалось около 1-2 марта в моей функции python, которая публикует сообщения в группу ВК. Я сделал это следующим образом:

session = vk.Session(access_token=page.access_token)
api = vk.API(session)
post_response = api.wall.post(message=message, owner_id='-' + page.page_id)

но теперь эта последняя команда post() возвращает следующее:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/admin/python/lib/python2.7/site-packages/vk/api.py", line 173, in __call__
    return self._api._session.make_request(self)
  File "/home/admin/python/lib/python2.7/site-packages/vk/api.py", line 67, in make_request
    response = self.send_api_request(method_request, captcha_response=captcha_response)
  File "/home/admin/python/lib/python2.7/site-packages/vk/api.py", line 115, in send_api_request
    response = self.requests_session.post(url, method_args, timeout=timeout)
  File "/home/admin/python/lib/python2.7/site-packages/requests/sessions.py", line 518, in post
    """
  File "/home/admin/python/lib/python2.7/site-packages/vk/utils.py", line 78, in request
    response = super(LoggingSession, self).request(method, url, **kwargs)
  File "/home/admin/python/lib/python2.7/site-packages/requests/sessions.py", line 475, in request
    the server's TLS certificate, or a string, in which case it must be a path
  File "/home/admin/python/lib/python2.7/site-packages/requests/sessions.py", line 585, in send
    """
  File "/home/admin/python/lib/python2.7/site-packages/requests/adapters.py", line 477, in send
    r,
SSLError: [Errno 2] No such file or directory

И я получаю точно такую ​​же ошибку, если хочу получить сервер загрузки:

>>> upload_server = api.photos.getWallUploadServer(group_id=page.page_id)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/admin/python/lib/python2.7/site-packages/vk/api.py", line 173, in __call__
    return self._api._session.make_request(self)
  File "/home/admin/python/lib/python2.7/site-packages/vk/api.py", line 67, in make_request
    response = self.send_api_request(method_request, captcha_response=captcha_response)
  File "/home/admin/python/lib/python2.7/site-packages/vk/api.py", line 115, in send_api_request
    response = self.requests_session.post(url, method_args, timeout=timeout)
  File "/home/admin/python/lib/python2.7/site-packages/requests/sessions.py", line 518, in post
    """
  File "/home/admin/python/lib/python2.7/site-packages/vk/utils.py", line 78, in request
    response = super(LoggingSession, self).request(method, url, **kwargs)
  File "/home/admin/python/lib/python2.7/site-packages/requests/sessions.py", line 475, in request
    the server's TLS certificate, or a string, in which case it must be a path
  File "/home/admin/python/lib/python2.7/site-packages/requests/sessions.py", line 585, in send
    """
  File "/home/admin/python/lib/python2.7/site-packages/requests/adapters.py", line 477, in send
    r,
SSLError: [Errno 2] No such file or directory

Я использую последнюю версию пакета vk (https://pypi.python.org/pypi/vk , но ему уже 1 год).

Единственное изменение в VK API, которое я нашел - https://vk.com/dev/version_update - говорит, что теперь я должен указать версию API; но когда я заменяю api = vk.API(session) на api = vk.API(session, v='5.54'), ничего не меняется.

Может у кого есть идеи как это исправить? Благодарю вас!


person Alexey Chernov    schedule 05.03.2018    source источник
comment
проблема не в vk а в запросах, попробуй сделать pip install -U requests[security] и посмотри что будет после этого   -  person gold_cy    schedule 05.03.2018
comment
@aws_apprentice Отлично, сработало! Благодарю вас!   -  person Alexey Chernov    schedule 05.03.2018


Ответы (1)


Как написал @aws_apprentice, pip install -U requests[security] помогло. Потом мне еще предстояло исправить некоторые проблемы с API:

  1. замените api = vk.API(session) на api = vk.API(session, v="5.54") (вы можете использовать последнюю версию от https://vk.com/dev/versions)
  2. В результате api.photos.getWallUploadServer теперь ключ album_id вместо aid
  3. api.photos.saveWallPhoto(...)[0]['id'] теперь целое число, а не строка

Этих изменений мне было достаточно. Похоже, он снова работает!

person Alexey Chernov    schedule 05.03.2018