公開APIを使って、コマンドラインから JSON形式のデータを取得してみる
よく訓練されたアップル信者、都元です。昨日は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。今日そんなに涼しいか?
ということで本日はこのへんで。