Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 11, 2024 11:32:36

vcomp71
Зарегистрирован: 2020-05-24
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Метод 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)
Использовать только если нужно загрузить все объекты в память.
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)
        При использовании get_all сокращается количество запросов к API
        за счет метода execute в 25 раз.
        Например за раз со стены можно получить 100 * 25 = 2500, где
        100 - максимальное количество постов, которое можно получить за один
        запрос (обычно написано на странице с описанием метода)
    """
    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
Traceback

Traceback (most recent call last):
File “C:\Python\proekt\vk\vk_api\main.py”, line 129, in main_vk
wall = tools.get_all('wall.get', 100, {'owner_id': acc})
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: VkApiMethod.__call__() takes 1 positional argument but 4 were given

Вот что интересно… Пример из документации не работает!
Можно, конечно, всё сделать через requests, но зачем, когда есть уже готовый метод?

Офлайн

#2 Июнь 11, 2024 14:07:06

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Метод get_all из библиотеки vk_api не работает

Тебе даже форум показывает что у тебя код синтаксичекие ошибки содержит ты пропустил символ екранировки
https://github.com/python273/vk_api/blob/master/examples/get_full_wall.py
вот попробуй скопировать и не удалять лишних строк



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Июнь 12, 2024 06:39:47

vcomp71
Зарегистрирован: 2020-05-24
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Метод get_all из библиотеки vk_api не работает

Вот так вот сразу - и глупый ответ????
А погуглить не судьба ошибку:
takes 1 positional argument but 4 were given

https://stackoverflow.com/questions/72614861/python-error-on-class-method-takes-1-positional-argument-but-2-were-given


По ссылки перейди и посмотри код.
https://github.com/python273/vk_api/blob/master/examples/get_full_wall.py
Я копировал пример из документации, а не свой рабочий код. У меня код проще.

 def vk_auth(vid,acc_n):
    match vid:
        case "vk_api":
            # vk_session = vk_api.VkApi(token = acc[acc_n]['ACCESS_TOKEN'])
            vk_session = vk_api.VkApi(acc[acc_n]['ACCESS_TOKEN'])
            try:
                vk_session.auth(token_only=True)
            except vk_api.AuthError as error_msg:
                print(error_msg)
                return error_msg
            tools = vk_session.get_api()
            return tools
        case "vk":
            return 0
        case "vkontakte":
            vk_session = vkontakte.API(token=acc[acc_n]['ACCESS_TOKEN'])
            tools = vkontakte.API(token=acc[acc_n]['ACCESS_TOKEN'])
            return tools
        case unknown_command:
            print(f"Unknown command'{unknown_command}'")
def main_vk():
    tools = vk_auth("vk_api",1)
    if (isinstance(tools, str)):
        print(tools)
        exit()
    # id_user = acc[1]['DOMAIN']
    # print(id_user)
    try:
        wall = tools.get_all('wall.get', 100, {'owner_id': acc[1]['ID']})
    except Exception as e:
        exception_traceback = traceback.format_exc()
        print(exception_traceback)
        exit()
    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_vk()
    # main_req()

Но за сообщение о том, что пропуск символа каретки вызывает такую ошибку - спасибо. Посмеялся.
Вопрос к знатокам библиотеки vk_api. С какими аргументами надо функцию вызывать?

Офлайн

#4 Июнь 13, 2024 16:29:02

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Метод get_all из библиотеки vk_api не работает

То есть ошибку выдает код написанный вами
но на форум вы выложили код из примера с гита
При этом как то так выложили что даже форум дает засвет из за пропущенных кавычек
(мы ведь предполагаем что вы выложили именно тот код который вы запускаете в том же виде где ошибка)
И мы в этой связке должны угадать что вы передаете в виде параметров в вашу функцию и соответствствует ли оно действительности?
При этом вы бросаете линк на овефлов который к вашей проблеме не имеет только косвенное отношение по общему названию ошибки
И мы тут все виноваты?

Вот для того что бы исключить человеческий фактор я вам и предложил
1. Возьмите полностью код из примера с гита
2. Измените в нем только логин пароль (айди если нужно)
(Не нужно создавать словарь список или класс для хранения паролей - просто замените в примере на свои)
3. Выполните код и предоставьте результаты - тогда можно смотреть в сторону библиотеки
Потому что как ваш код вобще работает а не вываливается в кору это уже большой вопрос.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#5 Июнь 18, 2024 05:50:42

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9798
Репутация: +  849  -
Профиль   Отправить e-mail  

Метод get_all из библиотеки vk_api не работает

vcomp71
Я копировал пример из документации
Учись копировать. Ты накопировал отовсюду из разных мест код в одну точку и потом её запускаешь. Конечно, она выдаёт какие-то ошибки непредсказуемые. Они вообще с методом не связаны.



Офлайн

#6 Июнь 20, 2024 04:59:55

Kiodlso
Зарегистрирован: 2024-06-20
Сообщения: 2
Репутация: +  -2  -
Профиль   Отправить e-mail  

Метод get_all из библиотеки vk_api не работает

Are we all to blame when you included a link to an overflow error that is unrelated to your issue but shares the same name?
spacebar clicker

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version