EDINET APIを使って過去5年分の有価証券報告書を取得して株選びに役立てる方法
目次
はじめに
ボーナスが入ったので新しく株を買いたいなと思っています。 ただ、適当に買っても負けるので知的にいこうではないかということで考えています。
まずは、金融庁が管理している過去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)
}
コード解説
- まず、http.NewRequestを使ってGETリクエストを作成します。
- params.Addを使用して、必要なクエリパラメータを追加します。今回は、日付(“date”)と報告書の種類(“type”)を指定しています。
- 追加されたクエリパラメータをエンコードしてリクエストのURLにセットします。
- http.Clientを作成し、タイムアウトを設定してリクエストを実行します。
- レスポンスのボディを読み込み、ioutil.ReadAllを使用してバイト配列に変換します。
- json.Unmarshalを使って、取得したJSONデータを構造体に変換して格納します。
URLにQueryパラメータを追加する方法
以下のコードで、リクエストのURLにクエリパラメータを追加します。
params.Add("date", "2019-04-25")
params.Add("type", "2")
request.URL.RawQuery = params.Encode()
参考記事
まとめ
本記事では、Golangを使ってEDINET APIを叩き、指定した日に公開された有価証券報告書を取得し、その情報を構造体に格納する方法を解説しました。この方法を活用して、株選びの知識を深め、Vueで作ったWEBアプリから呼び出し株選びシステムを作成していきましょう。
今後の連載では、取得した有価証券報告書の情報をSQLに詰め込み、加工してオススメの株を算出する方法や、Vueと組み合わせたWEBアプリケーションの作成について解説していく予定です。お楽しみに!