From c636495c510b8434e96306f345bcb23b799880a8 Mon Sep 17 00:00:00 2001 From: kazu634 Date: Sun, 17 Oct 2021 14:29:09 +0900 Subject: [PATCH] =?UTF-8?q?=E8=A8=98=E4=BA=8B=E3=81=AE=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1-10-17-download-csv-from-yahoo-finance.md | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 content/labs/visualization/2021-10-17-download-csv-from-yahoo-finance.md diff --git a/content/labs/visualization/2021-10-17-download-csv-from-yahoo-finance.md b/content/labs/visualization/2021-10-17-download-csv-from-yahoo-finance.md new file mode 100644 index 0000000..1bc690b --- /dev/null +++ b/content/labs/visualization/2021-10-17-download-csv-from-yahoo-finance.md @@ -0,0 +1,81 @@ ++++ +title="Yahoo.com Financeから株価のCSVを取得する方法" +date=2021-10-17T14:04:05+09:00 +description="アメリカのYahoo.comでは日本企業の株価でもCSVで取得できるということで、どのようにすればダウンロードできるか確認してみました" +categories = ["Labs", "Visualization"] +tags = ["chart.js"] +author = "kazu634" ++++ + +日本のYahoo!では無料では取得できないそうなのですが、アメリカのYahoo.comでは日本企業の株価でもCSVで取得できるということで、どのようにすればダウンロードできるか確認してみました。 + +## ブラウザから +一番簡単な方法としては、ブラウザからダウンロードします。例えばANAの場合は、[ANA HOLDINGS INC (9202.T) Stock Price, News, Quote & History - Yahoo Finance](https://finance.yahoo.com/quote/9202.T?p=9202.T&.tsrc=fin-srch)にアクセスするとページが表示されます。 + +Untitled + +Historical Dataの部分をクリックすると、 + +Untitled + +過去の株価一覧が表示され、CSVへのダウンロードリンクもあります。 + +Untitled + +## コマンドラインからCSVをダウンロードする +ダウンロードリンクをそのままコピーすると`https://query1.finance.yahoo.com/v7/finance/download/9202.T?period1=1602852276&period2=1634388276&interval=1d&events=history&includeAdjustedClose=true`となりますが、ここから素直にダウンロードしようとすると、うまくダウンロードできません。 + +```bash +kazu634@digdag02% wget "https://query1.finance.yahoo.com/v7/finance/download/9202.T?period1=946944000&period2=1634083200&interval=1d&events=history&includeAdjustedClose=true" --2021-10-16 21:47:53-- https://query1.finance.yahoo.com/v7/finance/download/9202.T?period1=946944000&period2=1634083200&interval=1d&events=history&includeAdjustedClose=true +query1.finance.yahoo.com (query1.finance.yahoo.com) をDNSに問いあわせています... 119.161.5.251, 119.161.5.252, 2406:6e00:108:fe06::2000, ... +query1.finance.yahoo.com (query1.finance.yahoo.com)|119.161.5.251|:443 に接続しています... 接続しました。 +HTTP による接続要求を送信しました、応答を待っています... 403 Forbidden +2021-10-16 21:47:54 エラー 403: Forbidden。 +``` + +ユーザーエージェントを指定してあげると、うまくダウンロードできました。 + +```bash +kazu634@digdag02% wget --user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53" "https://query1.finance.yahoo.com/v7/finance/download/9202.T?period1=946944000&period2=1634083200&in5D" +--2021-10-16 21:46:51-- https://query1.finance.yahoo.com/v7/finance/download/9202.T?period1=946944000&period2=1634083200&in5D +query1.finance.yahoo.com (query1.finance.yahoo.com) をDNSに問いあわせています... 119.161.5.252, 119.161.5.251, 2406:2000:a4:9fe::, ... +query1.finance.yahoo.com (query1.finance.yahoo.com)|119.161.5.252|:443 に接続しています... 接続しました。 +HTTP による接続要求を送信しました、応答を待っています... 200 OK +長さ: 特定できません [text/csv] +`9202.T?period1=946944000&period2=1634083200&in5D' に保存中 + +9202.T?period1=946944000&period [ <=> ] 417.10K 1.42MB/s in 0.3s + +2021-10-16 21:46:52 (1.42 MB/s) - `9202.T?period1=946944000&period2=1634083200&in5D' へ保存終了 [427112] +``` + +## ダウンロードを自動化するスクリプトを作成してみました +渡してあげるパラメータは以下のようです: +- `ID`: 会社のID +- `期間 (開始)`: 期間の開始日時 (Unixタイムスタンプ) +- `期間 (終了)`: 期間の終了日時 (Unixタイムスタンプ) + +その辺を考慮すると、以下のようにしてあげると自動的にダウンロードできそうです。 + +```bash +#!/bin/bash + +set -e + +BASE="https://query1.finance.yahoo.com/v7/finance/download/" +ID="9202.T" +PARAM1="?period1=" +PARAM2="&period2=" + +PAST=`date --date '7 days ago' '+%s'` +CURRENT=`date '+%s'` + +UA="Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53" + +URL="${BASE}${ID}${PARAM1}${PAST}${PARAM2}${CURRENT}" + +wget --user-agent="${UA}" -O ${CURRENT}.csv "${URL}" +``` + +## 次のステップ +ダウンロードまでは自動化できたので、DBに格納するところまで自動化してあげて、BIでお気軽に確認できるようにしようと思います。