Source code for koapy.cli.commands.get.stock_meta.stockcode
import click
from koapy.cli.utils.verbose_option import verbose_option
[docs]market_codes = [
"0",
"10",
"3",
"8",
"50",
"4",
"5",
"6",
"9",
"30",
"all",
]
@click.command(short_help="Get stock codes.")
@click.option(
"-n",
"--name",
"names",
metavar="NAME",
multiple=True,
help="Name of stock. Can set multiple times.",
)
@click.option(
"-m",
"--market",
"markets",
metavar="MARKET",
multiple=True,
type=click.Choice(market_codes, case_sensitive=False),
help="Stock market code to get. Can set multiple times.",
)
@click.option(
"-p", "--port", metavar="PORT", help="Port number of grpc server (optional)."
)
@verbose_option()
[docs]def stockcode(names, markets, port):
"""
\b
Possible market codes are:
0 : 장내
10 : 코스닥
3 : ELW
8 : ETF
50 : KONEX
4 : 뮤추얼펀드
5 : 신주인수권
6 : 리츠
9 : 하이얼펀드
30 : K-OTC
"""
markets_option = markets
from koapy.backend.kiwoom_open_api_plus.core.KiwoomOpenApiPlusEntrypoint import (
KiwoomOpenApiPlusEntrypoint,
)
with KiwoomOpenApiPlusEntrypoint(port=port) as context:
context.EnsureConnected()
if not markets:
markets = ["0"]
codes = set()
for market in markets:
codes = codes.union(set(context.GetCodeListByMarketAsList(market)))
codes = sorted(list(codes))
if markets_option:
for code in codes:
click.echo(code)
else:
def get_names():
if names:
if "-" in names:
with click.open_file("-", "r") as f:
for name in f:
yield name.strip()
else:
for name in names:
yield name
else:
while True:
try:
name = click.prompt("name", prompt_suffix=" >>> ")
name = name.strip()
if name == "exit":
break
if name:
yield name
except EOFError:
break
all_names = [context.GetMasterCodeName(code) for code in codes]
codes_by_name = dict(zip(all_names, codes))
for name in get_names():
code = codes_by_name.get(name, None)
if code:
click.echo(code)
else:
click.echo("Cannot find code for given name: %s." % name)