Retrofit을 이용한 공공데이터 API 사용.
코로나 백신 예방 접종 통계 API
https://www.data.go.kr/index.do
공공데이터활용지원센터_코로나19 예방접종 통계 데이터 조회 서비스의 API를 사용해 봅시다.
API로 받아올 데이터 모델 파악.
object DataClass {
data class VaccineBody(
@SerializedName("currentCount") val currentCount: Int, // 현재 검색된 데이터 수
@SerializedName("data") val data: List<Vaccine>, // 백신 현황 데이터
@SerializedName("matchCount") val matchCount: Int, // 검색과 일치하는 데이터 수
@SerializedName("page") val page: Int, // 데이터 페이지
@SerializedName("perPage") val perPage: Int, // 한번에 불러올 데이터
@SerializedName("totalCount") val totalCount: Int // 데이터 전체 개수
) {
override fun toString(): String {
return "$data\n\n" +
"currentCount : $currentCount\n" +
"matchCount : $matchCount\n" +
"page : $page\n" +
"perPage : $perPage\n" +
"totalCount : $totalCount"
}
}
data class Vaccine(
@SerializedName("accumulatedFirstCnt") val accumulatedFirstCnt: Int, // 전일까지의 누적 통계 1차
@SerializedName("accumulatedSecondCnt") val accumulatedSecondCnt: Int, // 전일까지의 누적 통계 2차
@SerializedName("baseDate") val baseDate: String, // 통계 기준일자
@SerializedName("firstCnt") val firstCnt: Int, // 당일 통계 1차
@SerializedName("secondCnt") val secondCnt: Int, // 당일 통계 2차
@SerializedName("sido") val area: String, // 지역명칭
@SerializedName("totalFirstCnt") val totalFirstCnt: Int, // 전체 누적 통계 1차
@SerializedName("totalSecondCnt") val totalSecondCnt: Int // 전체 누적 통계 2차
) {
override fun toString(): String {
return "Vaccine : [\n" +
" accumulatedFirstCnt : ${accumulatedFirstCnt}\n" +
" accumulatedSecondCnt : ${accumulatedSecondCnt}\n" +
" baseDate : ${baseDate}\n" +
" firstCnt : ${firstCnt}\n" +
" secondCnt : ${secondCnt}\n" +
" area : ${area}\n" +
" totalFirstCnt : ${totalFirstCnt}\n" +
" totalSecondCnt : ${totalSecondCnt}]\n\n"
}
}
}
-> 사이트에서 제공되는 데이터 모델을 코드로 구현한 부분입니다.
Rest API 인터페이스 구현
interface ApiService {
@GET("15077756/v1/vaccine-stat")
fun getInfo(
@Query("page") Page: Int,
@Query("perPage") PerPage: Int,
@Query("serviceKey") ServiceKey: String =
"kigiqUVF/dUWrJa3YwQhUztfv7vGj05wsvDBfcXUH39jcHP7AQwYqD9ey4QcqD3FiApVohgsA53YdV9u2EVEmA=="
): Call<DataClass.VaccineBody>
}
Retrofit
object RetrofitObject {
private fun getRetrofit(): Retrofit {
return Retrofit.Builder()
.baseUrl("https://api.odcloud.kr/api/")
.addConverterFactory(GsonConverterFactory.create())
.build()
}
fun getApiService(): ApiService {
return getRetrofit().create(ApiService::class.java)
}
}
Retrofit 사용하는 부분
private fun getVaccineStatus() {
RetrofitObject.getApiService().getInfo(
1, 10
).enqueue(object : Callback<DataClass.VaccineBody> {
override fun onResponse(
call: Call<DataClass.VaccineBody>,
response: Response<DataClass.VaccineBody>
) {
setResponseText(response.code(), response.body())
Toast.makeText(baseContext, "success", Toast.LENGTH_SHORT).show()
}
override fun onFailure(call: Call<DataClass.VaccineBody>, t: Throwable) {
Log.e("retrofit onFailure", "${t.printStackTrace()}")
Toast.makeText(baseContext, "fail", Toast.LENGTH_SHORT).show()
}
})
}