Open13

Rust で天気予報正答率比較サイト作る

SENKENSENKEN

要件定義

  • 天気予報の正答率を記録 & 表示したい
    • 気象庁の過去データを正とする
    • 他サイトとの比較も行う
    • 天気(Must)、気温、湿度など
    • 予想日時が伸びるにつれて正答率がどのくらい変化するかも調べたい
  • サイトの公開/非公開:非公開
    • 他のサイトとの比較をしたいため、その時著作権に引っかかるのであくまでも私的利用とする

技術選定

SENKENSENKEN

過去の気象データ
https://www.data.jma.go.jp/risk/obsdl/index.php

このリクエストでJSONデータを取得できる
https://www.data.jma.go.jp/gmd/risk/obsdl/show/table.html

curl 'https://www.data.jma.go.jp/gmd/risk/obsdl/show/table.html' \
  -H 'Accept: text/html, */*; q=0.01' \
  -H 'Accept-Language: ja,en-US;q=0.9,en;q=0.8,jv;q=0.7' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
  -H 'Cookie: AWSALB=+XfkRzeU4WCNn5fHYOpAhNWlkjGJoOIoLcZbvzH8YX0Xwp8kvofDm99R18enskL5oQA0IhORMXbNTw2NkFw+d4VtZnNX2lKo0223rw4pocKlNQIwLLc5j59GbfS9; AWSALBCORS=+XfkRzeU4WCNn5fHYOpAhNWlkjGJoOIoLcZbvzH8YX0Xwp8kvofDm99R18enskL5oQA0IhORMXbNTw2NkFw+d4VtZnNX2lKo0223rw4pocKlNQIwLLc5j59GbfS9' \
  -H 'Origin: https://www.data.jma.go.jp' \
  -H 'Referer: https://www.data.jma.go.jp/risk/obsdl/index.php' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: same-origin' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36' \
  -H 'X-Requested-With: XMLHttpRequest' \
  -H 'sec-ch-ua: "Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "Linux"' \
  --data-raw 'stationNumList=%5B%22s47662%22%5D&aggrgPeriod=9&elementNumList=%5B%5B%22703%22%2C%22%22%5D%2C%5B%22201%22%2C%22%22%5D%5D&interAnnualFlag=1&ymdList=%5B%222024%22%2C%222024%22%2C%2210%22%2C%2210%22%2C%2229%22%2C%2230%22%5D&optionNumList=%5B%5D&rmkFlag=1&disconnectFlag=1&kijiFlag=0&huukouFlag=0&youbiFlag=0&fukenFlag=0&jikantaiFlag=1&jikantaiList=%5B1%2C24%5D&PHPSESSID=a436q0otl6omcndji1je4pqj83'

これ、リクエストパラメータにCSRFのための PHPSESSID が入ってて単純な curl だと厳しそうだな、、、

SENKENSENKEN

デプロイ先に shuttle いいかなと思ったけど、ファーストデプロイに5分くらいかかったな、、こんなもんか?
api gw + lambda でやってみるか
cloud run にしてみよう。コンテナサービスバンザイ(aws でも fargete + ecs でできるかもしれんけどたかそうなので一旦やめる)

SENKENSENKEN

とりあえず ¥1 で予算アラート設定しといた

SENKENSENKEN

そのまま進めるだけで結構簡単にデプロイできた

SENKENSENKEN

supabase, s3 に csv おいて duckdb でもええやん感が出てきてわかんなくなってきたので一旦クライアント側を作る

react でいい感じに棒グラフを作れるものを探す