ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [이것저것] 토이프로젝트 유튜브 API 적용기 (검색 기능 구현)
    이것저것 2023. 11. 24. 21:07

    현재 My SQL과 Next.js를 활용한 웹사이트를 제작하고 있다

     

    회원가입, 로그인, 게시판 기능에 그치기 아쉬워서

    컨셉을 만들고 글쓰기 기능에 영상 검색하고 추가할 수 있는

    기능을 구현하기로 결심했다

     

    음악 관련 웹사이트라 spotify API를 사용하려 하다가

    google 로그인 구현하기 위해 프로젝트를 생성해둔 겸

    youtube API를 사용하기로 했다

    (추후 음악 재생 앱을 만들게 된다면 spotify API를 사용하는 걸로..!)

     

    새로운 것을 사용하려면 공식문서와 친해져야 하기에

    열심히 읽고 postman 날려보며 적용했다

     

     

    1. 프로젝트 생성하기

     

    https://developers.google.com/youtube/v3/getting-started?hl=ko

     

    YouTube Data API 개요  |  Google for Developers

    이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English YouTube Data API 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 소개 이 문서는 YouTube

    developers.google.com

     

    위 공식문서의 절차에 따라 프로젝트를 생성하고 API키를 발급받는다

     

     

    2. 검색 데이터 가져오기

     

    참조 링크

    https://developers.google.com/youtube/v3/docs/search/list?hl=ko

     

    Search: list  |  YouTube Data API  |  Google for Developers

    이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English Search: list 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. API 요청에 지정된 쿼리 매개변

    developers.google.com

     

    우측 창 아래에 Show Code 클릭하면 아래 창이 뜬다

     

    https://youtube.googleapis.com/youtube/v3/search?part=snippet&maxResults="출력할 최대 개수"&q="검색할데이터"&key=[발급받은 API키]

    위 주소를 사용하면 되고 기타 필요한 옵션은 추가하면 된다

     

     

    Postman으로 데이터를 확인해보니 정상적으로 동작되는 걸 확인하였다

    사심 가득 담은 데이터

     

    확인은 했으니 본격적으로 출력하기 위해 axios를 활용하여 데이터를 불러왔다

     

    검색 데이터를 입력하는 값에 useState 변수를 담아줘서 검색할 수 있도록 만들었다

    콘솔로 확인하니 데이터가 정상적으로 출력되었다

    최대 개수를 25개로 해놔서 25개의 데이터가 출력되었다

     

    💡 마주했던 문제들과 배운 것

     

    1. env 키 에러

    next.js에서 .env 파일에서 환경 변수를 사용할 시

    해당 환경 변수를 클라이언트 측에서 접근할 수 있게 하려면

    변수 이름 앞에 NEXT_PUBLIC_ 을 붙여야 하는데 

    그냥 YOUTUBE_APIKEY로 작성해서 키를 읽지 못했다

     

    next.config.js 파일에서

    env 파일에 사용한 변수명을 넣어주니 간단하게 해결되었다

     

    /** @type {import('next').NextConfig} */
    const nextConfig = {

    env:{
     
    YOUTUBE_APIKEY: process.env.YOUTUBE_APIKEY,
    },
     

    }

    module.exports = nextConfig

     

     

    2. HTML 문자열 파싱

    검색한 데이터를 변수로 담아 데이터 출력에 성공했지만 문제가 생겼다

    바로 아래 사진과 같이 중간 중간에 ' 등 HTML 엔터티 코드들이 섞여있는 채로 

    데이터가 출력되었다

     

     

     

    아래 사진처럼 콘솔창에도 에러가 떴다

     

    다행히 검색 기능을 구현하며 디코딩했던 경험이 있어 

    간단히 해결할 수 있었다

    const Data = new DOMParser().parseFromString(e.snippet.title, 'text/html').body.textContent;

     

     

    위 코드로 HTML 문자열을 파싱하여 제목 데이터를 출력하니 깔끔하게 출력되었다

     

    3. 타입 지정

    문제는 아니었지만  이전에는 타입스크립트가 아직 미숙한 편이라

    타입 지정하면서 일일이 지정해주었다

    이번에 API데이터의 구조가 좀 복잡해서 일일이 지정하주는 게 비효율적이라는 생각이 들었다

    좀 더 효율적인 방법이 있을까 하다 Record 타입을 처음 적용해보았다

     

    여러 특정한 속성을 가진 객체를 정의하는 데 편리하게 사용할 수 있을 것 같다!

     

     

    결과물

    짠!

     

    꾸미니 그럴 듯 해진 모습이다

    이 출력된 데이터 정보를 My SQL 필드에 추가하고 글 상세페이지에 추가하면 될 것 같다

     

    기능적인 부분은 거의 할 것이 없지만

    상세페이지에 출력할 때 UI가 가장 고민이다🧐

     

    열심히 고민해봐야겠다

     

     

     

    끝!

     

     

Designed by Tistory.