vcomp71
@vcomp71
Системный администратор и программист

Метод get_all из библиотеки vk_api не работает — почему?

Есть пример в официальной документации библиотеки vk_api
https://pypi.org/project/vk-api/
get_all(method, max_count, values=None, key='items', limit=None, stop_fn=None, negative_offset=False)[source]¶
Использовать только если нужно загрузить все объекты в память.
Eсли вы можете обрабатывать объекты по частям, то лучше использовать get_all_iter
Например если вы записываете объекты в БД, то нет смысла загружать все данные в память


def main():
    """ Пример получения всех постов со стены """

    login, password = 'python@vk.com', 'mypassword'
    vk_session = vk_api.VkApi(login, password)

    try:
        vk_session.auth(token_only=True)
    except vk_api.AuthError as error_msg:
        print(error_msg)
        return
    tools = vk_api.VkTools(vk_session)
    wall = tools.get_all('wall.get', 100, {'owner_id': 1})
    print('Posts count:', wall['count'])

    if wall['count']:
        print('First post:', wall['items'][0], '\n')

    if wall['count'] > 1:
        print('Last post:', wall['items'][-1])
if __name__ == '__main__':
    main()


При запуске метода пишет ошибку:

wall = tools.get_all('wall.get', 100, {'owner_id': 1})
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: VkApiMethod.__call__() takes 1 positional argument but 4 were given


Странно, пример взят прямо из документации. Что изменилось? Метод нужен, чтобы получить все посты со стены без ограничений.
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
vcomp71
@vcomp71 Автор вопроса
Системный администратор и программист
Вот так работает и авторизует по Токену

def main():
    user_token = ""
    user_id = ""
    vk_session = vk_api.VkApi(token = user_token)
    tools = vk_api.VkTools(vk_session)
    wall = tools.get_all('wall.get', 100, {'owner_id': user_id})
    print('Posts count:', wall['count'])
    if wall['count']:
        print('First post:', wall['items'][0], '\n')
    if wall['count'] > 1:
        print('Last post:', wall['items'][-1])
if __name__ == '__main__':
    main()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы