天気予報のテキストの挿入について

  1. 以下のようなcurlとsedによるシェルスクリプトを外部コマンドに登録しています。

    ~ $ cat /usr/local/bin/tenki
    #!/bin/sh
    # 横浜市の天気
    echo $(curl -s https://tenki.jp/forecast/3/17/4610/14100/ | sed -n '
    /forecast-announce-datetime/{s/<[^>]*>/ /g;p};
    /"today-weather"/{s/.*/今日/;p};
    /"tomorrow-weather"/{s/.*/明日/;p};
    /"weather-telop"/{s/<[^>]*>//g;p};
    /"high-temp temp"/{n;s/[^0-9]//g;s/^/最高/;s/$/°C/;p};
    /"low-temp temp"/{n;s/[^0-9]//g;s/^/最低/;s/$/°C/;p}
    ')
    
    ~ $ tenki
    横浜市の天気 15日21:00発表 今日 晴時々曇 最高33°C 最低26°C 明日 晴時々曇 最高34°C 最低26°C
    

    このような処理をMeryのマクロで行うにはどうしたらよいでしょうか。

     |  enaka  |  返信
  2. 現在の気温と区の天気を拾えるように改良してみた。

    ~ $ cat /usr/local/bin/tenki
    #!/bin/sh
    # 横浜市港北区の天気
    echo $(curl -s https://tenki.jp/forecast/3/17/4610/14109/ | sed -n '
    /forecast-announce-datetime/{s/<[^>]*>/ /g;p};
    /"today-weather"/{s/.*/今日/;p};
    /"tomorrow-weather"/{s/.*/明日/;p};
    /"weather-telop"/{s/<[^>]*>//g;p};
    /"high-temp temp"/{n;s/[^0-9]//g;s/\(.*\)/最高\1°C/;p};
    /"low-temp temp"/{n;s/[^0-9]//g;s/\(.*\)/最低\1°C/;p}
    /"rain-temp-btn"/{s/<[^>]*>//g;s/.(.*)//g;s/ *\(.*\)/現在\1°C/;p};
    ')
    
    ~ $ tenki
    横浜市港北区の天気 16日19:00発表 今日 雨のち晴 最高35°C 最低27°C 明日 曇一時雨 最高31°C 最低27°C 現在30.3°C
    
     |  enaka  |  返信
  3. Mery のマクロでは、shell.Exec メソッドを使用して外部コマンドを実行し、その標準出力を取得できます。

    たとえば、curl を実行して HTML を取得し、JavaScript の正規表現で必要な情報を抽出すれば、sed と同様の処理を実現できます。

    #language = "quickjs"
    var exec = shell.Exec("curl -s https://tenki.jp/forecast/3/17/4610/14100/");
    var html = exec.StdOut;
    
    // 正規表現で必要な情報を抽出して挿入
    ...
    

    もちろん、Windows 版の sed がインストールされていれば、JavaScript を使わずに curl | sed のようなコマンドをそのまま実行することもできます。

    一方で、curl を使いたくない場合は、V8 マクロで fetch を使用して HTML を取得することも可能です。

    どの方法が適しているかは用途によって異なりますので、どのようなマクロを作成したいのか、もう少し具体的に教えていただければ、お力になれるかもしれません。

     |  Kuro  |  返信
スポンサーリンク