SIGNATE 일본거래소 그룹 뉴스 분석 도전 [추가 데이터 획득 편]

SIGNATE 일본거래소 그룹 뉴스 분석 도전 [환경구축편][1]의 후속

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 ↩︎
다음 글 ↩︎

좋은 웹페이지 즐겨찾기