fix: resolve MOEX quotes by ISIN search
This commit is contained in:
1 parent
c2e515ba8d
commit
58a4663aaf
1 file changed
+11
-2
@@ -24,8 +24,17 @@ function numberValue(value: unknown): number | null {
|
||||
export async function getMoexQuote(isin: string): Promise<MarketQuote | null> {
|
||||
if (!/^RU[A-Z0-9]{10}$/.test(isin)) return null;
|
||||
try {
|
||||
const info = await getJson(`${BASE_URL}/securities/${encodeURIComponent(isin)}.json?iss.meta=off&iss.only=boards&boards.columns=engine,market,boardid,secid`);
|
||||
const boards = rows(info.boards).filter((item) => typeof item.engine === 'string' && typeof item.market === 'string' && typeof item.boardid === 'string' && typeof item.secid === 'string');
|
||||
let info = await getJson(`${BASE_URL}/securities/${encodeURIComponent(isin)}.json?iss.meta=off&iss.only=boards&boards.columns=engine,market,boardid,secid`);
|
||||
let boards = rows(info.boards);
|
||||
if (boards.length === 0) {
|
||||
const search = await getJson(`${BASE_URL}/securities.json?q=${encodeURIComponent(isin)}&iss.meta=off&iss.only=securities&securities.columns=secid,isin`);
|
||||
const match = rows(search.securities).find((item) => String(item.isin ?? '').toUpperCase() === isin);
|
||||
if (typeof match?.secid === 'string') {
|
||||
info = await getJson(`${BASE_URL}/securities/${encodeURIComponent(match.secid)}.json?iss.meta=off&iss.only=boards&boards.columns=engine,market,boardid,secid`);
|
||||
boards = rows(info.boards);
|
||||
}
|
||||
}
|
||||
boards = boards.filter((item) => typeof item.engine === 'string' && typeof item.market === 'string' && typeof item.boardid === 'string' && typeof item.secid === 'string');
|
||||
for (const board of boards) {
|
||||
try {
|
||||
const quote = await getJson(`${BASE_URL}/engines/${board.engine}/markets/${board.market}/boards/${board.boardid}/securities/${encodeURIComponent(String(board.secid))}.json?iss.meta=off&iss.only=marketdata&marketdata.columns=LAST,LCURRENTPRICE,WAPRICE,UPDATETIME`);
|
||||
|
||||
Reference in new issue
Block a user