CurlとJqを使ってgithubレポジトリ上のcsvデータを取得する 〜 株価日足編


2021/03/23

ローカルで管理している日足csvデータをオンラインで管理・取得するときに、「あの銘柄のデータはどこのどのフォルダーだったかな...すぐに思い出せない😅」ということがしばしば出てきます。

いっそのことgithub上でデータ管理可能なプロジェクトとしてcsvデータも置いておくのはどうだろう、という使い方も人によってはあると思います。

そんなときCurlとJqコマンドを組み合わせると、ターミナルから効率的なデータ操作を行うことができます。

今回はcurlでオンラインプロジェクトからGETしたcsvデータを、jqでjson形式に整理・変形して捌く方法を紹介します。


Curlで生csvを取得

githubから生のテキストデータにアクセスするためには以下のような用法でcurlを使います。

            
            $ curl -sS https://raw.githubusercontent.com/[ユーザー名]/[レポジトリ名]/[ブランチ名]/[ファイルまでのパス]
        
ついでにcurlのオプションですが、-sはサイレントモードでレスポンスに余計なコマンド出力を抑制します。

また
-Sはサイレントモードの時に、エラーが起こるとそのエラー内容を表示するオプションです。詳しくはman curlで確認ください。

では実際に試してみましょう。

具体例として、弊社のオープンレポジトリにおいた昨年の1月からの日経平均データを
1001.csvとしてアップロードしておきますので、以下のコマンドをお手元でターミナルから入力してみると、

            
            $ curl -sS https://raw.githubusercontent.com/tacoskingdom/commonBlogMaterial/main/deep-tacopots/1001.csv
2020-01-06,23319,23365,23148,23205,1219710000
2020-01-07,23320,23577,23299,23576,1157950000
#....
2021-03-22,29444,29472,29107,29174,1384260000
        
という生のcsvレスポンスが返ってくるはずです。

なお、この日足データの書式は
日付,始値,高値,低値,終値,出来高です。


Jqでレスポンスの整形処理

jqは軽量なJSON編集用プログラムで、シェル標準のコマンドには入っていないので別途インストールする必要がありますが、ほとんどのOSで動作します。

jq インストールでウェブ検索すると様々なOSでのインストール方法が引っかかると思いますのでここではインストール手順の話は省略します。

以前、jqによるcsvからjsonへの変換のコツとして以下のリンクの記事で考え方のポイントを解説していました。

念の為、もう一度jqでのcsvからjsonへの変換のスクリプトを振り返ってみると、

            
            $ cat [csv形式のテキスト] | jq -sR '
#👇配列化のために[...]でラップ
[
    #👇改行位置でテキストを分割し、分割した要素で配列に変換
    split("\n")[]
    #👇要素が空文字の場合には除外
    | select(length > 0)
    #👇要素のテキストをさらにコンマ切りで配列に変換
    | split(",")
]
#👇mapで配列の要素(の配列)をjson要素に変換
| map({"A": .[0], "B": .[1], "C": .[2]})
'
        
というような配列化とmapメソッドを上手く組み合わせることでjson化していました。

このテクニックを利用して先程のcsvファイルもjsonオブジェクトの配列にしてみます。

            
            $ curl -sS https://raw.githubusercontent.com/tacoskingdom/commonBlogMaterial/main/deep-tacopots/1001.csv | jq -sR '
    [ split("\n")[] | select(length > 0) | split(",") ]
    | map({"日付": .[0], "初値": .[1], "高値": .[2], "低値": .[3], "終値": .[4], "出来高": .[5]})
'
#👇出力
[
#...中略
  {
    "日付": "2021-03-22",
    "初値": "29444",
    "高値": "29472",
    "低値": "29107",
    "終値": "29174",
    "出来高": "1384260000"
  }
]
        
のように利用しやすいjson形式に変換することができるようになりました。


まとめ

今回はcsvデータをgithubに管理・アクセスしやすく録り溜めておけるようにしておきたい場合に活用できるcurl+jqの組み合わせコマンドのもっとも単純なレポジトリへのGETのやり方を解説してみました。

curlとjqを前段に噛ませることで、javascriptのネイティブアプリやnodejsコマンドなどにも引数や保存したjsonファイルなどで利用できやすくなったと思います。

今後はもっと株式テクニカル分析などの応用的な使いこなしを題材に取り上げてみたいと思います。
記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。