GithubHelp home page GithubHelp logo

kataane / fiss Goto Github PK

View Code? Open in Web Editor NEW
31.0 6.0 3.0 181 KB

Библиотека для строго-типизированного взаимодействия с MOEX ISS

License: MIT License

C# 100.00%
csharp dotnet iss moex

fiss's Introduction

RU | English

Fiss

Fiss - библиотека для строго-типизированного взаимодействия с MOEX ISS.

📥 Установка

Установить можно Fiss через NuGet:

Install-Package Fiss

Или через .NET Core command line interface:

dotnet add package Fiss

🔧 Использование

Чтобы начать использовать Fiss необходимо создать IssRequest:

var request = new IssRequest();

Далее необходимо определить путь запроса к ISS MOEX:

var request = request.Engines(Engine.Stock).Markets();

Или

var path = "engines/stock/markets".Split("/");
request.AddPaths(path);

И даже так:

request.AddPathFromFormattedQuery(IssQuery.Acss, "MOEX");

Добавляем параметры к запросу:

request.AddQuery("lang", "en");

Ответ можно получить так:

await request.ConvertToAsync<TResult>(IHttpContentSerializer, HttpClient, CancellationToken);

Если данных много, можно получить так:

var cursor = await request.ToCursor<TResult>(IHttpContentSerializer, cursorTitle, index, total, PageSize, HttpClient, CancellationToken);

Или так

var cursor = await request.ToCursor();

А потом

await foreach (var page in cursor)

🛂 Passport MOEX

Для аутентификации на Московской Бирже необходимо следующее.

Установить пакет Fiss.Client

Install-Package Fiss.Client

Или через .NET Core command line interface:

dotnet add package Fiss.Client

Вызвать для IServiceCollection расширение AddMoexPassportClient

collection.AddMoexPassportClient("NameForMoexPassportClient", IConfigurationSection);

где NameForMoexPassportClient уникальное имя для клиента. IConfigurationSectionконфигурация где хранятся данные для аутентификации на Московской Бирже.

Далее необходимо получить именованный клиент:

var client = IHttpClientFactory.CreateClient("NameForMoexPassportClient");

Далее с помощью этого клиента можно запрашивать данные, которые требуют авторизацию.

MoexPassportClient хранить в себе всегда актуальный токен для авторизации, даже если токен протухнет. MOEX заботливо выдаст новый токен авторизации и клиент снова станет валидным.

Вуаля! Теперь можно запрашивать любые, даже не задокументированные или требующие авторизацию, данные из MOEX.

📝 License

The MIT License (MIT)

Made with love by Kataane 💜

fiss's People

Contributors

kataane avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

fiss's Issues

Улучшение переиспользования IssRequest

Сейчас IssRequest не со всем проходит процесс dispose. Как из улучшений можно сделать следующее:
Добавить объект ShapshotState, который будет возвращаться из метода TakeSnapshot, хранить это состояние как singleton, а IssRequest сделать transient и добавить конструктор, который бы принимал ShapshotState.

Благодаря чему в IssRequest не будет необходимости в dispose, а нужное состояние для IssRequest можно всегда вернуть через ShapshotState

Отвязать пакет Fiss.Client от Fiss

Сейчас Fiss.Client использует библиотеку Fiss только для получения версии. Думаю что лучше отвязать Fiss.Client и сделать его самостоятельным.

Авторизация через паспорт MOEX

Необходимо реализовать авторизацию через паспорт MOEX, для получения доступа к данным, которые требуют подписку или авторизации пользователя.

Для реализации авторизации необходимо следующее:

  • Отправка login и password в следующий запрос: https://passport.moex.com/authenticate
  • Получение cookies = {'MicexPassportCert': s.cookies['MicexPassportCert']}
  • Отправка запроса требующего авторизацию со следующими параметрами: req = re.get(url, headers=headers, cookies = cookies)

Пример реализации описан в следующем документе от MOEX

Переиспользование IssRequest

Так как, IssRequestExtension является статическим методом расширения, с целью переиспользования IssRequest, чтобы использовать одну реализацию метода во всем проекте. Иногда необходимо очищать или обновлять данные в Queries, Paths.

Обновление пути необходимо в случаях когда запросы похожи, но имеют небольшие изменения: "engines/stock/markets/bonds/securities" и "engines/offboard/markets/bonds/securities". Можно обновить в Paths путь и пересобрать весь путь снова в ConstructUrl или заменить в итоговом пути необходимые строки, оптимальное решение пока не найдено, но смотрю в сторону StringBuilder.

Очищать путь необходимо для совершенно разных путей, так как IssRequest переиспользуется. Самый простой путь через IDisposable в IssRequest. Очищая в методе public void Dispose() Queries, Paths. Но это не самый оптимальный путь. Как и хранение динамических данных в List и Dictionary.

Необходимо найти оптимальное решения для замены строки, хранения динамических данных и их очищение.

[Suggestions] Nuget package

  1. Не генерируется документация из xml.
    Нужно добавить данный тэг в csproj, чтобы включать документацию в пакет.
    <GenerateDocumentationFile>true</GenerateDocumentationFile>

  2. Readme указывает на обычную версию пакета 0.1.1, а документация для 1.0.0-preview1. Либо добавить указание на pre-release версию, либо релизнуть новую.

Install-Package Fiss -IncludePrerelease
dotnet add package Fiss --prerelease

  1. Documentation from xml was not generated.
    You need to add this tag to csproj to include documentation in the package.
    <GenerateDocumentationFile>true</GenerateDocumentationFile>

  2. The Readme points to the regular package version 0.1.1, and the documentation for 1.0.0-preview1. Either add an indication of the pre-release version, or release a new one.

Install-Package Fiss -IncludePrerelease
dotnet add package Fiss --prerelease

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.