[Spring Boot3] 초간단 Youtube Api 사용법 (Feat. 검색 기능을 구현해보자)

송하연·2023년 12월 6일
11

스프링부트🌱

목록 보기
8/8
post-thumbnail

1. Youtube API 키 발급하기

1.1 새 프로젝트 생성

Youtube API키를 발급받기 위해서는 먼저 Google Cloud에서 새 프로젝트를 생성해야한다.

프로젝트 생성 - Google Cloud 플랫폼 바로가기


프로젝트 이름 설정 후 만들기를 클릭하여 프로젝트를 생성한다.

1.2 API 키 발급

해당 프로젝트선택 > 사용자 인증 정보 클릭 > + 사용자 인증 정보 만들기 클릭 > API 키 만들기

API 키가 생성된다. 해당 API키를 복사해준다.

1.3 Youtube DATA API V3 활성화


해당 프로젝트선택 > 사용 설정된 API 및 서비스 클릭 > API 및 서비스 사용 설정 클릭

검색창에 Youtube 검색 > YouTube Data API v3 클릭


사용 버튼을 클릭해 Youtube DATA API V3을 활성화 해준다.

1.4 테스트

Youtube Data API 공식 문서

위의 링크에서 Youtube API 호출에 대한 가이드와 여러 샘플 코드를 참고할 수 있다.

그럼 받은 API키를 이용하여 간단한 테스트를 해보자!

'가장 인기 있는 동영상 검색' API 호출 테스트

key={받은 API키 값} 에 복사한 키 값을 넣어주자

GET https://www.googleapis.com/youtube/v3/videos?part=snippet&chart=mostPopular&maxResults=10&key={받은 API키 값}

각각의 파라미터가 의미하는 것을 간단히 살펴보면 다음과 같다(공식 문서 참조)

chart: 동영상을 어떤 기준으로 가져올지를 지정한다.
여기서는 mostPopular로 설정되어 있어 가장 인기 있는 동영상을 가져온다.

maxResults: 반환할 결과의 최대 개수를 지정한다.
여기서는최대 10개의 동영상을 가져온다.

key: YouTube Data API를 사용하기 위한 API 키를 지정한다.

위의 요청에서 가장 인기 있는 동영상 10개를 호출하며 호출된 결과에서 해당 영상들에 대한 정보를 받을 수 있다.

2. 스프링 부트 프로젝트에 Youtube API 적용하기

이제 스프링 부트 프로젝트에서 Youtube API를 활용하는 방법을 알아보자!
keyword 값을 이용해 검색을 해서 나온 영상에 대한 VideoId와 제목을 받아오는 API를 간단히 구현해볼 것이다.

2.1 스프링 부트 프로젝트 설정

새 프로젝트 생성 후 build.gradle에 해당 라이브러리를 추가해준다.
(버전은 각자의 환경에 따라 상이할 수 있음)

   // Youtube API
    implementation 'com.google.api-client:google-api-client:1.33.0'
    implementation 'com.google.oauth-client:google-oauth-client-jetty:1.23.0'
    implementation 'com.google.apis:google-api-services-youtube:v3-rev20230816-2.0.0'
    implementation 'com.google.http-client:google-http-client-jackson2:1.39.2'
- Google API와 통신하기 위한 Java용 클라이언트 라이브러리
- OAuth 2.0 인증 프로토콜을 지원하기 위한 Jetty 구현을 포함하는 라이브러리
- YouTube Data API를 사용할 수 있게 해주는 Google API 클라이언트 라이브러리
- Google HTTP Client 라이브러리의 Jackson2 모듈을 사용하여 JSON 데이터를 처리하는 기능을 제공하는 라이브러리

application.yml에는 api 키 값을 추가해준다.

youtube:
  api:
    key: {받은 API 키 값}

2.2 YoutubeController 작성

package com.example.youtube.controller;

import com.example.youtube.service.YoutubeService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;

@RestController
@RequiredArgsConstructor
@RequestMapping("/youtube")
public class YoutubeController {

    private final YoutubeService youtubeService;

     @GetMapping
    public ResponseEntity<String> searchVideo(@RequestParam String keyword) throws IOException {
        // YoutubeService를 통해 동영상 검색한 결과를 받아옴
        String result = youtubeService.searchVideo(keyword);
        return ResponseEntity.ok(result);

    }
}

2.3 YoutubeService 작성

package com.example.youtube.service;

import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.youtube.YouTube;
import com.google.api.services.youtube.model.SearchListResponse;
import com.google.api.services.youtube.model.SearchResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.Collections;
import java.util.List;

@Service
public class YoutubeService {

    //@Value 어노테이션을 사용하여 application.yml에서 정의한 YouTube API 키를 주입 받음
    @Value("${youtube.api.key}")
    private String apiKey;

    public String searchVideo(String query) throws IOException {
        // JSON 데이터를 처리하기 위한 JsonFactory 객체 생성
        JsonFactory jsonFactory = new JacksonFactory();

        // YouTube 객체를 빌드하여 API에 접근할 수 있는 YouTube 클라이언트 생성
        YouTube youtube = new YouTube.Builder(
                new com.google.api.client.http.javanet.NetHttpTransport(),
                jsonFactory,
                request -> {})
                .build();

        // YouTube Search API를 사용하여 동영상 검색을 위한 요청 객체 생성
        YouTube.Search.List search = youtube.search().list(Collections.singletonList("id,snippet"));

        // API 키 설정
        search.setKey(apiKey);

        // 검색어 설정
        search.setQ(query);

        // 검색 요청 실행 및 응답 받아오기
        SearchListResponse searchResponse = search.execute();

        // 검색 결과에서 동영상 목록 가져오기
        List<SearchResult> searchResultList = searchResponse.getItems();

        if (searchResultList != null && searchResultList.size() > 0) {
            //검색 결과 중 첫 번째 동영상 정보 가져오기
            SearchResult searchResult = searchResultList.get(0);

            // 동영상의 ID와 제목 가져오기
            String videoId = searchResult.getId().getVideoId();
            String videoTitle = searchResult.getSnippet().getTitle();

            return "Title: " + videoTitle + "\nURL: https://www.youtube.com/watch?v=" + videoId;
        }
        return "검색 결과가 없습니다";
    }
}

2.3 API 테스트

컨트롤러에서 작성한대로 엔드포인트 /youtube로 호출했고 검색어 keyword 값도 지정해주었다.

그러면 위와 같이 비디오 제목과 ID에 대한 결과 정보를 받아올 수 있다 ✨️✨️

3. 마무리

Youtube API 키를 받아와 스프링부트 프로젝트에서 Youtube DATA API V3를 활용하는 방법에 대해 알아보았다. 끄읕--

그 외 유튜브 API를 활용해서 무엇을 할 수 있을까?
동영상 검색 기능, 채널 정보 가져오기, 댓글 가져오기, 동영상 세부 정보 표시, 동영상 업로드, 인기 동영상 가져오기, 사용자 분석 등등 다양하게 활용할 수 있을 것이다.

Youtube API 구현 깃허브 바로가기

profile
개발 기록 끄적끄적✏️ #백엔드개발자

0개의 댓글