Google Apps Script (GAS) でスクレイピングじゃなくてAPIを使って天気情報ゲット~OpenWeatherMap~

PC

こんにちは。

今回は前回からちょっと趣を変えてみました。Google Apps Script(GAS)は相変わらず使うのですが、今回は

WEBページのスクレイピングではなく、APIを使って色々と遊んでみようかと。

私、結構無精者でして、朝などは天気予報すら見るのを面倒くさがっていたりします。

そんな面倒くさがりのために、毎朝、メールやらを見れば天気予報やニュースがわかる、というところまでいけばとてもよいと思い、色々とやっています。

今回は天気予報を知るべく、天気予報のAPIを使って自分のエリアの天気を知られるよう、色々とやっていきたいというのが始まりです。

天気予報のAPIにも色々とあります。

多分一番使いやすいのではないかと思うのがlivedoorの天気予報API

日本語ですし、使いやすいですし。

しかし今回は「OpenWeatherMap」のAPIを使ってみたいと思います。

livedoorの天気予報はかなり好きなのですが、エリアの区分けがかなり大きいんですよね。

一都道府県につき2~3都市と、全国ニュースの天気予報くらいのエリア分けでしか取れません。

エリアの中間であったり、山一つ越えて向こう側であったりした場合、その天気予報は信用してよいのかわかりづらくなります。

OpenWeatherMapの方がよくわからないマニアックな都市分けをしており、細かいところまで見られそうだったため、今回は使ってみようかと思っています。

今回はAPIとJSONという2つの今まで扱っていなかった技術を使うため、前後編に分けてお送りします。

OpenWeatherMapのAPI使用準備

さて、OpenWeatherMapですが、APIを使うためには「APIキー」というキー文字列が必要です。

これは、無料でOpenWeatherMapのユーザー登録をすれば入手できます。

ただ、無料プランの場合、有効になるまで時間がかかりますので、もし使ってみたい方がいらっしゃるなら、まずはユーザー登録作業を最優先にしてやりましょう。

ユーザー登録とAPIキーについては、以下のサイトがとても分かりやすいです。

無料天気予報APIのOpenWeatherMapを使ってみる|Qiita

無料天気予報APIのOpenWeatherMapを使ってみる - Qiita
# はじめに プログラムから天気予報をとるために、無料で開発者用APIを提供している(を使ってみました。 # 概要 OpenWeatherMapは...

キーの取得まで行います。

※「天気予報を取得する」から先は進まないように

OpenWeatherMapのAPIで天気情報を取得する

GAS側で使うのはいつも通り

  • UrlFetchApp.fetch
  • [Object].getContentText()

のゴールデンコンビです。ホント便利。

今回は埼玉県の川越の天気用法にアクセスしてみようと思います。(city_id:1859740)

都市のリストはこちらからダウンロードできます。

http://bulk.openweathermap.org/sample/city.list.json.gz

OpenWeatherMapのAPIにアクセスする際の間違ったコード

さて、ターゲットのURLですが、上記URLの「天気予報を取得する」から先のコードから適当に推理して

 API_KEY = "************************";//https://home.openweathermap.org/api_keys
BASE_URL = "http://api.openweathermap.org/data/2.5/forecast";
function getJSON_OPENWEATHERMAP(){ var CITY_ID="1859740";
var opt = {"contentType":"application/json;","muteHttpExceptions":true};
var url_gethtml = BASE_URL +"?city="+"+CITY_ID+",jp&APPID=#"+API_KEY;
var data_html = UrlFetchApp.fetch(url_gethtml,opt);
var content_html = data_html.getContentText();
var json = JSON.parse(content_html); } 

などとは、間違っても書かぬようにお願いします。

私はアホみたいにこれをやりまして、丸一日無駄にしております。

アクセス先のURLがそもそも間違っているのですが、上記でコードを組むと「APIキーが間違っている」という恐ろしいエラーメッセージが返ってきます。

そうすると、「まだAPIキーが有効じゃないのかー」と勘違いし、待つ選択をしてしまいます。

OpenWeatherMapのAPIにアクセスする際の正しいコード

正しくは以下のURLにアクセスするようにしましょう(川越の場合。そのほかの都市の場合はidのパラメーターを書き換えてください)。

http://api.openweathermap.org/data/2.5/weather?id=1859740&units=metric&appid=*******************

※appid=******************* の部分に、APIキーを入れるようにします。

そんなわけで、APIからデータを取り出す方法はこちら。

こちら

API_KEY = "**********************************" ;
BASE_URL = "http://api.openweathermap.org/data/2.5/forecast?units=metric&id=";
CITY_ID="1859740";
function getJSON_OPENWEATHERMAP(){ var opt = {"contentType":"application/json;","muteHttpExceptions":true};
var url_gethtml = BASE_URL + CITY_ID+"&APPID="+API_KEY; //html取得
var data_html = UrlFetchApp.fetch(url_gethtml,opt);
var content_html = data_html.getContentText();
var json = JSON.parse(content_html); } 

こちら。

さて、そんなコードで出てきたデータが……こちら。

image

ここからどうやってデータを取り出しましょうかね、といったところで次回へ続く。

今年も一年、お世話になりました。

来年もどうぞよろしくお願いいたします。

コメント