Help us understand the problem. What is going on with this article?

KotlinでAPI入門

はじめに

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形式のデータを扱う際にはこのようになるので,注意が必要だ.

おわりに

以上で,今回の記事とする.
もう少し細かく解説したほうが良いと思われる部分や修正したほうが良い部分もあると思うので,教えていただけるとありがたい.

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away