저번 포스트에서 간단하게 open api를 사용해 보았다. 이번 포스트에서는 검색한 결과값만 보여주게 view를 수정해보겠다.
저번 포스트에서는 기본 url에 인증키를 포함시켰다.
url = "http://api.koreafilm.or.kr/openapi-data2/wisenut/search_api/search_json2.jsp?collection=kmdb_new2&ServiceKey=인증키"
하지만 이렇게 하면 git에 올릴 때 인증키가 유출되는 위험이 있다. SECRET_KEY, DATABASE 설정과 같이 파일을 분리해주도록 하겠다.
settings.py 파일이 있는 곳에 my_settings.py를 만든다.
my_settings.py
SECRET_KEY = 'secret_key'
DATABASES = {
'default':
{'ENGINE': 'django.db.backends.postgresql',
'NAME': 'movie_api',
'USER': 'root',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '5432', }
}
SERVICE_KEY = url = "service_key"
movie/views.py
ServiceKey = my_settings.SERVICE_KEY
url = "http://api.koreafilm.or.kr/openapi-data2/wisenut/search_api/search_json2.jsp?collection=kmdb_new2"\
+ "&ServiceKey=" + ServiceKey
위와 같이 수정해준다.
movie/views.py
@csrf_exempt
@api_view(['POST'])
def search_movie(request):
print(request.data['title'])
ServiceKey = my_settings.SERVICE_KEY
title = urllib.parse.quote(request.data['title'])
url = "http://api.koreafilm.or.kr/openapi-data2/wisenut/search_api/search_json2.jsp?collection=kmdb_new2" \
+ "&ServiceKey=" + ServiceKey + "&query=" + title
request = urllib.request.Request(url)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if rescode == 200:
response_body = response.read()
dict = json.loads(response_body.decode('utf-8'))
return Response(dict, status=status.HTTP_200_OK)
else:
return Response(rescode, status=status.HTTP_400_BAD_REQUEST)
movie/urls.py
urlpatterns = [
path('search/', views.search_movie),
]
postman으로 요청하면 응답이 잘 오는 것을 확인할 수 있다.
! 부제목이 있는 경우에는 아래와 같이 형식 오류가 난다.