はじめに
KotlinでAPIを叩いたことないので,叩いてみた.
これからいろんなAPI叩いてみたいので練習した時の記録とAPIの簡単な解説.
用語について
API
API(Application Programming Interface)とは,企業や団体等が公開し,機能を使用可能としているシステムのことである.
ネットワークを介して利用可能であり,プログラムの一部として取り込むことによって個人だけでは実現不可能なシステムの生成が可能となる.
例として,今回取り上げるOpenWeatherMapがあり,世界中の様々な天気や温度,湿度等を取得することができるため,システム単体で実現不可能な天気を表示することが可能となる.
Json
Json(JavaScript Object Notation)は,オブジェクトと呼ばれるデータ形式であり,機械が判別できるように作られたデータの扱い方だ.
よくわからないが,簡単に言うと配列の番号部分(array[0]やらarray[1]やら)を番号ではなく,文字(array["id"]やらarray[name])で扱うことができるデータ形式だ.
Json形式のデータの例を見てみよう.
{
"id" : "123456789",
"name" : "SoraY677",
"favorite" : ["game" , "sleeping" , "programing"]
}
このようなデータ形式となる.例えば「id」を呼び出せば,「123456789」を得ることができる.
このデータの左側(id,name,favorite)をkeyといい,右側(123456789,SoraY677,["game" , "sleeping" , "programing"])をvalueという.
keyとvalueは1対1になっているが,valueが配列であったり,さらにJson形式のデータであるため注意が必要だ.
早速叩いてみよう
APIキーの取得
APIを叩く時の基本事項だが,APIの仕組みをしておく必要がある.
APIはWebで公開されているものなので,APIを叩く際にはサイトにアクセスするときと同様にURLが必要になる.また,APIの種類にもよるが,APIを叩く際にはAPIキーと呼ばれるAPIを叩くための許可が必要になる場合がある.
試しにOpenWeatherMapでのAPIの取得を行ってみる.
- サイトにアクセスし,上部のバナーからまずはログイン(ない場合はアカウント作成)を行う.
- ログインできたらバナーの「API」をクリックし,API一覧のサイトに移動する.
- 一覧から「Current weather data」の「Subscribe」を選択し,料金表の中からFree枠の「Get API key and start」を選択すると,APIの叩き方の案内が出てくる.これに従い,APIを叩こうと思う.
- 上部バナーのsign inボタンを押し,メニューから「API Keys」を選択する.すると,APIキーの作成画面が出てくると思うので,createkeyの入力部分にAPIキーの名前を入力(任意)し,APIキーを作成することができる.
こうすることで,APIキーを作成できる.
開発
必要となるライブラリ
ここまで来て伝えるのは心苦しいが,JavaやKotlinはもともとJson形式のデータを簡単に処理することができない.そのため,外部ライブラリが必要となる.
このサイトからFilesという項目からbundleをクリックし,jarファイルをダウンロードして展開しておく.
続いて,IntelilJを起動し,Kotlinでプロジェクトを作成する.
リボンから「File」->「Project Structure」->「Libraries」と移動し,+ボタンで先ほど展開しておいたjarファイルを指定する.
こうすることで,Jsonファイルの取り扱いが可能となる.
コーディング
では,コーディングを行っていこう.
import java.io.BufferedReader
import java.io.InputStreamReader
import java.net.URL
import org.json.JSONObject
fun main(args: Array<String>) {
//APIキー
val API_KEY = "[APIキー]"
//都市のID(横浜)
val CITY_ID = 1848354
//アクセスする際のURL
val API_URL = "http://api.openweathermap.org/data/2.5/forecast?" +
"id=" + CITY_ID + "&" +
"APPID=" + API_KEY
var url = URL(API_URL)
//APIから情報を取得する.
var br = BufferedReader(InputStreamReader(url.openStream()))
//json形式のデータとして識別
var json = JSONObject(br)
//cityのキーに対応するvalueを表示する.
println(json.get("city"))
}
どうだろう?かなり簡単にAPIを叩くこと自体はできただろう.
「val API_KEY = "[API_KEY]"」の[API_KEY]の部分に対して先ほど取得したAPIキーが入る.またAPPIDに取得したい都市のIDを入れることで,最終的にAPI_URLでURLを算出し,APIを叩いているという仕組みだ.
json.get("city") が実際にJson形式のデータに対してkeyを指定し,valueを得ている部分だ.実際にJson形式のデータを扱う際にはこのようになるので,注意が必要だ.
おわりに
以上で,今回の記事とする.
もう少し細かく解説したほうが良いと思われる部分や修正したほうが良い部分もあると思うので,教えていただけるとありがたい.