EDINET APIを使って過去5年分の有価証券報告書を取得して株選びに役立てる方法

株_1624547384.webp
目次

はじめに

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

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

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

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

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

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

EDINET APIから取得コード

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

全文コード

以下のコードは、指定した日に公開された有価証券報告書を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)
}

コード解説

  1. まず、http.NewRequestを使ってGETリクエストを作成します。
  2. params.Addを使用して、必要なクエリパラメータを追加します。今回は、日付(“date”)と報告書の種類(“type”)を指定しています。
  3. 追加されたクエリパラメータをエンコードしてリクエストのURLにセットします。
  4. http.Clientを作成し、タイムアウトを設定してリクエストを実行します。
  5. レスポンスのボディを読み込み、ioutil.ReadAllを使用してバイト配列に変換します。
  6. json.Unmarshalを使って、取得したJSONデータを構造体に変換して格納します。

URLにQueryパラメータを追加する方法

以下のコードで、リクエストのURLにクエリパラメータを追加します。

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

request.URL.RawQuery = params.Encode()

参考記事

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

まとめ

本記事では、Golangを使ってEDINET APIを叩き、指定した日に公開された有価証券報告書を取得し、その情報を構造体に格納する方法を解説しました。この方法を活用して、株選びの知識を深め、Vueで作ったWEBアプリから呼び出し株選びシステムを作成していきましょう。

今後の連載では、取得した有価証券報告書の情報をSQLに詰め込み、加工してオススメの株を算出する方法や、Vueと組み合わせたWEBアプリケーションの作成について解説していく予定です。お楽しみに!

Related Post

> EDINET APIを使って過去5年分の有価証券報告書を取得して株選びに役立てる方法
GolangとGoogle Chartで時系列感情分析グラフを作成
> EDINET APIを使って過去5年分の有価証券報告書を取得して株選びに役立てる方法
GolangとGoogle Chartで時系列データをグラフ化する方法
> EDINET APIを使って過去5年分の有価証券報告書を取得して株選びに役立てる方法
Goでプログレスバーを表示する
> EDINET APIを使って過去5年分の有価証券報告書を取得して株選びに役立てる方法
Twitterのテキストデータに含まれるゴミ文字を削除する方法
> EDINET APIを使って過去5年分の有価証券報告書を取得して株選びに役立てる方法
JumanppをGolangから扱いやすくするラッパライブラリを書いた話
> EDINET APIを使って過去5年分の有価証券報告書を取得して株選びに役立てる方法
GolangとJUMAN++を使ってTwitterデータを形態素解析する方法

おすすめの商品

>