おそらくそれは平凡な日々

思ったことを書いたり好きな雑貨を紹介する自由帳。

環境省が提供している暑さ指数(WBGT)をGAS(Google App Script)で取得してみたメモ

最近、GAS(Google App Script)を使うのにハマっています。

趣味的な部分もあるのですが、取得したデータをDiscordに飛ばすということで業務的な意味合いも込めて色々と作っています。

今回、今年の夏に向けて熱中症関係のデータを取得してDiscordに飛ばせないかなと思っていたところ、環境省が暑さ指数(WBGT)を提供していることを知りました。

www.wbgt.env.go.jp

今回はこの環境省が提供しているWBGTを取得してみたメモです。

(実際の運用は今年の4月22日からなのでまだ提供前ですが、過去データを取得しています。)

 

環境省が提供しているWBGTは「速報値」と「予報」の2種類あるらしく両方取得してみました。データを取得してそれをスプレッドシートに書き出すものです。

いずれもデータとしてはcsvで提供されているらしく、都道府県単位や地域毎に取得できたりといろいろあるみたいなのですが今回は、地域を絞って取得してみます。

 

「速報値」は1ヶ月分のデータを丸ごと配布されているので、それを現在の日付でソートしてシートに書き込むようにしました。

ただし今回はデバッグ用として去年度の8月のデータを読み込んでみました。

 

const WBGT_CONFIG = {
  WBGT_JIKKYOU_SHEET: `WBGT_sokuhou`,
  WBGT_YOHOU_SHEET: `WBGT_yohou`,
  POINT_CODE: "44132", //東京
  START_ROW: 1,
  START_COLUMM: 1,
};

// WBGT実況値
function importWBGTJikkyouCsvtoSheet() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(WBGT_CONFIG.WBGT_JIKKYOU_SHEET);
  const date = new Date();
  const year = date.getFullYear();
  const month = ("0" + (date.getMonth() + 1)).slice(-2);
//const year = "2025" //debug
//const month = "08" //debug const yearMonth = year + month; const url = "https://www.wbgt.env.go.jp/est15WG/dl/wbgt_" + WBGT_CONFIG.POINT_CODE + "_" + yearMonth + ".csv"; try{ //const todayStr = "2025/8/5"; const todayStr = date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + date.getDate(); Logger.log("抽出日付:" + todayStr); const response = UrlFetchApp.fetch(url); const csvText = response.getContentText("UTF-8"); const values = Utilities.parseCsv(csvText); const filterValues = []; if(values.length > 0){ filterValues.push(values[0]); for (var i = 0; i < values.length; i++){ var rowDate = values[i][0]; if (rowDate == todayStr){ filterValues.push(values[i]); } } if(filterValues.length > 1){ sheet.clearContents(); sheet.getRange(WBGT_CONFIG.START_ROW,WBGT_CONFIG.START_COLUMM,filterValues.length,filterValues[0].length).setValues(filterValues); } else { Logger.log("WBGT実況値:指定した日付を取得できませんでした。"); throw e; } Logger.log("WBGT実況値:データ抽出・取得成功"); return filterValues; } else{ Logger.log("WBGT実況値:データが空でした。"); throw e; } `` } catch (e) { Logger.log("WBGT実況値:サービスエラー:" + e.message); throw e; } }

取得してみるとこんな感じ。1時間毎にWBGTの実況値が出てきてますね。

(値が確定済みなので全部格納されてますが)

 

「予報値」は直近3日間予報みたいな感じで取得出来るみたいです。これは日付とか日程は特に指定できず取得した時点で値が変わるみたい。

データ自体もこちらも地域データ毎に取得できるので地域別に。そしてデータの格納方法も違うのでその値を見やすい感じにして、せっかくなので警戒レベル、厳重注意、危険レベルと分けて表示することにしました。

//WBGT 予報値
function importWBGTYohouCsvtoSheet(){
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(WBGT_CONFIG.WBGT_YOHOU_SHEET);
  const url = "https://www.wbgt.env.go.jp/prev15WG/dl/yohou_" + WBGT_CONFIG.POINT_CODE + ".csv";

  try{
    Logger.log("抽出都市:" + WBGT_CONFIG.POINT_CODE);
    const response = UrlFetchApp.fetch(url);
    const csvText = response.getContentText("UTF-8");
    const values = Utilities.parseCsv(csvText);

    if(values.length > 0){
      const chartData = [["日時","WBGT予報値","警戒(25)","厳重警戒(28)","危険(31)"]];
      const headers = values[0];
      const rowData = values[1];

      for(var i = 2; i < headers.length; i++){
        const datetimeStr = headers[i] ? headers[i].trim() : "";
        const valStr = rowData[i] ? rowData[i].trim() : "";

        if(datetimeStr === "" || valStr === "") continue;

        const wbgtVal = parseFloat(valStr)/10;

        if(datetimeStr.length === 10){
          const month = parseInt(datetimeStr.substring(4,6),10);
          const day = parseInt(datetimeStr.substring(6,8),10);
          const hour = parseInt(datetimeStr.substring(8,10),10);
          const timelabel = month + "/" + day + "/" + hour + "時";
          chartData.push([timelabel,wbgtVal,25,28,31]);
        }
      }
      sheet.getRange(WBGT_CONFIG.START_ROW,WBGT_CONFIG.START_COLUMM,chartData.length,5).setValues(chartData);
      Logger.log("WBGT予報値:データ抽出・取得完了");
      return chartData;
    } else {
      Logger.log("WBGT予報値:データが空でした。");
      throw e;
    }
  } catch(e){
    Logger.log("WBGT予報値:サービスエラー:" + e.message);
    throw e;
  }
}

 

いい感じにうまくいきました。

あとは実際の運用が開始されたタイミングで運用してみて動くかどうかみるだけですね。

 

 



ChatGPTに記事を書かせると本当に収益アップするのか

ChatGPTで荒稼ぎ?本当にそんなに簡単なのか

最近、やたらめったら「ChatGPTでブログを自動化して荒稼ぎ!」とか「AIでラクして収益化!」みたいな記事をよく目にする。確かに、AIの進化で文章作成が格段に楽になったのは事実。でも、実際にそれで稼ぐには、単なる自動化だけではなく、価値のある情報や個性を加える工夫が必要なんじゃないかと思う。

たとえば、AIに丸投げして適当に記事を量産したとして、それが本当に人の心を動かす内容になるだろうか?

検索エンジンが評価するのは、結局のところ「読者にとって有益なコンテンツ」だ。

単に情報を並べただけでは、読まれもしないし、収益化どころかアクセスすら伸びない可能性が高い。

そう考えると、AIをうまく活用するには「どうやって自分らしい視点を加えるか」がポイントになりそうだ。

AIに下書きを作らせ、それをベースに自分の考えを肉付けする。あるいは、AIに質問を投げかけながらアイデアを膨らませていく。

そういった工夫をすることで、単なる自動生成記事ではなく、価値のあるコンテンツを生み出せるかもしれない。

 

…という文章をChatGPTに書かせてみたんだけどどう?

収益アップするかな?実は中の人もAIだったりして。