영화진흥위원회 API
https://www.kobis.or.kr/kobisopenapi/homepg/apiservice/searchServiceInfo.do
영화진흥위원회 오픈API
제공서비스 영화관입장권통합전산망이 제공하는 오픈API서비스 모음입니다. 사용 가능한 서비스를 확인하고 서비스별 인터페이스 정보를 조회합니다.
www.kobis.or.kr
영화진흥위원회 오픈API를 이용하면 박스오피스 앱을 만들 때 큰 도움이 된다.
요청

응답

{
"boxOfficeResult": {
"boxofficeType": "일별 박스오피스",
"showRange": "20240501~20240501",
"dailyBoxOfficeList": [
{
"rnum": "1",
"rank": "1",
"rankInten": "0",
"rankOldAndNew": "OLD",
"movieCd": "20228797",
"movieNm": "범죄도시4",
"openDt": "2024-04-24",
"salesAmt": "7173755964",
"salesShare": "84.8",
"salesInten": "3490937394",
"salesChange": "94.8",
"salesAcc": "54743912218",
"audiCnt": "784809",
"audiInten": "394859",
"audiChange": "101.3",
"audiAcc": "5790321",
"scrnCnt": "2702",
"showCnt": "14172"
},
{
"rnum": "2",
"rank": "2",
"rankInten": "0",
"rankOldAndNew": "OLD",
"movieCd": "20236614",
"movieNm": "쿵푸팬더4",
"openDt": "2024-04-10",
"salesAmt": "336923219",
"salesShare": "4.0",
"salesInten": "243213158",
"salesChange": "259.5",
"salesAcc": "13462011584",
"audiCnt": "38600",
"audiInten": "28087",
"audiChange": "267.2",
"audiAcc": "1443199",
"scrnCnt": "600",
"showCnt": "919"
},
{
"rnum": "3",
"rank": "3",
"rankInten": "0",
"rankOldAndNew": "NEW",
"movieCd": "20235613",
"movieNm": "스턴트맨",
"openDt": "2024-05-01",
"salesAmt": "357447723",
"salesShare": "4.2",
"salesInten": "357447723",
"salesChange": "100",
"salesAcc": "660244723",
"audiCnt": "35374",
"audiInten": "35374",
"audiChange": "100",
"audiAcc": "68479",
"scrnCnt": "801",
"showCnt": "2244"
},
{
"rnum": "4",
"rank": "4",
"rankInten": "0",
"rankOldAndNew": "NEW",
"movieCd": "20249313",
"movieNm": "포켓몬스터: 성도지방 이야기, 최종장",
"openDt": "2024-05-01",
"salesAmt": "278724769",
"salesShare": "3.3",
"salesInten": "278724769",
"salesChange": "100",
"salesAcc": "280484769",
"audiCnt": "32927",
"audiInten": "32927",
"audiChange": "100",
"audiAcc": "33087",
"scrnCnt": "658",
"showCnt": "1446"
},
{
"rnum": "5",
"rank": "5",
"rankInten": "0",
"rankOldAndNew": "OLD",
"movieCd": "20231677",
"movieNm": "남은 인생 10년",
"openDt": "2023-05-24",
"salesAmt": "51708205",
"salesShare": "0.6",
"salesInten": "7596913",
"salesChange": "17.2",
"salesAcc": "4382668970",
"audiCnt": "5326",
"audiInten": "812",
"audiChange": "18",
"audiAcc": "430512",
"scrnCnt": "108",
"showCnt": "142"
},
{
"rnum": "6",
"rank": "6",
"rankInten": "-3",
"rankOldAndNew": "OLD",
"movieCd": "20234675",
"movieNm": "파묘",
"openDt": "2024-02-22",
"salesAmt": "39390826",
"salesShare": "0.5",
"salesInten": "-29943572",
"salesChange": "-43.2",
"salesAcc": "114670144872",
"audiCnt": "4251",
"audiInten": "-3157",
"audiChange": "-42.6",
"audiAcc": "11864316",
"scrnCnt": "141",
"showCnt": "183"
},
{
"rnum": "7",
"rank": "7",
"rankInten": "0",
"rankOldAndNew": "NEW",
"movieCd": "20249133",
"movieNm": "극장판 실바니안 패밀리: 프레야의 선물",
"openDt": "2024-05-01",
"salesAmt": "29828450",
"salesShare": "0.4",
"salesInten": "29828450",
"salesChange": "100",
"salesAcc": "34224450",
"audiCnt": "3948",
"audiInten": "3948",
"audiChange": "100",
"audiAcc": "4576",
"scrnCnt": "188",
"showCnt": "280"
},
{
"rnum": "8",
"rank": "8",
"rankInten": "0",
"rankOldAndNew": "NEW",
"movieCd": "20249353",
"movieNm": "꼬마참새 리차드: 신비한 보석 탐험대",
"openDt": "2024-05-01",
"salesAmt": "29553100",
"salesShare": "0.3",
"salesInten": "29553100",
"salesChange": "100",
"salesAcc": "43045400",
"audiCnt": "3851",
"audiInten": "3851",
"audiChange": "100",
"audiAcc": "5305",
"scrnCnt": "154",
"showCnt": "205"
},
{
"rnum": "9",
"rank": "9",
"rankInten": "-5",
"rankOldAndNew": "OLD",
"movieCd": "20249318",
"movieNm": "챌린저스",
"openDt": "2024-04-24",
"salesAmt": "35507320",
"salesShare": "0.4",
"salesInten": "-21340719",
"salesChange": "-37.5",
"salesAcc": "369939305",
"audiCnt": "3612",
"audiInten": "-2457",
"audiChange": "-40.5",
"audiAcc": "39067",
"scrnCnt": "129",
"showCnt": "152"
},
{
"rnum": "10",
"rank": "10",
"rankInten": "-4",
"rankOldAndNew": "OLD",
"movieCd": "20248466",
"movieNm": "고스트버스터즈: 오싹한 뉴욕",
"openDt": "2024-04-17",
"salesAmt": "16081700",
"salesShare": "0.2",
"salesInten": "7039244",
"salesChange": "77.8",
"salesAcc": "416480161",
"audiCnt": "2021",
"audiInten": "866",
"audiChange": "75",
"audiAcc": "44852",
"scrnCnt": "50",
"showCnt": "51"
}
]
}
}
요청을 보내면 이런식으로 응답을 받을 수 있다.
API 요청을 보내려면 먼저 키를 발급받아야 한다. 미리 가입해서 키를 발급받아두자.

JSON 포맷을 보기 쉽게 바꿔주는 사이트를 이용하면 보기 편하다.

Tree 형태를 이용해서 볼 수도 있다.
Instantly parse JSON in any language | quicktype
app.quicktype.io

// This file was generated from JSON Schema using quicktype, do not modify it directly.
// To parse the JSON, add this file to your project and do:
//
// let welcome = try? JSONDecoder().decode(Welcome.self, from: jsonData)
import Foundation
// MARK: - Welcome
struct Welcome: Codable {
let boxOfficeResult: BoxOfficeResult
}
// MARK: - BoxOfficeResult
struct BoxOfficeResult: Codable {
let boxofficeType, showRange: String
let dailyBoxOfficeList: [DailyBoxOfficeList]
}
// MARK: - DailyBoxOfficeList
struct DailyBoxOfficeList: Codable {
let rnum, rank, rankInten: String
let rankOldAndNew: RankOldAndNew
let movieCD, movieNm, openDt, salesAmt: String
let salesShare, salesInten, salesChange, salesAcc: String
let audiCnt, audiInten, audiChange, audiAcc: String
let scrnCnt, showCnt: String
enum CodingKeys: String, CodingKey {
case rnum, rank, rankInten, rankOldAndNew
case movieCD = "movieCd"
case movieNm, openDt, salesAmt, salesShare, salesInten, salesChange, salesAcc, audiCnt, audiInten, audiChange, audiAcc, scrnCnt, showCnt
}
}
enum RankOldAndNew: String, Codable {
case old = "OLD"
}
JSON 포맷을 자동으로 구조체, 클래스로 만들어 주는 사이트를 이용하면 쉽게 구조체, 클래스를 정의할 수 있다.
// To parse the JSON, install Klaxon and do:
//
// val welcome = Welcome.fromJson(jsonString)
package quicktype
import com.beust.klaxon.*
private fun <T> Klaxon.convert(k: kotlin.reflect.KClass<*>, fromJson: (JsonValue) -> T, toJson: (T) -> String, isUnion: Boolean = false) =
this.converter(object: Converter {
@Suppress("UNCHECKED_CAST")
override fun toJson(value: Any) = toJson(value as T)
override fun fromJson(jv: JsonValue) = fromJson(jv) as Any
override fun canConvert(cls: Class<*>) = cls == k.java || (isUnion && cls.superclass == k.java)
})
private val klaxon = Klaxon()
.convert(RankOldAndNew::class, { RankOldAndNew.fromValue(it.string!!) }, { "\"${it.value}\"" })
data class Welcome (
val boxOfficeResult: BoxOfficeResult
) {
public fun toJson() = klaxon.toJsonString(this)
companion object {
public fun fromJson(json: String) = klaxon.parse<Welcome>(json)
}
}
data class BoxOfficeResult (
val boxofficeType: String,
val showRange: String,
val dailyBoxOfficeList: List<DailyBoxOfficeList>
)
data class DailyBoxOfficeList (
val rnum: String,
val rank: String,
val rankInten: String,
val rankOldAndNew: RankOldAndNew,
@Json(name = "movieCd")
val movieCD: String,
val movieNm: String,
val openDt: String,
val salesAmt: String,
val salesShare: String,
val salesInten: String,
val salesChange: String,
val salesAcc: String,
val audiCnt: String,
val audiInten: String,
val audiChange: String,
val audiAcc: String,
val scrnCnt: String,
val showCnt: String
)
enum class RankOldAndNew(val value: String) {
Old("OLD");
companion object {
public fun fromValue(value: String): RankOldAndNew = when (value) {
"OLD" -> Old
else -> throw IllegalArgumentException()
}
}
}
Swift뿐만 아니라 Kotlin 등도 가능하다.
REST API





JSON




여러 개를 나열할 때는 위와 같이 대괄호 []를 이용해서 작성한다.
API


https://data.seoul.go.kr/dataVisual/gallery/galleryList.do
열린데이터광장 메인
데이터분류,데이터검색,데이터활용
data.seoul.go.kr
이렇게 서울시에서 제공하는 API를 활용하여 만든 앱을 확인할 수 있다.
공공데이터 포털
국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase
www.data.go.kr
다른 여러 API가 뭐가 있는지 확인할 수 있다.

XCode

Constraint를 설정하여 위치를 지정할 수 있다. 각 요소마다 어떤 Constraint가 적용되어 있는지 확인해 보았다.

UITableViewCell을 리턴하는 메서드이다.
'공부 > Swift' 카테고리의 다른 글
| [iOS][11주차] 앱 만들기 진행 (0) | 2024.05.16 |
|---|---|
| [iOS][10주차] 박스오피스 앱 만들기 (0) | 2024.05.09 |
| [iOS][7주차] 지난 과정 & 문법 복습 (2) | 2024.04.18 |
| [iOS][6주차] TableView & 간단한 앱 만들기 2 / 다운캐스팅, 옵셔널 (0) | 2024.04.11 |
| [iOS][5주차] Swift 문법 복습 / TableView (0) | 2024.04.04 |