こんにちは。
今回は前回からちょっと趣を変えてみました。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

キーの取得まで行います。
※「天気予報を取得する」から先は進まないように
OpenWeatherMapのAPIで天気情報を取得する
GAS側で使うのはいつも通り
- UrlFetchApp.fetch
- [Object].getContentText()
のゴールデンコンビです。ホント便利。
今回は埼玉県の川越の天気用法にアクセスしてみようと思います。(city_id:1859740)
都市のリストはこちらからダウンロードできます。
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); }
こちら。
さて、そんなコードで出てきたデータが……こちら。
ここからどうやってデータを取り出しましょうかね、といったところで次回へ続く。
今年も一年、お世話になりました。
来年もどうぞよろしくお願いいたします。
コメント