SIGNATE 일본거래소 그룹 뉴스 분석 도전 [추가 데이터 획득 편]
J-Quants API에서 데이터 가져오기
시합 기간에 J-Quants API[2]를 사용하여 최신 데이터를 얻을 수 있다
먼저 J-Quants API에 로그인하여 Refreshtoken 획득
아래 코드를 통해 주가의 역사 데이터를 얻을 수 있다
import os
import json
import time
import requests
import base64
import pandas as pd
def call_refresh_api(refreshtoken: str):
"""
idTokenをリフレッシュするメソッド。
Parameters
----------
refreshtoken : str
refreshtoken。ログイン後の画面からご確認いただけます。
Returns
-------
resjson : dict
新しいidtokenが格納されたAPIレスポンス(json形式)
"""
headers = {"accept": "application/json"}
data = {"refresh-token": refreshtoken}
response = requests.post(
"https://api.jpx-jquants.com/refresh", headers=headers, data=json.dumps(data)
)
resjson = json.loads(response.text)
return resjson
# 1h有効なtoken get
refreshtoken = "サイトでゲットした自分のrefreshtokenをstrで入れる"
ret = call_refresh_api(refreshtoken)
id_token = ret['idToken']
def call_jquants_api(params: dict, idtoken: str, apitype: str, code: str = None):
"""
J-QuantsのAPIを試すメソッド。
Parameters
----------
params : dict
リクエストパラメータ。
idtoken : str
idTokenはログイン後の画面からご確認いただけます。
apitype: str
APIの種類。"news", "prices", "lists"などがあります。
code: str
銘柄を指定するAPIの場合に設定します。
Returns
-------
resjson : dict
APIレスポンス(json形式)
"""
datefrom = params.get("datefrom", None)
dateto = params.get("dateto", None)
date = params.get("date", None)
includedetails = params.get("includedetails", "false")
keyword = params.get("keyword", None)
headline = params.get("headline", None)
paramcode = params.get("code", None)
nexttoken = params.get("nextToken", None)
headers = {"accept": "application/json", "Authorization": idtoken}
data = {
"from": datefrom,
"to": dateto,
"includeDetails": includedetails,
"nextToken": nexttoken,
"date": date,
"keyword": keyword,
"headline": headline,
"code": paramcode,
}
if code:
code = "/" + code
r = requests.get(
"https://api.jpx-jquants.com/" + apitype + code,
params=data,
headers=headers,
)
else:
r = requests.get(
"https://api.jpx-jquants.com/" + apitype, params=data, headers=headers
)
resjson = json.loads(r.text)
return resjson
#month = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]
month = ["01", "02", "03"]
day = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18',
'19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31']
results = []
for m in month:
for d in day:
next_flg = True
next_token = None
while next_flg:
date = f"2021-{m}-{d}"
print(date)
paramdict = {}
paramdict["date"] = date
paramdict["includedetails"] = "True"
paramdict["nextToken"] = next_token
ret = call_jquants_api(paramdict, id_token, "prices")
results.append(pd.DataFrame(ret['prices']))
if 'nextToken' in ret.keys():
next_token = ret['nextToken']
else:
next_flg = False
time.sleep(1)
df = pd.concat(results, axis=0)
점은 넥스트톡이 존재하는 상황에서 당일의 주가 데이터가 계속될 것이기 때문에 넥스트톡을 설정하고api를 두드리면 후속을 얻을 수 있다.date=f "2021-{m]-{d}"수정하면 임의의 날짜의 주가 데이터를 얻을 수 있습니다.
각자 Local Code 의 list 및 날짜를 확인하고 해당 날짜를 확인하십시오.
계속[3]
각주
이전 글 ↩︎
J-Quants API ↩︎
다음 글 ↩︎
Reference
이 문제에 관하여(SIGNATE 일본거래소 그룹 뉴스 분석 도전 [추가 데이터 획득 편]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ymd/articles/18a34ffc96bfdf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)