Daeng iOS

[iOS/UIKit] 네이버 검색 API 연동 (영화) 본문

IOS/UIKit

[iOS/UIKit] 네이버 검색 API 연동 (영화)

U_Daeng 2022. 10. 24. 00:55

 

검색 API와 영화 검색 을 참고하여 작성하였다!

개요

- 검색 API는 네이버 검색 결과를 뉴스, 백과사전, 블로그, 영화 등 분야별로 볼 수 있는 API이다.

- 영화 검색은 검색 API를 사용해 네이버 검색의 영화 검색 결과를 반환하는 RESTful API로, 영화 검색 결과를 XML형식 또는 JSON 형식으로 반환한다.(API를 호출할 때는 검색어와 검색 조건을 쿼리 스트링 형식의 데이터로 전달)

- 영화 검색은 검색 API를 사용하며, 검색 API의 하루 호출 한도는 25,000회 이다.

특징

- 검색 API는 비로그인 방식 오픈 API로, 네이터 오픈 API를 호출할 때 HTTP 요청 헤더에 클라이언트 아이디와 클라이언트 시크릿 값만 전송해 사용할 수 있는 오픈 API이다.

네이버 개발자 센터 에서 애플리케이션을 등록하면 클라이언트 아이디와 클라이언트 시크릿 값을 발급받을 수 있으며, 그것들은 네이버 오픈 API에서 인증된 사용자인지 확인하는 수단으로 이용된다.

1. (사전 준비) 클라이언트 아이디, 시크릿 값 발급 

위 네이버 개발자 센터에서

Products > 서비스 API > 검색 을 들어가서 아래에 '오픈 API 이용 신청'을 들어가서 발급받는다

필요한 정보를 입력하여 등록하면 클라이언트 아이디와 시크릿 값을 발급받을 수 있다 

2. 포스트맨 서버 네트워킹 확인 

HTTP통신을 하기 전에 포스트맨을 통해서 서버가 네트워킹이 잘 되는지 확인해본다 

Headers에 위에서 발급 받은 클라이언트 아이디와 시크릿 값을 추가한다

Params에는 검색할 쿼리 스트링을 추가한다

 

네트워킹에 성공하면 다음과 같은 결과가 나온다!

만약 오류가 뜬다면 맨 처음 첨부한 NAVER Developers 의 오류코드를 참고하자!!

3. JSON -> struct

api통신 응답을 프로젝트에 적용시키려면 JSON 응답 형태를 struct로 바꿔줘야 한다.

이땐 Quicktype을 이용한다!

오른쪽에 나오는 struct 코드를 프로젝트에 사용하면 된다!

 

4. HTTP 통신 

서버에서 JSON 형식의 데이터를 받아오려면 HTTP 통신을 해야하는데, HTTP 통신 라이브러리인 Alamofire를 이용한다! 

나는 라이브러리를 다운받기 위한 패키지 관리자인 cocoaPod 을 이용해서 Alamofire를 설치했다

요청하는 코드 ("~" 의 ~부분에는 위에서 발급 받은 키를 입력한다.)

class ResponseRequest{
    func getData(_ viewController: ViewController, keyword: String){
        let url = "https://openapi.naver.com/v1/search/movie.json?"
        let params: Parameters = ["query": keyword]
        AF.request(url, method: .get, parameters: params, headers: ["X-Naver-Client-Id" : "~", "X-Naver-Client-Secret" : "~"]).responseDecodable(of: Welcome.self){
            response in
            switch response.result{
            case .success(let response):
                viewController.didSuccess(response)
                print("성공")
            case .failure(let error):
                print(error)
                print("실패")
            }
            
        }
    }
}
var search = searchBar.text!
ResponseRequest().getData(self, keyword: search ?? "")

HTTP 통신 하는 코드들은 다른 글에서 한번에 정리할 것!!!