けんぞの投資関連ブログ

株を始めて3年半程のひよっこ投資家のブログです。

Pythonで楽天RSSから株価を取得する

題目通りのPython楽天RSSから株価を取得する(Cold Linkで取得)だが、

PythonからDDEにアクセスする処理は以下のURLを参考すればよいです。

http://code.activestate.com/recipes/577654-dde-client/

 

楽天RSSから株価を取得するロジック

前提条件

MarketSpeedにログインしアプリを立ち上げ、RealtimeSpreadSheetも起動しておくこと

def get_price():
stock_list = get_stock_list()
price_list = []
for topic in stock_list:
dde = DDEClient("RSS", topic)
if topic in ("N225", "TOPX", "JSD", "MTHR", "TSI2"):
price = {
"symbol": dde.request("指標コード").decode('sjis'),
"symbol_name": dde.request("指標名称").decode('sjis'),
"get_date": dde.request("現在日付").decode('sjis'),
"open_price": dde.request("始値").decode('sjis'),
"high_price": dde.request("高値").decode('sjis'),
"low_price": dde.request("安値").decode('sjis'),
"close_price": dde.request("現在値").decode('sjis'),
"volume": "",
"trading_value": "",
}
else:
price = {
"symbol": dde.request("銘柄コード").decode('sjis').strip(),
"symbol_name": dde.request("銘柄名称").decode('sjis').strip(),
"get_date": dde.request("現在日付").decode('sjis').strip(),
"open_price": dde.request("始値").decode('sjis').strip(),
"high_price": dde.request("高値").decode('sjis').strip(),
"low_price": dde.request("安値").decode('sjis').strip(),
"close_price": dde.request("現在値").decode('sjis').strip(),
"volume": dde.request("出来高").decode('sjis').strip(),
"trading_value": dde.request("売買代金").decode('sjis').strip(),
}
print(price)
price_list.append(price)
dde.__del__()

return price_list


# 株価取得銘柄一覧を取得します
def get_stock_list():
dde = DDEClient("RSS", "StockFind")
raw = dde.request("NULL").decode('sjis')
dde.__del__()

stock_lines = re.sub("^\n", "", raw).splitlines()
stock_list = []

for stock_row in stock_lines:
stock_cols = stock_row.split("\t")
stock_code = stock_cols[0]
if not (len(stock_code) == 5 and stock_code[-1] != "5"):
stock_list.append(stock_cols[0] + ".T")

# 指数も追加
stock_list.append("N225")
stock_list.append("TOPX")
stock_list.append("JSD")
stock_list.append("MTHR")
stock_list.append("TSI2")

return stock_list

 

処理の構成としては、

・銘柄一覧を取得 dde.requestはbyteでreturnされるのでsjisにdecodeが必要

・dde.__del__() が重要で、都度DDEを破棄しておくこと。

dde = DDEClient("RSS", "StockFind")
raw = dde.request("NULL").decode('Shift-JIS')
dde.__del__()
# 指数も追加
stock_list.append("N225")
stock_list.append("TOPX")
stock_list.append("JSD")
stock_list.append("MTHR")
stock_list.append("TSI2")

 

・銘柄一覧(stock_list)をFor文でぐるぐるまわし、各銘柄ごとに株価を取得

銘柄と指数では取得するitem名が異なるので注意が必要

 

for topic in stock_list:
dde = DDEClient("RSS", topic)
if topic in ("N225", "TOPX", "JSD", "MTHR", "TSI2"):
price = {
"symbol": dde.request("指標コード").decode('sjis'),
    else:
price = {
"symbol": dde.request("銘柄コード").decode('sjis').strip(),

 

すべて株価取得成功できればよいが、何個か取得失敗する可能性があるので、取れていない株価は再取得するロジックも必要かと思う。が、ここでは記述しない。

 

続き

Pythonで楽天RSSの株価取得するその2 - けんぞの投資関連ブログ