TIL104. Django : Youtube API 검색 간단 API 만들기

ID짱재·2021년 12월 30일
0

Django

목록 보기
40/43
post-thumbnail

📌 이 포스팅에서는 Youtube API를 연동하여 Django에서 Search-Bar API를 구현하는 과정에 대해 정리하였습니다.



🌈 Youtube API 검색 간단 API 만들기

🔥 Youtube API Key 발급 받기

🔥 Youtube API 사용 방법

🔥 Django와 연동하여 API 구현하기



1. Youtube API Key 발급 받기

🤔 새로운 프로젝트를 생성한다.

✔️ Google Cloud Platfrom에 진입(https://console.cloud.google.com/)하여, 새로운 프로젝트를 생성 후 생성한 새로운 프로젝트 선택한다.

✔️ 새로운 프로젝트를 생성하였다면, 검색창에 'youtube data api v3' 검색 뒤, 아래 화면에 나타난다면 "사용"을 클릭한다.

🤔 Key를 발급받는다.

✔️ "사용"을 클릭하면, 오른쪽에 있는 "사용자 인증 정보 만들기" 버튼을 눌러, 사용할 API를 설정해 준다.

✔️ 아래 설정을 한 뒤, "완료" 버튼을 클릭한다.

✔️ Key가 발급된 것을 확인할 수 있습니다. 이를 잘 은폐해두고 Django로 불러와 사용된다.



2. Youtube API 사용 방법

🤔 youtube api 문서 확인하기

✔️ youtube api 문서(https://developers.google.com/youtube/v3/docs)에 들어가면, 유튜브 관련 검색이나 채널 정보를 얻는 등 다양한 api 기능을 지원한다.

✔️ 이 중 search를 클릭하면, youtube 검색 api를 사용할 수 있는 방법이 친절히 설명되어있다.

✔️ 여러가지 parameter 이미 제공되기 때문에 응답값으로 필요한 정보들에 대한 parameter를 설정해주면 된다.

✔️ parameter 중 필수 매개변수인 part 값은 꼭 필요하고, 나머지 parameter는 이를 filter해오기 위한 옵션들이다.

✔️ code로 구현하기 전에 test해보고 싶다면, 맨 아래 Try this API로 실험해보면 된다.

✔️ 참고로 Youtube API는 1회 최대 50개의 데이터를 응답주기 때문에 51번째 데이터부터 추가 요청하고 싶다면, 그 다음 요청부터 pageToken값을 실어 보내줘야 한다.



3. Django와 연동하여 API 구현하기

🤔 Youtube API로 requests 보내기

✔️ 서버에 요청을 보내기 위해서 requests 를 설치한다.

$ pip install requests

✔️ Django 서버로 search 요청이 들어온다면, 해당 keyword를 query parameter에서 추출해 다시 youtube api로 전송하고 이 응답값을 다시 정리해서 프론트로 응답한다.

✔️ 바로 모든 data를 전달해줄 수도있지만, front단에서 필요한 정보만 정리해서 주는게 좋다고 생각했다.

✔️ 여기서 linke_url은 item['id']['videoId'] 값이 영상에 id값이기 때문에 앞에 주소에 붙이면 해당 영상일 바로 실행되지 않을까 생각해봤는데 정말 그랬다. embed를 추가한 것은 영상만 추출하기 위함이고, 이를 붙이지 않는다면 실제 Youtube 화면처럼 댓글이나 추천 영상들이 다 같이 나오는 페이지로 이동된다.

✔️ page값은 front단에서 두번째 요청 시, 서버에 page값을 query parameter로 전달했다면 youtube api에 이를 함께 요청해 그 다음 51번째 data를 받아오게 하기 위함이다.

class SearchContentView(View):
    def get(self, request):
        keyword = request.GET.get('keyword')
        OFFSET  = request.GET.get("page")
        LIMIT   = int(request.GET.get("limit", 50))
        search_url = 'https://www.googleapis.com/youtube/v3/search'
        params = {
            'q'             : keyword,
            'part'          : 'snippet',
            'key'           : settings.YOUTUBE_DATA_API_KEY,
            'regionCode'    : 'KR',
            'order'         : 'relevance',
            'maxResults'    : LIMIT,
            'type'          : 'video',
            'pageToken'     : OFFSET
        }
        data  = requests.get(search_url, params=params).json()
        page  = data['nextPageToken']
        items = data['items']
        result = [
            {
                'link_url'      : 'https://www.youtube.com/embed/'+item['id']['videoId'],
                'title'         : item['snippet']['title'],
                'image_url'     : item['snippet']['thumbnails']['medium']['url'],
                'channel_id'    : item['snippet']['channelId'],
                'channel_title' : item['snippet']['channelTitle'],
                'published_at'  : item['snippet']['publishedAt'],
            } for item in items
        ]
        return JsonResponse({'message': result, 'page' : page}, status=200)
profile
Keep Going, Keep Coding!

0개의 댓글