KTR推しBLOG

Nim言語を使ってWebスクレイピングを行う方法を試す その2

2023-11-22

Nim言語の使い方を調べていく中で試した内容についてメモ書きを残しておきます。

前回は気象庁のAPIから天気の情報を取得してみましたが、データの加工が大変そうだなぁと思って他のものを探してみました。
探している中で「天気予報 API(livedoor 天気互換)」というものを作られている方がおり、使い方も公式ページにわかりやすく記載されていたので使用させてもらいました。

簡単にソースコードを書いて出力を確認してみます。

import std/[httpClient, htmlParser, xmltree, strutils]
import json

# 天気予報 API(livedoor 天気互換)
let site = "https://weather.tsukumijima.net/api/forecast/city/130010"
var client = newHttpClient()
let response = client.getContent(site)
let jsonData = response.parseJson
echo jsonData["title"]
echo jsonData["forecasts"][0]

実行します。一部、そのままだと見にくいので整形してみます。

"東京都 東京 の天気"
{
  "date": "2023-11-22",
  "dateLabel": "今日",
  "telop": "晴時々曇",
  "detail": {
    "weather": "晴れ 朝晩 くもり",
    "wind": "北の風 後 南の風",
    "wave": "0.5メート ル"
  },
  "temperature": {
    "min": {
      "celsius": "8",
      "fahrenheit": "46.4"
    },
    "max": {
      "celsius": "19",
      "fahrenheit": "66.2"
    }
  },
  "chanceOfRain": {
    "T00_06": "10%",
    "T06_12": "0%",
    "T12_18": "0%",
    "T18_24": "10%"
  },
  "image": {
    "title": "晴時々曇",
    "url": "https://www.jma.go.jp/bosai/forecast/img/101.svg",
    "width": 80,
    "height": 60
  }
}

このくらいの情報まで整形された状態で取得することが可能であればだいぶ必要な情報が絞れていると思いますので何かで活用していきたいところですね。参考に記載していますが、ソースコードも公開してくれているので何かあった時は自分でサーバーを立てることも可能ではあります。

参考