본문 바로가기
내가 배운 것들/기타

Youtube Data API v3의 검색 기능 매개변수들

by Zabee52 2021. 12. 17.

Youtube Data API v3

항해99 과정을 하면서 첫 번째 주에 했던 미니 프로젝트가 검색어를 기반으로 한 유튜브 영상 랜덤 재생 사이트 "YoutubeRandomPlayList" 였다. 첫 주 아무것도 모를 때 시행했던 프로젝트라 어떻게든 마무리를 하고 싶은 마음이 있었는데, 여유가 남아 이번 기회에 조금 신경을 써보려고 한다.

 

그래서 먼저 내가 사용하게 될 검색 요청 기능의 데이터 요소들을 적어보려고 한다.

 

내 프로젝트의 주석에 적어놓은 내용이다.

 

     * Youtube Data Api v3 구조 설명
     * -----필수요소-----
     * part : id(영상의 id값) 또는 snippet(영상의 상세정보) 중 무엇을 받아올지 결정(YoutubeSearch.youtubeSearch 메소드 안에 설정해두었습니다.)
     * q : 요청할 쿼리문입니다. 해당 구문을 기준으로 검색 결과가 출력됩니다. this.youtubeSearch()의 파라미터인 String query 가 해당 기능을 수행하고 있습니다.
     *
     * ----수령 데이터 제한----
     * q : 필수요소로, 검색에 사용할 쿼리를 지정합니다.
     * maxResults : 받아올 데이터의 수량을 지정합니다. 데이터의 수령 할당량과 밀접한 연관이 있습니다.
     *              YoutubeSearch.youtubeSearch() 내의 NUMBER_OF_VIDEOS_RETURNED 상수로 지정되어 있습니다.
     *
     * channelId : 지정된 채널Id의 값들만 받아오도록 합니다.
     * order : 쿼리 검색 결과를 어떤 기준으로 시행할지 결정합니다. 기본값은 연관성이 높은 영상으로 설정됩니다.
     *      date : 최근 영상부터
     *      rating : 높은 평가순
     *      relevance : 기본값. 관련 영상으로 호출
     *      title : 제목 문자순(오름차순)
     *      videoCount : 크리에이터가 업로드한 동영상 수를 기준으로
     *      viewCount : 조회수순(내림차순)
     * pageToken : 검색 결과를 받아올 페이지를 설정합니다.
     * publishedAfter : 지정 시간 이후에 업로드된 영상만 검색합니다. 값은 RFC 3339 형식이 지정된 날짜-시간 값(1970-01-01T00:00:00Z)입니다.
     * publishedBefore : 지정 시간 이전에 업로드된 영상만 검색합니다. 값은 RFC 3339 형식이 지정된 날짜-시간 값(1970-01-01T00:00:00Z)입니다.
     * type : 검색 결과의 타입을 지정합니다.
     *      channel : 채널만 찾습니다.
     *      playlist : 재생목록만 찾습니다.
     *      video : 단일 동영상만 찾습니다.
     * ** Q) playlist와 video는 왜 구분하나요? A) 유튜브 플레이어는 재생목록 전용과 단일영상 재생용의 플레이어가 다릅니다. 한 플레이어에서 불러와지지 않기 때문에 이렇게 해야합니다!
     *
     * 프로젝트에서 사용하는 목록들만 작성했습니다.
     *
     * ------결과값------
     * kind : 검색된 영상의 타입입니다. 형식은 youtube#searchListResponse 입니다.
     * nextPageToken : 다음 페이지를 확인할 수 있게 해주는 토큰입니다.
     * prevPageToken : 이전 페이지를 확인할 수 있게 해주는 토큰입니다.
     * pageInfo : 현재 페이지 정보를 나타냅니다.
     * pageInfo.totalResults : 검색 결과의 총 개수를 나타냅니다.
     * pageInfo.resultsPerPage : API 사용의 결과 개수를 나타냅니다.
     * items[] : 검색 기준과 일치하는 결과 목록을 가져옵니다.

Youtube Data API를 이용해 영상을 플레이어에 재생시키려고 할 때 가장 주의해야 할 점은 바로 검색 결과의 타입이다.

중요하니 굵고 빨갛게 적는다. 재생목록과 재생목록이 아닌 영상은 플레이어를 따로 쓴다!

하나처럼 쓰다보니 몰랐던 사실인데, 재생목록을 재생하는 유튜브 플레이어는 단일 영상의 재생 플레이어와의 구분이 명확하게 지어져 있다! 그러니 기능을 정의할 때 이 부분을 고려해서 짜도록 하자.

 

다음은 결과값에 대한 상세 부분이다. 정확히는 결과값 줄 items[] 부분에 대해서 적어보겠다.

검색 결과는 내가 좋아하는 다즈비님으로 했다. 유튜브 좋아요 댓글 구독 알람설정 부탁.

 

DAZBEE official

ダズビーって呼んでください! 2週に一度、20時に歌っています。 Hi I'm Music Creator DAZBEE. I usually sing J-pop cover songs.

www.youtube.com

dazbee 채널 검색 결과

// dazbee 채널 검색 결과
{
  "kind": "youtube#searchListResponse",
  "etag": "7ZB0Tmm9D7WYBipkCQAClWATKT4",
  "nextPageToken": "CAEQAA",
  "regionCode": "KR",
  "pageInfo": {
    "totalResults": 52420,
    "resultsPerPage": 1
  },
  "items": [
    {
      "kind": "youtube#searchResult",
      "etag": "Swf6L8XxZDzWMWspiY_Z3LoEERc",
      "id": {
        "kind": "youtube#channel",
        "channelId": "UCUEvXLdpCtbzzDkcMI96llg"
      },
      "snippet": {
        "publishedAt": "2011-11-24T07:50:01Z",
        "channelId": "UCUEvXLdpCtbzzDkcMI96llg",
        "title": "DAZBEE official",
        "description": "ダズビーって呼んでください! 2週に一度、20時に歌っています。 Hi I'm Music Creator DAZBEE. I usually sing J-pop cover songs.",
        "thumbnails": {
          "default": {
            "url": "https://yt3.ggpht.com/ytc/AKedOLTgnr8qRpiOcnlJVXPsGx_H8DA1CYVM07BIsxavgg=s88-c-k-c0xffffffff-no-rj-mo"
          },
          "medium": {
            "url": "https://yt3.ggpht.com/ytc/AKedOLTgnr8qRpiOcnlJVXPsGx_H8DA1CYVM07BIsxavgg=s240-c-k-c0xffffffff-no-rj-mo"
          },
          "high": {
            "url": "https://yt3.ggpht.com/ytc/AKedOLTgnr8qRpiOcnlJVXPsGx_H8DA1CYVM07BIsxavgg=s800-c-k-c0xffffffff-no-rj-mo"
          }
        },
        "channelTitle": "DAZBEE official",
        "liveBroadcastContent": "upcoming",
        "publishTime": "2011-11-24T07:50:01Z"
      }
    }
  ]
}

dazbee 영상(video) 검색 결과

// dazbee 영상 검색 결과
{
  "kind": "youtube#searchListResponse",
  "etag": "mc4KX0ZxMW9lomctnAswGjp0e3E",
  "nextPageToken": "CAEQAA",
  "regionCode": "KR",
  "pageInfo": {
    "totalResults": 51922,
    "resultsPerPage": 1
  },
  "items": [
    {
      "kind": "youtube#searchResult",
      "etag": "Nf0l1sManMPKE15euMSBR_o9tXY",
      "id": {
        "kind": "youtube#video",
        "videoId": "lFNWUL9fqG8"
      },
      "snippet": {
        "publishedAt": "2017-01-31T10:30:17Z",
        "channelId": "UCUEvXLdpCtbzzDkcMI96llg",
        "title": "忘れじの言の葉 (安次嶺希和子)  /ダズビー COVER",
        "description": "どうも、ダズビーです。 今回はスマホゲーム、グリムノーツの主題歌 忘れじの言の葉をカバーさせて頂きました。 よろしくお願いします。",
        "thumbnails": {
          "default": {
            "url": "https://i.ytimg.com/vi/lFNWUL9fqG8/default.jpg",
            "width": 120,
            "height": 90
          },
          "medium": {
            "url": "https://i.ytimg.com/vi/lFNWUL9fqG8/mqdefault.jpg",
            "width": 320,
            "height": 180
          },
          "high": {
            "url": "https://i.ytimg.com/vi/lFNWUL9fqG8/hqdefault.jpg",
            "width": 480,
            "height": 360
          }
        },
        "channelTitle": "DAZBEE official",
        "liveBroadcastContent": "none",
        "publishTime": "2017-01-31T10:30:17Z"
      }
    }
  ]
}

dazbee 재생목록(playlist) 검색 결과

// dazbee 재생목록 검색 결과
{
  "kind": "youtube#searchListResponse",
  "etag": "lOM1rbgHXpDKzCFIeVOo-iBJKLg",
  "nextPageToken": "CAEQAA",
  "regionCode": "KR",
  "pageInfo": {
    "totalResults": 7408,
    "resultsPerPage": 1
  },
  "items": [
    {
      "kind": "youtube#searchResult",
      "etag": "8O5Qsplquobr0IkDN6_HL0UwTbo",
      "id": {
        "kind": "youtube#playlist",
        "playlistId": "PLguPqKADXoCEw_vJqW0VSNTKejjUAk2wY"
      },
      "snippet": {
        "publishedAt": "2016-04-24T11:22:01Z",
        "channelId": "UCUEvXLdpCtbzzDkcMI96llg",
        "title": "My Cover Songs",
        "description": "",
        "thumbnails": {
          "default": {
            "url": "https://i.ytimg.com/vi/0douUV4nFd0/default.jpg",
            "width": 120,
            "height": 90
          },
          "medium": {
            "url": "https://i.ytimg.com/vi/0douUV4nFd0/mqdefault.jpg",
            "width": 320,
            "height": 180
          },
          "high": {
            "url": "https://i.ytimg.com/vi/0douUV4nFd0/hqdefault.jpg",
            "width": 480,
            "height": 360
          }
        },
        "channelTitle": "DAZBEE official",
        "liveBroadcastContent": "none",
        "publishTime": "2016-04-24T11:22:01Z"
      }
    }
  ]
}

 

video와 playlist 검색 결과 중 눈여겨봐야 할 부분은 바로 items의 "id" 부분이다.

video와 playlist의 ID 형식이 확연하게 다를 뿐더러(videos는 규칙 없는 랜덤값, playlist는 PL로 시작하는 랜덤값), kind로 youtube#영상형식 으로 기록이 되어있다.

이 부분으로 해당 영상이 어떤 형식인지 파악할 수 있을 것이다.

 

일단 이 정도로 정리해놓는다. 프로젝트 본격적으로 시작하면 그 때 또 적을 일이 있겠지.

댓글