Juliaで株価の取得 (1)長期の株価取得

またまたJuliaの練習として,Webから株価を取得してみます.
取得先はfinance.yahoo.comとします.
以下の記事にあるように,URLに銘柄,range(取得期間),interval(時間間隔)を指定すると,結果がJSON形式で取得できるようです.

過去長期間の株価取得

過去の最大期間のデータを取得し,CSVとして保存してみます.
対象は,試しにYahooの持株会社であるZホールディングス(4689)とします.
東証の株価は末尾に".T"をつけて検索すれば検索できるそうです.

rangeは取得できる最大の期間("10y")とします."max"という指定の仕方もできるのですが,これだとintervalを細かくしても勝手に粗くなってしまうようです.
intervalは"1d"としてみます.
stock = "4689.T"
range = "10y"
interval = "1d"
prefix = "https://query1.finance.yahoo.com/v7/finance/chart/"
url = prefix * stock * "?range=" * range * "&interval=" * interval * "&indicators=quote&includeTimestamps=true"
println(url)
作成されたURLをブラウザにコピーして,ちゃんとJSONが返ってくるか確認しておきます.
大丈夫そうなら,以下のようにしてDict型にしておきます.
using JSON
str = read(download(url), String) # urlからjson文字列の取得
json = JSON.parse(str) # json文字列をパースしてDict型に変換
返ってきたJSONの時刻はunixtimeなので,datetime型に変換します.
using Dates
unixtime = json["chart"]["result"][1]["timestamp"]
dt = Dates.unix2datetime.(unixtime)
時刻と各項目をそれぞれDict型から取得しDataFrameの列として追加していきます.
using DataFrames
df = DataFrame()
df."timestamp" = Dates.format.(dt, "yyyy/mm/dd HH:MM:SS")
df."open" = json["chart"]["result"][1]["indicators"]["quote"][1]["open"]
df."low" = json["chart"]["result"][1]["indicators"]["quote"][1]["low"]
df."high" = json["chart"]["result"][1]["indicators"]["quote"][1]["high"]
df."close" = json["chart"]["result"][1]["indicators"]["quote"][1]["close"]
df."volume" = json["chart"]["result"][1]["indicators"]["quote"][1]["volume"]
CSVに書き込みします.
using CSV
CSV.write(stock * ".csv", df)
もしデータにnothingが含まれていた場合,書き込みに失敗するので,以下のようにNothingを含む行は削除しておきます.
df = df[df."open".!=nothing,:]
後はデータを煮るなり焼くなり好きにできます.