*동영상 강의에서는 네이버 개발자센터 – 지역 검색 API를 사용합니다. *
안녕하세요. 언휴예요.
이미 네이버 개발자센터의 Open API 서비스를 이용하는 방법을 간략하게 알아보았어요. 그런데 앞에서는 단순히 질의한 전체 결과를 아무런 작업도 하지 않은 채 바로 화면에 출력하기만 했죠. 실제 프로그래밍에서는 목적에 맞게 데이터를 가공하는 작업이 필요할 거예요.
이번 프로그램에서는 json을 이용하여 원하는 항목을 추출할 거예요. 이를 위해 json을 import하세요.
#import import urllib.request import json
앞에서 도서 검색 API를 사용했던 부분을 함수로 변경하였습니다. 그리고 검색할 도서 제목은 입력 인자로 전달받게 수정했어요.
def searchbook(title): #애플리케이션 클라이언트 id 및 secret client_id = "[자신의 클라이언트 ID]" client_secret = "[자신의 클라이언트 secret]" #도서검색 url url = "https://openapi.naver.com/v1/search/book.json" option = "&display=3&sort=count" query = "?query="+urllib.parse.quote(title) url_query = url + query + option #Open API 검색 요청 개체 설정 request = urllib.request.Request(url_query) request.add_header("X-Naver-Client-Id",client_id) request.add_header("X-Naver-Client-Secret",client_secret)
response.read() 결과를 utf-8로 디코딩하여 결과를 반환할게요.
#검색 요청 및 처리 response = urllib.request.urlopen(request) rescode = response.getcode() if(rescode == 200): return response.read().decode('utf-8') else: return None
검색 결과 항목(도서) 정보를 출력하는 함수를 구현합시다. json에서는 특정 항목을 인덱서를 통해 접근할 수 있어요. 이를 이용하여 제목, 설명, 사이트 주소를 출력하세요.
#검색 결과 항목 정보 출력하기 def showitem(item): print("제목:"+item['title']) print("설명:"+item['description']) print("url:"+item['link']) print("================")
이번에는 프로그램 진입점도 함수로 정의할게요.
#프로그램 진입점 def main():
먼저 사용자가 입력한 질의를 입력 인자로 도서 검색을 요청합니다.
#검색 질의 요청 res = searchbook(input("질의:")) if(res == None): print("검색 실패!!!") exit()
도서 검색을 요청한 결과를 입력 인자로 json.loads를 호출하세요.
#검색 결과를 json개체로 로딩 jres = json.loads(res) if(jres == None): print("json.loads 실패!!!") exit()
for문을 이용하여 json 결과에 도서 항목들의 부모인 items를 인덱서를 사용하여 각 도서 항목을 post로 접근합니다. 그리고 앞에서 정의한 항목 출력하는 showitem 함수를 호출합니다.
#검색 결과의 items 목록의 각 항목(post)을 출력 for post in jres['items']: showitem(post)
#진입점 함수를 main으로 지정 if __name__ == '__main__': main()
다음은 전체 코드 및 실행화면입니다.
#제목: 도서 검색 API 활용하여 도서 정보 출력 #import import urllib.request import json def searchbook(title): #애플리케이션 클라이언트 id 및 secret client_id = "[자신의 client id]" client_secret = "[자신의 client secret]" #도서검색 url url = "https://openapi.naver.com/v1/search/book.json" option = "&display=3&sort=count" query = "?query="+urllib.parse.quote(title) url_query = url + query + option #Open API 검색 요청 개체 설정 request = urllib.request.Request(url_query) request.add_header("X-Naver-Client-Id",client_id) request.add_header("X-Naver-Client-Secret",client_secret) #검색 요청 및 처리 response = urllib.request.urlopen(request) rescode = response.getcode() if(rescode == 200): return response.read().decode('utf-8') else: return None #검색 결과 항목 정보 출력하기 def showitem(item): print("제목:"+item['title']) print("설명:"+item['description']) print("url:"+item['link']) print("================") #프로그램 진입점 def main(): #검색 질의 요청 res = searchbook(input("질의:")) if(res == None): print("검색 실패!!!") exit() #검색 결과를 json개체로 로딩 jres = json.loads(res) if(jres == None): print("json.loads 실패!!!") exit() #검색 결과의 items 목록의 각 항목(post)을 출력 for post in jres['items']: showitem(post) #진입점 함수를 main으로 지정 if __name__ == '__main__': main()