카카오 API를 통해 웹 이미지 검색 하기
설명
이번에 다음 API가 카카오 API와 통합하면서 웹 검색 방식이 변경 되었습니다. 다음 웹 검색 방식이 조금 옛날 버전이라 프로젝트를 진행하면서 warning 때문에 스트레스 아닌 스트레스를 받았었는데,, 카카오로 넘어오면서 warning이 없어지면서 속이 다 시원합니다. (물론 제가 제대로 못해서 있었던 warning이었겠지만요..)
이번에 카카오 API 넘어오면서 Get 방식으로 변경 되었습니다.
일단 밑에 카카오 디벨로퍼 링크를 통해 들어가셔서 회원가입 후 로그인을 해주고 내 애플리케이션에 들어가면 앱을 만들고 4개의 키(네이티브 앱, REST API 키, JavaScript키, Admin 키)를 얻을 수 있습니다.
KakaoDevelopers_
웹 이미지 검색에서 필요한 키는 REST API키 입니다. 나머지 키는 SDK나 웹에서 사용 하시면 됩니다.
사용환경
포스팅 시점에서 iOS11 버전이 발표 되긴 했지만 아직 베타테스트여서 Swift3.x 버전을 사용 하도록 하겠습니다.
* Swift3.x * Xcode 8.3.3
Get 방식이기 때문에 유명한 라이브러리인 Alamofire를 사용하도록 하겠습니다. 설치 방법은 밑에 Alamofire github를 참고 하시면 됩니다.
Alamofire github
소스코드
// 주소 관련입니다. 키워드 부분에 원하는 검색어를 적어주시면 됩니다. let keywordWebLink = "https://dapi.kakao.com/v2/search/image?query=키워드" // 한글이 포함된 주소는 작동 하지 않기 때문에 urlQueryAlll 옵션을 사용해서 인코딩을 해줍니다. let searchLink = str_temp.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)! // Alamofire를 통해서 값을 받아옵니다. // 헤더부분에서 "Authorization" 항목에 REST API 키를 넣어 주셔야됩니다. 여기서 주의 할점은 앞에 "KakaoAK" 키워드는 필수 입니다. Alamofire.request(str_search, method: .get, encoding: JSONEncoding.prettyPrinted, headers: ["Authorization": "KakaoAK your REST API KEY"]) .responseJSON{ response in switch response.result { case .success(let json): // 검색에 성공을 하면 검색 결과가 json으로 넘어 옵니다. 이 값을 통해 원하는 화면을 표시 하면됩니다. print(jsont) case .failure(let error): // 검색에 실패할 경우 error 메세지와 함께 넘어옵니다. print("Request failed with error: \(error)") DispatchQueue.main.async { print(message: "검색 도중에 에러가 발생했습니다.") } } }
요청을 할 때 사용할수 있는 파라메타 입니다. query부분은 필수이고 나머지는 옵션입니다. 필요한 부분이 있다면 위에 keywordWebLink 뒤에 &sort=accuracy 이런식으로 연달아 붙여서 사용 하시면 됩니다.
키 | 설명 | 필수 | 타입 |
---|---|---|---|
query | 검색을 원하는 질의어 | O | String |
sort | 결과 문서 정렬 방식 | X(accuracy) | accuracy(정확도순) or recency(최신순) |
page | 결과 페이지 번호 | X(기본 1) | 1-50 사이 Integer |
size | 한 페이지에 보여질 문서의 개수 | X(80) | 1-80 사이 Integer |
검색을 요청을 했을 때 넘어오는 값의 종류 입니다. meta 데이터와 document 데이터로 구성 되어있습니다.
meta 데이터
키 | 설명 | 타입 |
---|---|---|
total_count | 검색어에 검색된 문서수 | Integer |
pageable_count | total_count 중에 노출가능 문서수 | Integer |
is_end | 현재 페이지가 마지막 페이지인지 여부. 값이 false이면 page를 증가시켜 다음 페이지를 요청할 수 있음. | Boolean |
document 데이터
키 | 설명 | 타입 |
---|---|---|
collection | 컬렉션 | String |
thumbnail_url | 이미지 썸네일 URL | String |
image_url | 이미지 URL | String |
width | 이미지의 가로 크기 | Integer |
height | 이미지의 세로 크기 | Integer |
display_sitename | 출처명 | String |
doc_url | 문서 URL | String |
datetime | 문서 작성시간. ISO 8601. [YYYY]-[MM]-[DD]T[hh]:[mm]:[ss].000+[tz] | String |
마치며
다음 API에서 아직 종료 되지 않은 서비스 이지만 그래도 결국은 통폐합을 통해 종료될거 같아서 제 프로젝트에 적용 할겸 포스팅을 했습니다. 방식 자체가 어렵지는 않지만 생각보다 헤매는 부분이 있어서 이렇게 포스팅을 합니다. 다른 검색 API도 이런식으로 접근 하시면 쉽게 활용 하실 수 있을꺼 같습니다. 틀린점이나 잘못된 점이 있다면 알려주시면 수정하도록 하겠습니다. :)
'iOS 프로그래밍 > iOS' 카테고리의 다른 글
iOS) iOS 런처이미지 사이즈표 (0) | 2017.10.26 |
---|---|
iOS) EUC-KR 인코딩 하기 (1) | 2017.09.18 |
iOS) UIAlertController-ActionSheet (0) | 2017.07.26 |
iOS) UIAlertController - alert (0) | 2017.07.11 |
iOS)UIActivityViewController (0) | 2017.06.15 |