Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 08.01.2023
Сообщений: 13

Vk_api и asyncio

08.05.2023, 16:36. Показов 1559. Ответов 1

Студворк — интернет-сервис помощи студентам
Так вот суть в том, что создаю приложение, которое работает с вк и из-за того что запросов много, решил использовать асинхронность, и тут получается что перевел первоначальный код, но не работает, я уже не знаю что исправить можно, не работает именно аутификация как я понимаю

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import asyncio
from math import ceil
from vk_api import VkApi
from vk_api.exceptions import ApiError, AccessDenied, VkApiError, AuthError
from pprint import pprint
 
async def get_wall_ids(session, group_id, unix_time):
    try:
        temp = (await session.wall.get(owner_id=-group_id))['count']
        num_pages = ceil(temp/100)
        group_walls = []
        for page in range(num_pages):
            walls = await session.wall.get(owner_id=-group_id, offset=100*page, count=100)
            for wall in walls['items']:
                if wall['date'] >= unix_time:
                    group_walls.append(wall['id'])
        return group_id, group_walls, {'posts': len(group_walls)}
    except AccessDenied:
        print("Access denied: this wall is available only for community members")
        return group_id, [], {'posts': 0}
    except VkApiError as e:
        if isinstance(e, ApiError) and e.error_code == 29:
            print(f"Rate limit reached. Sleeping for {e.error['retry_after']} seconds.")
            await asyncio.sleep(e.error['retry_after'])
        else:
            print(f"Unexpected error: {e}")
        return group_id, [], {'posts': 0}
 
async def get_wall_ids_for_groups(session, groups, unix_time):
    tasks = []
    for group_id in groups:
        task = asyncio.create_task(get_wall_ids(session, group_id, unix_time))
        tasks.append(task)
    results = await asyncio.gather(*tasks, return_exceptions=True)
    dict_wall = {}
    dict_wall_count = {}
    for result in results:
        if isinstance(result, Exception):
            continue
        group_id, group_walls, group_count = result
        dict_wall[str(group_id)] = group_walls
        dict_wall_count[str(group_id)] = group_count
    return dict_wall, dict_wall_count
 
async def get_groups_by_tag(session, tag, market_on1_off0):
    groups = []
    pages = ceil((await session.groups.search(q=tag))['count'] / 999)
    for page in range(pages):
        groups_date = await session.groups.search(q=tag, market=market_on1_off0, offset=1000*page, count=1000)
        for group_date in groups_date['items']:
            groups.append(group_date['id'])
    return groups
 
async def get_wall_ids_async(token, tag, market_on1_off0, unix_time):
    async with VkApi(token=token) as session:
        groups = await get_groups_by_tag(session, tag, market_on1_off0)
        return await get_wall_ids_for_groups(session, groups, unix_time)
 
 
from MethodsGetVK.Date import MyDate
from time import mktime, strptime
 
async def main():
    try:
        session = VkApi(login=MyDate.MyPhone, password=MyDate.MyPassword)
        await session.auth(token_only=True)
        dict_wall, dict_wall_count = await get_wall_ids_async(
                session,
                tag='example',
                market_on1_off0=1,
                unix_time = int(mktime(strptime("2022-01-01", "%Y-%m-%d")))
            )
        pprint(dict_wall)
        pprint(dict_wall_count)
    except AuthError:
        print("Failed to authenticate")
 
 
if __name__ == '__main__':
    asyncio.run(main())
ошибку выдает следующую
File "e:\Mat stat project\asinc.py", line 80, in <module>
asyncio.run(main())
File "C:\Users\admin\AppData\Local\Programs\P ython\Python310\lib\asyncio\runners.py", line 44, in run
return loop.run_until_complete(main)
File "C:\Users\admin\AppData\Local\Programs\P ython\Python310\lib\asyncio\base_events. py", line 649, in run_until_complete
return future.result()
File "e:\Mat stat project\asinc.py", line 66, in main
await session.auth(token_only=True)
TypeError: object NoneType can't be used in 'await' expression
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.05.2023, 16:36
Ответы с готовыми решениями:

asyncio.wait vs asyncio.gather
Всем привет! :victory: Вопросы внизу. Есть два похожих теста: #1 - asyncio.wait import asyncio import random async def...

Vk_api не работает vk_api.users.ge()
Вот код: def user_get(uid): LINE 321- user_ids = uid data = vk_api.users.get(user_ids) ...

Asyncio
Использую библиотеку aiogram. Я хочу закрыть задачу созданной с помощью asyncio.create_task(function(message)) По нажатию...

1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
11.05.2023, 19:10
Цитата Сообщение от Wilsey Посмотреть сообщение
await session.auth(token_only=True)
TypeError: object NoneType can't be used in 'await' expression
ну видимо вернуло Нан, а не корутину. А вк апи именно асинхронная библиотека?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.05.2023, 19:10
Помогаю со студенческими работами здесь

WxPython и asyncio
Добрый день. Подскажите можно ли в приложении wxPython использовать модуль asyncio? Как я понимаю wxPython, при старте приложения,...

Проблема с asyncio
Здравствуйте! пытаюсь разобраться с asyncio.. Нужна помощь, ошибка: RuntimeError: This event loop is already running sys:1: RuntimeWarning:...

Asyncio парсер
Подскажите направление, словами, нужен подход к задаче. Используя asynсio надо рекурсивно проверить все внешние ссылки на странице. ...

asyncio Асинхронный Сервер
Доброго времени суток форумчане. Питон прекрасен и многогранен. Предельно прост и понятен :) ... За исключением asyncio Задача...

Asyncio ошибка работы парсера
Здравствуйте, имеется парсер на Python в связке asyncio + aiohttp + threadPoolExecutor + lxml. Парсер работает более 2 часов, парся и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru