EDINETでオススメ株探しツールに向けてEDINET APIを使ってみた

2021-06-24

EDINETでオススメ株をさがしてみよう

ボーナスが入ったので新しく株を買いたいなと思っています。 ただ、適当に買っても負けるので知的にいこうではないかということで考えています。

まずは、金融庁が管理している過去5年分の有価証券報告書がDLできるEDINETを使います。

軽く調べたら癖があるツールらしいのでこの記事から連作で何記事か続ける予定です。

有価証券報告書をDLしてきたら、その情報をSQLに詰め込んで、加工してオススメ株を算出しようと思っています。 最終的には、Vueで作ったWEBアプリから呼び出し株選びシステムを作っていきたいなと思っています。

Vueと組み合わせがいい感じのGolangで今回は作り込んでいきましょ。

今回は、EDINET APIを叩いて指定した日のアップデートが何かを見ます。 結果JSONを構造体に詰め込むところまでを今回はやります。

EDINET APIから取得コード

JsontoGoで作った構造体にEDINET APIで作った情報を詰め込みます。

全文コード

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "time"
)

type EdinetApiStruct struct {
    Metadata struct {
        Title     string `json:"title"`
        Parameter struct {
            Date string `json:"date"`
            Type string `json:"type"`
        } `json:"parameter"`
        Resultset struct {
            Count int `json:"count"`
        } `json:"resultset"`
        ProcessDateTime string `json:"processDateTime"`
        Status          string `json:"status"`
        Message         string `json:"message"`
    } `json:"metadata"`
    Results []struct {
        SeqNumber            int         `json:"seqNumber"`
        DocID                string      `json:"docID"`
        EdinetCode           string      `json:"edinetCode"`
        SecCode              interface{} `json:"secCode"`
        JCN                  string      `json:"JCN"`
        FilerName            string      `json:"filerName"`
        FundCode             string      `json:"fundCode"`
        OrdinanceCode        string      `json:"ordinanceCode"`
        FormCode             string      `json:"formCode"`
        DocTypeCode          string      `json:"docTypeCode"`
        PeriodStart          string      `json:"periodStart"`
        PeriodEnd            string      `json:"periodEnd"`
        SubmitDateTime       string      `json:"submitDateTime"`
        DocDescription       string      `json:"docDescription"`
        IssuerEdinetCode     interface{} `json:"issuerEdinetCode"`
        SubjectEdinetCode    interface{} `json:"subjectEdinetCode"`
        SubsidiaryEdinetCode interface{} `json:"subsidiaryEdinetCode"`
        CurrentReportReason  interface{} `json:"currentReportReason"`
        ParentDocID          interface{} `json:"parentDocID"`
        OpeDateTime          interface{} `json:"opeDateTime"`
        WithdrawalStatus     string      `json:"withdrawalStatus"`
        DocInfoEditStatus    string      `json:"docInfoEditStatus"`
        DisclosureStatus     string      `json:"disclosureStatus"`
        XbrlFlag             string      `json:"xbrlFlag"`
        PdfFlag              string      `json:"pdfFlag"`
        AttachDocFlag        string      `json:"attachDocFlag"`
        EnglishDocFlag       string      `json:"englishDocFlag"`
    } `json:"results"`
}

func main() {
    fmt.Println("Start!")

    url := "https://disclosure.edinet-fsa.go.jp/api/v1/documents.json"

    request, err := http.NewRequest("GET", url, nil)
    if err != nil {
        log.Fatal(err)
    }

    params := request.URL.Query()

    params.Add("date", "2019-04-25")
    params.Add("type", "2")

    request.URL.RawQuery = params.Encode()

    fmt.Println(request.URL.String())

    timeout := time.Duration(5 * time.Second)
    client := &http.Client{
        Timeout: timeout,
    }

    response, err := client.Do(request)
    if err != nil {
        log.Fatal(err)
    }

    defer response.Body.Close()

    body, err := ioutil.ReadAll(response.Body)
    if err != nil {
        log.Fatal(err)
    }

    var edinet EdinetApiStruct
    if err := json.Unmarshal(body, &edinet); err != nil {
        fmt.Println(err)
    }

    fmt.Println(edinet.Results[0].FilerName)
}

URLにQueryパラメータを追加するやつ

ここでいい感じにやっていきます。

params.Add("date", "2019-04-25")
params.Add("type", "2")

request.URL.RawQuery = params.Encode()

参考記事

Go言語でWEB APIからのJSON用構造体を楽に作る

まとめ

解説成分が一切無いですが解説するところも無いため良いでしょう。 のんびり株の勉強と合わせてソフト作り込んでいきましょう。