✅ 이번시간에는 네이버 검색 API에 대해서 알아볼 예정이야.
이 글을 작성하는 네이버 검색 API를 사용하는데 생각보다 오랜시간이 걸렸어서 ㅠㅠ 다시금 정리해보고자 하는 목적!
(목차)
1. 네이버 API 발급받아서 세팅하기
2. 내 프로젝트에 적용하기 (+ Codable 쉽게 만드는 법)
✅ 1. 네이버 API 발급받아서 세팅하기
https://developers.naver.com/docs/search/news/
위에 보이는 사이트에 들어가서 API 발급신청을 하면 끝
이후로는 네이버에서 안내해주는대로 하면 신청은 끝!
다음은 내 애플리케이션 개요 부분으로 이동하여 Client ID 및 Client Secret 정도가 있다는 것을 우선 확인하자.
API Playground로 이동하면, API 요청시 어떤 형태로 내려오는지 미리 확인할 수 있어서, Codable을 작성할 때 크게 도움이 된다.
물론, postman이나 다른 방법으로도 가능하겠지만 나는 이게 제일 편함!
✅ 2. 내 프로젝트에 적용하기
1️⃣ Codable를 활용하여 구조체 만들기
🔸Codable 쉽게 만드는 사이트 : https://app.quicktype.io/
사이트에 접속하여 APIplayground에 나온 json 형태의 파일을 넣어주면 간편하게 만들어줘서 유용하다.
//DetailModel.swift
import Foundation
// 네이버 뉴스 API 호출 메소드
class dataManager {
static let shared : dataManager = dataManager()
var searchResult : Welcome?
private init() {
}
}
// MARK: - Welcome
struct Welcome: Codable {
let lastBuildDate: String
let total, start, display: Int
let items: [Item]
}
// MARK: - Item
struct Item: Codable {
let title: String
let originallink: String
let link: String
let itemDescription, pubDate: String
enum CodingKeys: String, CodingKey {
case title, originallink, link
case itemDescription = "description"
case pubDate
}
}
위의 코드는 사이트를 이용하여 코더블을 간단히 만든 것!
dataManager는 싱글톤 형태로 사용하기 위한 것이다.
//LoadSEARCHnewsAPI.swift
import Foundation
import UIKit
class LoadSEARCHnewsAPI {
static var shared = LoadSEARCHnewsAPI()
let jsconDecoder: JSONDecoder = JSONDecoder()
func urlTaskDone() {
let item = dataManager.shared.searchResult?.items[0]
print(item)
}
func requestAPIToNaver(queryValue: String) {
let clientID: String = your Client ID
let clientKEY: String = your Client Secret
let query: String = "https://openapi.naver.com/v1/search/news.json?query=\(queryValue)"
let encodedQuery: String = query.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!
let queryURL: URL = URL(string: encodedQuery)!
var requestURL = URLRequest(url: queryURL)
requestURL.addValue(clientID, forHTTPHeaderField: "X-Naver-Client-Id")
requestURL.addValue(clientKEY, forHTTPHeaderField: "X-Naver-Client-Secret")
let task = URLSession.shared.dataTask(with: requestURL) { data, response, error in
guard error == nil else { print(error); return }
guard let data = data else { print(error); return }
do {
let searchInfo: Welcome = try self.jsconDecoder.decode(Welcome.self, from: data)
dataManager.shared.searchResult = searchInfo
self.urlTaskDone()
} catch {
print(fatalError())
}
}
task.resume()
}
}
이렇게 작성하면 된다. 저기 코드에서 클라이언트 아이디와 시크릿만 네이버에서 발급받은 자신만의 키를 사용하자!
기존 파싱과 달랐던 점은, 헤더 부분에 클라이언트 id와 시크릿을 넣어주어야해서 이걸 어떻게 처리해야할지 많이 고민했었는데, 이번 시간을 통해 새로운 메소드를 알아갈 수 있었다.
이렇게 선언 후, 우리가 호출하고자 하는 함수에서
SEARCHAPICALL.requestAPIToNaver(queryValue: "대한민국")
작성하면 정상적으로 호출이 완료되어 배열에 담기게 되고
dataManager.shared.searchResult?.items
이렇게 호출하여 우리는 사용할 수 있다.
'deprecated > 코로나 알림(project-ios)' 카테고리의 다른 글
[iOS14] Swift5 alertDialog 함수로 만들어 사용하기 (0) | 2021.08.04 |
---|---|
[iOS14] ♋️ SplashView를 활용해 Alert 발생하기 (0) | 2021.08.02 |
[iOS14] 백그라운드에서 특정 시간 로컬 알림보내기 (0) | 2021.07.29 |
String HTMLTag 지우기 (정규표현식) (1) | 2021.07.29 |
Swift XML Parsing (OpenAPI) (0) | 2021.07.21 |