JEPXスポット市場価格データをcURLでダウンロードする

# 目的
JEPXのスポットデータをダウンロードする。なお、本記事は、2024年7月31日現在のもので、JEPXの仕様が変わった場合は使えません。

# はじめに
JEPXのデータは、ダウンロードする際にモーダル表示されることと、POSTされるとき別タブで開くのでChromeの開発者機能を使ってもコードが追いにくいです。ちょっと小技的なところを駆使してcurlでダウンロードできるようにしました。

# JEPXのダウンロード用のURLを解析
手前味噌的なところはありますが、Chromeの開発者ツールを使います。スポット価格は下図のようになっていますので、まずは、データダウンロードボタンを押して、モーダル表示されるのを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531802/e3e179b6-fc52-f4aa-7306-8efa3a09cb42.png)

## モーダル表示
上図で、データダウンロードを押すと下図のようなモーダル表示となります。ここで、データダウンロードを押すと、別タブにてダウンロードが始まります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531802/25414b38-8ef0-4c0c-7026-cd60cce67493.png)

## 開発者ツールで開く
開発者ツールで開くと次のようになっていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531802/de8d0e07-e2f5-b650-007e-dcfb43d4f20c.png)

該当するコードだけ抜き取ると次の部分です。
```html
<form method="post" target="_blank" action="/_download.php?timestamp=1722431019171">
  <label class="modal-box__content__label" for="download-file">年度選択</label>
  <input type="hidden" name="dir" value="spot_summary">
  <select class="modal-box__content__select" name="file" id="dl-select--spot_summary">
    <option value="spot_summary_2024.csv">2024年度</option>
    <option value="spot_summary_2023.csv">2023年度</option>
    <option value="spot_summary_2022.csv">2022年度</option>
    <option value="spot_summary_2021.csv">2021年度</option>
    <option value="spot_summary_2020.csv">2020年度</option>
    <option value="spot_summary_2019.csv">2019年度</option>
    <option value="spot_summary_2018.csv">2018年度</option>
    <option value="spot_summary_2017.csv">2017年度</option>
    <option value="spot_summary_2016.csv">2016年度</option>
    <option value="spot_summary_2015.csv">2015年度</option>
    <option value="spot_summary_2014.csv">2014年度</option>
    <option value="spot_summary_2013.csv">2013年度</option>
    <option value="spot_summary_2012.csv">2012年度</option>
    <option value="spot_summary_2011.csv">2011年度</option>
    <option value="spot_summary_2010.csv">2010年度</option>
    <option value="spot_summary_2009.csv">2009年度</option>
    <option value="spot_summary_2008.csv">2008年度</option>
    <option value="spot_summary_2007.csv">2007年度</option>
    <option value="spot_summary_2006.csv">2006年度</option>
    <option value="spot_summary_2005.csv">2005年度</option>
  </select>
  <button class="dl-button" type="submit">
    <span class="dl-button__txt">データダウンロード</span>
  </button>
</form>
```
POSTしているのですが、dirとnameという属性をヘッダーにつける必要がありそうです。
よくわからないので、Chrome上で、target="_blank" の部分を削除して、実際にデータをダウンロードしてみます。

データをダウンロードする際、ネットワークタブを見ると次のようになっていました。
![スクリーンショット 2024-07-31 221437.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531802/fda988cf-7cfa-9481-f1a2-7398908c4424.png)


環境に合わせて、
- Copy as cURL(cmd)<--今回はこれを選択
- Copy as cURL(bash)
- Copy as PowerShell

等々から適当に選んでください。
![スクリーンショット 2024-07-31 221514.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531802/7773ad19-9578-565c-9e59-8a7c2dbc07cd.png)


いろいろ環境に応じてUserAgentの情報とか付加されますが必要なのは以下のものだと思います。
```shell
curl "https://www.jepx.jp/_download.php?timestamp=1722431019171" ^
  -H "content-type: application/x-www-form-urlencoded" ^
  -H "referer: https://www.jepx.jp/electricpower/market-data/spot/" ^
  --data-raw "dir=spot_summary&file=spot_summary_2024.csv"
```

またタイムスタンプは、jsファイルを確認いただければわかりますが、
```javascript
(new Date()).getime()
```
となっているので、都度生成は必要ないと思いますが、状況に応じて生成してもらえれば良いかなと思います。

# 免責事項
JEPXでは、スクレイピング等を禁止している可能性があります。試行する際も含めてホームページの情報を確認の上実施していただくとともに、本コードにより損害を受けたあるいは与えた場合であっても、当方は一切の責任を負わないものとします。

# 所感
需要があるかはわからない。

# REFERENCEs
https://btj0.com/blog/web/chrome-post/

https://qiita.com/thistle0420/items/c52a1520970cd18e7d56