WLM1ke / aiomoex

Asyncio client for MOEX ISS
https://wlm1ke.github.io/aiomoex/
The Unlicense
89 stars 24 forks source link

Авторизация #4

Open Vponed opened 3 years ago

Vponed commented 3 years ago

Простите, а авторизация но мосбирже поддерживается?

WLM1ke commented 3 years ago

В тех запросах, которые реализованы, она не нужна, поэтому не поддерживается.

madby31 commented 1 year ago

На версиях 3.7, 3.9, 3.10 с установленными пакетами aiomoex выдает одинаковую ошибку: AttributeError: module 'aiomoex' has no attribute 'ISSClient'

WLM1ke commented 1 year ago

Я каждый день пользуюсь на 3.10 и все работает. Думаю, что-то у вас неправильно установлено. Приведите минимальный код, который воспроизводит эту ошибку с полным трейсбеком, может удастся понять, в чем проблема

madby31 commented 1 year ago
import asyncio
import aiohttp
import aiomoex
import pandas as pd

async def main():
    request_url = "https://iss.moex.com/iss/engines/stock/" "markets/shares/boards/TQBR/securities.json"
    arguments = {"securities.columns": ("SECID," "REGNUMBER," "LOTSIZE," "SHORTNAME")}
    async with aiohttp.ClientSession() as session:
        iss = aiomoex.ISSClient(session, request_url, arguments)
        data = await iss.get()
        df = pd.DataFrame(data["securities"])
        df.set_index("SECID", inplace=True)
        print(df.head(), "\n")
        print(df.tail(), "\n")
        df.info()
asyncio.run(main())

Вывод

Traceback (most recent call last):
  File "C:\MOEX\aiomoex.py", line 5, in <module>
    import aiomoex
  File "C:\MOEX\aiomoex.py", line 23, in <module>
    asyncio.run(main())
  File "C:\Python3\lib\asyncio\runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "C:\Python3\lib\asyncio\base_events.py", line 642, in run_until_complete
    return future.result()
  File "C:\MOEX\aiomoex.py", line 14, in main
    iss = aiomoex.ISSClient(session, request_url, arguments)
AttributeError: partially initialized module 'aiomoex' has no attribute 'ISSClient' (most likely due to a circular import)
madby31 commented 1 year ago
C:\Windows\System32>pip install aiomoex
Requirement already satisfied: aiomoex in c:\python310\lib\site-packages (2.0.0)
Requirement already satisfied: aiohttp in c:\python310\lib\site-packages (from aiomoex) (3.8.3)
Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in c:\python310\lib\site-packages (from aiohttp->aiomoex) (4.0.2)
Requirement already satisfied: frozenlist>=1.1.1 in c:\python310\lib\site-packages (from aiohttp->aiomoex) (1.3.1)
Requirement already satisfied: multidict<7.0,>=4.5 in c:\python310\lib\site-packages (from aiohttp->aiomoex) (6.0.2)
Requirement already satisfied: charset-normalizer<3.0,>=2.0 in c:\python310\lib\site-packages (from aiohttp->aiomoex) (2.1.1)
Requirement already satisfied: yarl<2.0,>=1.0 in c:\python310\lib\site-packages (from aiohttp->aiomoex) (1.8.1)
Requirement already satisfied: aiosignal>=1.1.2 in c:\python310\lib\site-packages (from aiohttp->aiomoex) (1.2.0)
Requirement already satisfied: attrs>=17.3.0 in c:\python310\lib\site-packages (from aiohttp->aiomoex) (22.1.0)
Requirement already satisfied: idna>=2.0 in c:\python310\lib\site-packages (from yarl<2.0,>=1.0->aiohttp->aiomoex) (3.4)
madby31 commented 1 year ago

Скриншот 13-11-2022 11 59 06

WLM1ke commented 1 year ago

Такое впечатление, что у вас конфликт имен:

Как следствие питон пытается не из библиотеки брать ISSClient, а из вашего же файла, в результате получается циклическая зависимость (circular import). Назовите файл по-другому и попытайтесь выполнить.

madby31 commented 1 year ago

Спасибо большое! Получилось!

madby31 commented 1 year ago

Еще подскажите, пожалуйста! Как победить: RuntimeError: Event loop is closed

WLM1ke commented 1 year ago

Слишком абстрактный вопрос, где-то вы видимо eventloop закрываете. Без конкретного примера кода могу только гадать - например функция asyncio.run закрывает eventloop.

PS: мой вам совет, если вы не очень знаете asyncio, то легче воспользоваться библиотекой apimoex, а не мучаться с асинхронным программированием.

madby31 commented 1 year ago

Решил сам, но это только для Windows. Перед вызовом: asyncio.run(main()) добавить строку asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())

madby31 commented 1 year ago

Запросы к бирже я сам формирую, объемы запросов выросли и я вспомнил про Вашу библиотеку, ускоряющую получение запросов. Еще раз спасибо!

Pavel26ru commented 1 year ago

Добрый день Не могу авторизоваться на бирже по ссылке: https://passport.moex.com/authenticate из документации Передаю в заголовке логин и пароль, но получаю ошибку 403 Подскажите, с чем это связано?

WLM1ke commented 1 year ago

Я не представитель биржи - наверное вам там лучше напрямую спросить