見出し画像

【GASでIoT】「お天気インジゲータ」の作成(その2)天気情報のGoogleスプレッドシートへの取り込み設定

WEB上の天気予報情報をベースに、シンプルに傘が必要かをLEDで表示する「お天気インジゲータ」の解説&作成方法をご説明します。まずはサーバー側である、GoogleスプレッドシートとGAS(Google Apps Script)の準備手順からご説明します。

今回の記事は、その内のGoogleスプレッドシートの準備の説明です。

実機が関わる場合は様々な理由により、この説明通りにいかない場合がしばしばあります。申し訳ありませんが、自己責任・自己解決でお進めくださるよう、お願いいたします。

WEB上の天気予報情報をGoogleスプレッドシートのImportHTML()関数によって取り込む

Googleスプレッドシートには、エクセルには無い、さまざまなWEB情報の取り込み関数があり、今回、天気情報の取り込みにこの関数の1つを利用する事にしました。

利用する関数は ImportHTML()という関数で、URLを指定すると、そのURLで読み込めるHTMLページにある様々な情報をスプレッドシートに転記します。

使い方は以下です。

=ImportHTML(①URL、②要素の指定、③何番目か指定)

①URLを指定。直接記入する場合は引用符(”)で囲みます。
tableか、listを指定。記入する場合は引用符(”)で囲みます。前者ならテーブル要素、後者ならリスト要素を取り込みます。
③対象のHTMLページの何番目のテーブル要素/リスト要素かを数字で指定します。

天気情報は、WEBページ上で概ねテーブル要素内で書かれているため、③はtableを選ぶと良いと思います。

Googleスプレッドシートのセルにこの関数を入力すると、そのセルを起点にして、下側/右側に向かって、URLで参照したテーブルやリスト内の情報が展開されます。

画像1

参照元のWEBページが変わっても自動更新されるため、一度設定しておくと常に最新の情報が得られる一方、得たい情報が記載されたセルが勝手に変わってしまうリスクがあります。

参照したいWEBページを探しだし、この関数を使ってGoogleスプレッドシート上にページの情報を展開し、必要な天気情報がどこかのセルに文字として表記される様にします。

天気情報は文字で得られる情報にしてください。画像などではその後の判断処理が難しくなります。

スプレッドシート上に展開された情報のどこに必要な情報が記載されるかは、トライ&エラーで試してみるしかありません。場合によっては曜日や予報情報によってセルの位置がずれる事もあるので、注意が必要です。


(注意)ImportHTML()関数による情報利用には注意が必要~

個人利用に限定して自己責任でお願いします~

ここで少し、ImportHTML()関数 についての注意点を申し上げます。

この関数が行う、WEBページからので情報抽出は、一般にスクレイピングと呼ばれます。

スクレイピング行為そのものは、あまり大手を振って行うものではありません。参照するWEBページは、特に明記していない限り、本来はブラウザから読者に見てもらうために作られています。ページの作成者は、そうした行為を通じて何等かのメリット(広告表示させたり)を得ている場合もあるからです。

スクレイピングを明確に禁止しているページは、参照しない様にしましょう。また、あくまで個人利用に徹して、商用利用などは慎む様にお願いします。

ページによっては、動的にレイアウトが変わり、スクレイピング結果が意図しないものに変わるものもあります。こういった点も含めて自己責任で利用する様にしましょう。

スクレイピングによる情報利用が気持ち悪いと思われる場合は、公式に情報利用するための仕掛け(API)が配信されている天気予報サイトもありますので、そちらを利用する事を検討してみてください。

情報をAPIで配信している有名なサイトとしては、OpenWeatherMap という海外のサイトなどがあります。無料で世界中の天気情報をAPIとして配信しています。

https://openweathermap.org/

この情報の利用をご紹介する事も考えたのですが、国内の天気情報と微妙にずれており採用しませんでした。利用方法については、OpenWeatherMapで検索すると、沢山解説サイトがヒットすると思いますので、参考にしてください。


取り込み用のスプレッドシートの例をご紹介


それでは、天気情報の取り込み用のスプレッドシートをご紹介します。特に難しい事はしていませんので、ここでの紹介はあくまで例示だとお考えください。

以下のエクセルのシートをダウンロードして、Googleスプレッドシートにインポートしてください。

ウィルススキャンは掛けてますが、読者の皆さんも十分注意してください。万一何等かのセキュリティ上の警告がでた場合は取り込まずにGoogleスプレッドシートを直接編集するなどの対応をお願いします。また、ご利用は自己責任でお願いします。

取り込みは、Googleスプレッドシートを開いて、〔ファイル〕メニューから〔インポート〕を選ぶとできます。

スプレッドシートに取り込んだら、まず、見出しが「天気情報」となっているか確認してください。

そして、参考にしたい情報が掲載されているWEBページを探し、A2セル(一番上にある黄色いセル)にページのURLを入力します。

画像2
スプレッドシートの左上

おすすめのURLなどの言及は今回避けました。問題ないと思われるWEBページを検索して何度か試して決めてください。また、前述のスクレイピングに関するモラルをどうぞよろしくお願いいたします。

次に、30行目付近に白い文字で入っている「=IMPORTtHTML()」関数の、頭にある「 ’ (シングル引用符)」を削除して、通常の関数として入力された状態にしてください。

スプレッドシートの30行目付近、テキストを関数に修正

エクセルではエラーとなるため、取り込み時はテキストとして入っています。

インターネットにアクセスできる状態であれば、水色になったエリアに取り込み先のWEBページの情報がスクレイピングされるはずです。

参考にするセルを決める

得たい情報がどこかに入っていたでしょうか? 得たい情報が入ったセルを1つ決めたら(ここではB32セルとしました)、5行目付近にある、黄色いセル部に参照したいセルの行と列を入力してください。

黄色部にセル番地を記入し、採用情報を表示させる

すると、上の画像の右側にある様に、採用する情報が表示されます。(上の例では「晴」という文字です)

最後に確認です。8行目付近には、採用情報に含まれる文字と数値の対応を記入しています。

  • 「雨」が含まれていれば「100」を「指数」欄に表示

  • 「雪」が含まれていれば「100」を「指数」欄に表示

  • 「曇」が含まれていれば「0」を「指数」欄に表示

  • 「判定(MAX)」欄には、「指数」の最大値を表示

採用情報に雨、雪、曇が含まれていないので、判定0となっている

この対応は、黄色い部分を編集する事で各自アレンジ可能です。
今回は、傘が必要な場合(雨か雪)は判定蘭に「100」が、必要性が半々の場合(曇)は「10」が、それ以外なら「0」が出る様に設定しています。

お気づきかもしれませんが、ラズベリーパイ側では、100なら「赤」、10なら「黄」、それ以外なら「緑」を点灯させる事を狙っています。

さて、こうしてスプレッドシートにお天気の判定値を表す事ができました。次の記事では、外部からアクセスして、この判定値を得るために、GAS(
Google Apps Script)を用意します。


この記事が気に入ったらサポートをしてみませんか?