こんにちは、むらさめです。さて今回から実際にプログラムのソースコードを書いていろいろ試していきたいと思います。
第1回目はWebAPIを使い天気予報サービスから予報のデータを取得するプログラムを作成してみようと思います。プログラミング言語はPythonです。
目次
WebAPIとは
Web APIとはあるサイトが備えている機能を、外部からも利用できるように公開するためのインタフェースです。
多くのWeb APIにはHTTP通信が利用されます。クライアントのプログラムはAPIを提供しているサーバーに対してHTTPリクエストを送信します。
呼び出し側が挙動や入力データを指定する引数は、URLパラメータなどの形でURLの一部として指定します。するとサーバーはクライアントにXMLやJSON形式の返信をします。
天気予報API
今回はこちらの天気予報 API(livedoor 天気互換)を使用させて頂きました。
weather.tsukumijima.net
事前に登録などをせず利用できるとても便利なWebAPIになっています。
実際にAPIを使用する際は、注意事項を良く読んだ上でご利用ください。
APIから情報を取得するソースコード
今回作成したソースコードは以下の通りです。
import urllib.request
import urllib.parse
#天気予報APIのエントリーポイント
API = "https://weather.tsukumijima.net/api/forecast"
#パラメータを定義
paramValue = {
#名古屋のIDを指定
'city': '230010'
}
#パラメータをURLエンコードする
params = urllib.parse.urlencode(paramValue)
#リクエスト用のURL生成
url = API + "?" + params
print("url = ", url)
#データをリクエスト
data = urllib.request.urlopen(url).read()
#取得したバイナリデータをUTF-8にエンコード
text = data.decode("utf-8")
#テキストとして表示
print(text)
5行目: 今回使用するWebAPIのエントリーポイントとなるURLを指定しています。 8行目: APIにリクエストを送信する際に使用するパラメータです。 天気予報APIでは取得したい予報データのエリアを指定します。今回は名古屋のIDを設定してみました。パラメータが複数ある場合には、続けて指定します。 14行目: 辞書型パラメータをurllib.parseモジュールを使ってURLエンコードします。 17行目: リクエスト用URLを生成します。 21行目: 17行目で生成したURLを使用してリソースを取得し、read()メソッドでデータを読み出します。 24行目: 取得したデータはバイナリとなりますので、UTF-8にエンコードします。
取得結果
先ほどPythonで記述したプログラムを実行し、以下のような天気予報データが取得できました。データはJSON形式となります。
{
"publicTime": "2021-12-11T17:00:00+09:00",
"publicTimeFormatted": "2021/12/11 17:00:00",
"publishingOffice": "名古屋地方気象台",
"title": "愛知県 名古屋 の天気",
"link": "https://www.jma.go.jp/bosai/forecast/#area_type=offices&area_code=230000",
"description": {
"publicTime": "2021-12-11T16:33:00+09:00",
"publicTimeFormatted": "2021/12/11 16:33:00",
"headlineText": "",
"bodyText": " 本州付近は、大陸の高気圧に覆われています。\n\n 東海地方は、晴れまたは曇りとなっています。\n\n 11日の東海地方は、高気圧に覆われて晴れますが、気圧の谷や湿った空気の影響で雲の広がる所
があるでしょう。\n\n 12日の東海地方は、高気圧に覆われて晴れる所もありますが、前線や湿った空気の影響で雲が広がりやすく、夕方から雨や雪の降る所がある見込みです。",
"text": "\n\n 本州付近は、大陸の高気圧に覆われています。\n\n 東海地方は、晴れまたは曇りとなっています。\n\n 11日の東海地方は、高気圧に覆われて晴れますが、気圧の谷や湿った空気の影響で雲の広がる所
があるでしょう。\n\n 12日の東海地方は、高気圧に覆われて晴れる所もありますが、前線や湿った空気の影響で雲が広がりやすく、夕方から雨や雪の降る所がある見込みです。"
},
"forecasts": [
{
"date": "2021-12-11",
"dateLabel": "今日",
"telop": "晴のち曇",
"detail": {
"weather": "晴れ 夜遅く くもり",
"wind": "北西の風 後 西の風",
"wave": "0.5メートル"
},
"temperature": {
"min": {
"celsius": null,
"fahrenheit": null
},
"max": {
"celsius": null,
"fahrenheit": null
}
},
"chanceOfRain": {
"T00_06": "--%",
"T06_12": "--%",
"T12_18": "--%",
"T18_24": "0%"
},
"image": {
"title": "晴のち曇",
"url": "https://www.jma.go.jp/bosai/forecast/img/110.svg",
"width": 80,
"height": 60
}
},
{
"date": "2021-12-12",
"dateLabel": "明日",
"telop": "曇時々晴",
"detail": {
"weather": "くもり 昼前 まで 時々 晴れ 所により 夜 雨",
"wind": "北の風 後 北西の風 海上 では 後 北西の風 やや強く",
"wave": "0.5メートル"
},
"temperature": {
"min": {
"celsius": "6",
"fahrenheit": "42.8"
},
"max": {
"celsius": "16",
"fahrenheit": "60.8"
}
},
"chanceOfRain": {
"T00_06": "0%",
"T06_12": "0%",
"T12_18": "10%",
"T18_24": "20%"
},
"image": {
"title": "曇時々晴",
"url": "https://www.jma.go.jp/bosai/forecast/img/201.svg",
"width": 80,
"height": 60
}
},
{
"date": "2021-12-13",
"dateLabel": "明後日",
"telop": "晴時々曇",
"detail": {
"weather": "晴れ 時々 くもり",
"wind": "北西の風",
"wave": "1メートル"
},
"temperature": {
"min": {
"celsius": "3",
"fahrenheit": "37.4"
},
"max": {
"celsius": "11",
"fahrenheit": "51.8"
}
},
"chanceOfRain": {
"T00_06": "10%",
"T06_12": "10%",
"T12_18": "10%",
"T18_24": "10%"
},
"image": {
"title": "晴時々曇",
"url": "https://www.jma.go.jp/bosai/forecast/img/101.svg",
"width": 80,
"height": 60
}
}
],
"location": {
"area": "中部",
"prefecture": "愛知県",
"district": "西部",
"city": "名古屋"
},
"copyright": {
"title": "(C) 天気予報 API(livedoor 天気互換)",
"link": "https://weather.tsukumijima.net/",
"image": {
"title": "天気予報 API(livedoor 天気互換)",
"link": "https://weather.tsukumijima.net/",
"url": "https://weather.tsukumijima.net/logo.png",
"width": 120,
"height": 120
},
"provider": [
{
"link": "https://www.jma.go.jp/jma/",
"name": "気象庁 Japan Meteorological Agency",
"note": "気象庁 HP にて配信されている天気予報を JSON データへ編集しています。"
}
]
}
}
まとめ
いかがだったでしょうか?
今回はPythonを使ってWeb上のデータを取得するプログラムの作成例をご紹介しました。
WebAPIを使用すると、様々なWebサービスから欲しい情報を利用できるようになります。
JSONのデータ形式についてはまた別の記事で書きたいと思います。
それでは、また次の記事でお会いしましょう。
コメント