この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
よく訓練されたアップル信者、都元です。昨日はJSONについてさらっと解説してみました。今日は、公開APIからデータをJSONで取り出してみましょう。
まず本稿の内容を実際に試してみる場合の前提条件を。
- OSはMacOSXであること。
- Homebrewを導入済みであること。 → まだの場合はここを見てインストールしておきましょう。
- ターミナル(コマンドライン)操作に拒絶反応がないこと。
まぁ、最後の問題さえクリアしてみれば、Linuxでもどうにかなるかもしれませんが、いろいろ自分で乗り越える必要があります。
ipifyで自分のグローバルIPアドレスを取る
さて、最初は最も簡単な例で。自分がインターネット上のサーバに対してアクセスするときのグローバルIPアドレスを取得するipifyというAPIがあります。
ターミナル(コマンドライン)を開いて、下記のコマンド *1を実行してください。-sオプションは、コンテンツ以外の余計な表示を抑制するオプションです。
$ curl -s https://api.ipify.org?format=json
すると下記のようなJSONが帰ってきたでしょうか。これがあなたの現在のグローバルIPアドレスです。
{"ip":"203.0.113.236"}
簡単過ぎましたね。
OpenWeatherMapから天気情報を取る
続いてもう少し複雑な例です。OpenWeatherMapというサービスとAPIがあります。これで、東京の天気情報を取り出してみましょう。
$ curl -s http://api.openweathermap.org/data/2.5/weather?q=Tokyo,jp
この結果がこれ。
{"coord":{"lon":139.69,"lat":35.69},"sys":{"message":1.7314,"country":"JP","sunrise":1432841263,"sunset":1432892970},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}],"base":"stations","main":{"temp":295.299,"temp_min":295.299,"temp_max":295.299,"pressure":1019.03,"sea_level":1023.72,"grnd_level":1019.03,"humidity":81},"wind":{"speed":6.18,"deg":39.5005},"clouds":{"all":92},"rain":{"3h":0.18},"dt":1432875909,"id":1850147,"name":"Tokyo","cod":200}
おおおっ…。と思いつつ、ちょっとした絶望感ありますね。人間には正直読みづらい。
jq
ここでjqコマンドの出番です。以前このブログでもご紹介したことがあります。ざっくり言うと、JSONを見やすく整形したり、特定の部分だけを切り出して表示してくれたりするツールです。
まずはインストール。Homebrewで一発です。
$ brew install jq
$ jq --version
jq-1.4
この状態で、JSONを吐き出すコマンドの後に、 | jq .を付与すれば、JSONに適切なインデントと改行がつきます。
$ curl -s http://api.openweathermap.org/data/2.5/weather?q=Tokyo,jp | jq .
{
"coord": {
"lon": 139.69,
"lat": 35.69
},
"sys": {
"message": 1.7314,
"country": "JP",
"sunrise": 1432841263,
"sunset": 1432892970
},
"weather": [
{
"id": 500,
"main": "Rain",
"description": "light rain",
"icon": "10d"
}
],
"base": "stations",
"main": {
"temp": 295.299,
"temp_min": 295.299,
"temp_max": 295.299,
"pressure": 1019.03,
"sea_level": 1023.72,
"grnd_level": 1019.03,
"humidity": 81
},
"wind": {
"speed": 6.18,
"deg": 39.5005
},
"clouds": {
"all": 92
},
"rain": {
"3h": 0.18
},
"dt": 1432875909,
"id": 1850147,
"name": "Tokyo",
"cod": 200
}
おおお! 緯度経度、日の出日の入り時刻 *2、そして本日はRainですね。雨。気温295.299…、というのはどうやらケルビン(絶対零度)表示のようです。なので、ここから273.15を引きましょう。22.149。今日そんなに涼しいか?
ということで本日はこのへんで。