728x90
django 네이버 api활용하기
https://developers.naver.com/docs/search/book/
네이버에 올라와있는 예제 코드
# 네이버 검색 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
'기타 > Django & Web' 카테고리의 다른 글
[django] 조회수 기능 구현 (0) | 2021.09.01 |
---|---|
[django/오류] CSRF verification failed. Request aborted (0) | 2021.09.01 |
[ Django ] 네이버 API 활용하기 (0) | 2021.08.23 |
[bootstap] bootstrap card align horizontal (0) | 2021.08.05 |
[django] OperationalError at[] no such table: [] (0) | 2021.08.05 |