Closed setazer closed 6 years ago
@setazer api версия передается параметром api_version
, т.е api = vk_requests.create_api(service_token=VK_TOKEN, api_version="5.73")
должно работать как ожидается.
В целом интерфейс vk и vk-requests разный, чтобы не допускать ошибок используй IDE которая позволяет делать инспекцию вызываемых методов.
Да, в таком случае всё работает, с версией апи сам недоглядел, но остаётся сбивающее с толку название параметра service_token, потому что в ВК "сервисный ключ доступа" это отдельный токен с урезанным функционалом про который и упоминается в описании библиотеки. Из-за этого кажется что пользовательский токен полученный через Implicit flow использовать в этом параметре нельзя.
@setazer можешь дать ссылку на официальную документацию про "вечный" пользовательский access token (сгенерированный с правом offline)?
Service token - описан тут и библиотека недвусмысленно поддерживает именно его, тк vk мигрирует досту к API методам с использованием этого токена.
Ты верно заметил что с точки зрения api вызовов существует только параметр access_token
, куда можно подставить любой валидный токен. Но с точки зрения user интерфейса и документации они разные.
А пожалуйста. Здесь описан способ получения токена. Вся фишка в параметре scope, значения для которого описаны тут. И там как раз есть значение:
offline (+65536) | Доступ к API в любое время (при использовании этой опции параметр expires_in, возвращаемый вместе с access_token, содержит 0 — токен бессрочный). Не применяется в Open API.
Самое странное - я сейчас не могу найти мою переписку с поддержкой ВК, в которой мне и обозначили что вместо логина каждый раз нужно просто получить один раз токен со скоупом оффлайн и пользовать его.
P.S.: Нашёл. Тут моё общение с саппортом ВК из-за того что у меня питоноскрипт прекращал каждый день на полдня что-либо делать, потому что не мог получить новый токен. Некстати только что почитал ещё раз про сервисный ключ доступа, похоже придётся использовать его вместо уже пользовательского ключа. Обновления совсем недавние, я даже не знал про них.
P.P.S.: Сервисный токен всё ещё не даёт постить на стену, что мне лично собственно и нужно.
Ага, понял. Т.е ты получаешь токен на клиенте и прокидываешь его на бэкенд для запросов от имени пользователя. В этом случае использования service_token
будет единственной опцией.
VK довольно давно (год назад или около того) перевел часть API на service tokens, но не все, поэтому надо смотреть документацию.
Как action point, я добавлю апдейт в README для подобных твоему кейсов. Спасибо за report.
По всей видимости эту либу нельзя использовать передавая напрямую "вечный" пользовательский access token (сгенерированный с правом offline) В либе vk это реализуется строчками
Здесь же я сделать чего-то подобное не могу.
api = vk_requests.create_api(access_token=VK_TOKEN, v=5.73)
выдаёт ошибку ругаясь на неожиданный аргумент access_tokenapi = vk_requests.create_api(service_token=VK_TOKEN, v=5.73)
в свою очередь ругается уже на переданный аргумент версии и очевидно ожидает только сервисный токен.Проблема в логине в ВК по логину/паролю каждый раз в том, что ВК через какое-то время начинает ограничивать доступ к API логинящемуся юзеру на срок до 8 часов. Лично столкнулся с этим где-то через полгода использования логина/пароля для каждого запроса. Поэтому целесообразнее один раз сгенерировать токен с правом offline и использовать его везде.