기타/Django & Web

[django] 네이버 도서 api 이용하기

yujindonut 2021. 9. 1. 18:02
728x90
django 네이버 api활용하기

https://developers.naver.com/docs/search/book/

 

검색 API 책 검색 개발가이드

NAVER Developers - 검색 API 책 검색 개발가이드

developers.naver.com

네이버에 올라와있는 예제 코드

# 네이버 검색 API예제는 블로그를 비롯 전문자료까지 호출방법이 동일하므로 blog검색만 대표로 예제를 올렸습니다.
# 네이버 검색 Open API 예제 - 블로그 검색
import os
import sys
import urllib.request
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
encText = urllib.parse.quote("검색할 단어")
url = "https://openapi.naver.com/v1/search/blog?query=" + encText # json 결과
# url = "https://openapi.naver.com/v1/search/blog.xml?query=" + encText # xml 결과
request = urllib.request.Request(url)
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):
    response_body = response.read()
    print(response_body.decode('utf-8'))
else:
    print("Error Code:" + rescode)

 


urls.py
    path('api_book_search', api_book_search, name='api_book_search'),

 

base.html
<form class="d-flex" action="{% url 'api_book_search' %}" method="GET">
                {% csrf_token %}
                <input name="q" class="form-control me-2" type="search" placeholder="search in naver" aria-label="Search">
                <button class="btn btn-outline-success" type="submit">🔍</button>
</form>

저는 네브바에 넣어주었습니다!


views.py
#book api 
def api_book_search(request):

    if request.method == 'GET':
        # config_secret_debug = json.loads(open(settings.SECRET_DEBUG_FILE).read())
        # client_id = config_secret_debug['NAVER']['CLIENT_ID']
        # client_secret = config_secret_debug['NAVER']['CLIENT_SECRET']

        client_id = ""
        client_secret = ""
        q = request.GET.get('q')
        encText = urllib.parse.quote("{}".format(q))
        url = "https://openapi.naver.com/v1/search/book?query=" + encText  # json 결과
        book_api_request = urllib.request.Request(url)
        book_api_request.add_header("X-Naver-Client-Id",client_id)
        book_api_request.add_header("X-Naver-Client-Secret",client_secret)
        response = urllib.request.urlopen(book_api_request)
        rescode = response.getcode()
        if (rescode == 200):
            response_body = response.read()
            result = json.loads(response_body.decode('utf-8'))
            items = result.get('items')

            context = {
                'items': items
            }
            return render(request, 'api_book_search.html', context=context)
    else:
        return render(request, 'api_book_search.html')

네이버에서 발급받은 id와 secret키는 노출되는게 좋지 않기 때문에 json파일을 따로 만들어 하는 방식을 사용하여야하는데, 저는 오류가 나서 그냥 다 보이게 했습니다..

 

request.GET.get('q')를 통해서 input태그의 정보를 가져왔습니다

 

 

encText = urllib.parse.quote("{}".format(q))

여기 ""안에 처음에는 none이 들어있게 되는데, form에 입력하는 순간 그 정보를 가져와서 form에 입력된 데이터 값이 포함된 제목의 데이터를 가지고 오게 됩니다.

만약 encText = urllib.parse.quote("코로나")이런식으로 사용하면 코로나가 들어간 정보를 가지고 옵니다!


api_book_search.html

{{ items|safe }} : 이스케이프 문자(공백)을 출력하지 않습니다.

 

이런식으로 item안에 이러한 정보가 담겨서 html로 넘어갑니다!


출력결과!

 


 

728x90