[Vimeo - 활용하기 2편] Java API를 활용하여 업로드한 영상의 정보 저장

박철현·2024년 12월 10일

삽질일지

목록 보기
2/4

Java API 개요

  • Vimeo Token을 활용하여 영상의 정보를 얻거나 특정 행위를 조작할 수 있다.
  • API 깃허브
  • gradle 추가
{
    //.. 이전것들
	implementation 'com.clickntap:vimeo:2.0'
}
  • java 코드 예제
    • 깃허브 readme 제공
package com.clickntap.vimeo;

import java.io.File;

public class VimeoSample {

  public static void main(String[] args) throws Exception {
    Vimeo vimeo = new Vimeo("[token]"); 
    
    //add a video
    String videoEndPoint = vimeo.addVideo(new File("/Users/tmendici/Downloads/Video.AVI"));
    
    //get video info
    VimeoResponse info = vimeo.getVideoInfo(videoEndPoint);
    System.out.println(info);
    
    //edit video
    String name = "Name";
    String desc = "Description";
    String license = ""; //see Vimeo API Documentation
    String privacyView = "disable"; //see Vimeo API Documentation
    String privacyEmbed = "whitelist"; //see Vimeo API Documentation
    boolean reviewLink = false;
    vimeo.updateVideoMetadata(videoEndPoint, name, desc, license, privacyView, privacyEmbed, reviewLink);
    
    //add video privacy domain
    vimeo.addVideoPrivacyDomain(videoEndPoint, "clickntap.com");
   
    //delete video
    vimeo.removeVideo(videoEndPoint);
    
  }

}
  • 영상 추가, 정보 얻기, 정보 변경, 프라이버시 도메인 추가, 동영상 삭제 등 API로 가능
  • 영상과 관련된 설정들은 웬만해서는 GUI로 다 가능하기 때문에 저는 영상의 정보만 추출하도록 하겠습니다.
    • 특정 도메인 임베드 설정 : GUI 환경 가능
  • 영상의 정보를 추출해서 DB에 필요한 정보만 꺼내도록 하겠습니다.
    • 영상의 길이 추출
    • 영상 파일명 추출

사용해보기

Vimeo Token 발급받기

  • Vimeo Developer 페이지 이동
  • Create an app 으로 앱 만들기
    • 설정 클릭 후 만들기 버튼 클릭
  • 토큰 발급받기
    • 옆에 Generate Access Token 클릭
  • 허용 범위 설정 후 Generate
    • 영상과 관련된 편집, 업로드는 안하고 정보만 얻기 위함이라 두가지만 설정했습니다.
    • 만약 업로드도 Spring을 통해서 할꺼라면 추가 권한을 줘야할 것 같습니다.
    • 저는 만들고 바로 지울것이기 때문에 토큰을 노출시켰지만, 실제로는 절대 노출하면 안됩니다!

Java 코드로 정보 얻어보기 - 영상 길이, 파일 이름 추출

@Slf4j
public class VimeoApiTest {
	// @Value("${vimeo.token}")
	// 실제로는 위와 같은 형태로 yml에서 읽어오도록 설정
	public static final String vimeoToken = "068059ec3424e1ad2d0f7be87a3bd07f";
	public static final String VIMEO_API_LINK_PREFIX = "https://api.vimeo.com/videos/";

	public static void main(String[] args) {

		Vimeo vimeo = new Vimeo(vimeoToken);

		// 1. 영상에서 Id 추출
		// "https://vimeo.com/manage/videos/1027182136" 형태의 url에서 맨 뒤에 숫자만 추출
		String videoId = "1027182136";

		// 2. 엔드포인트 추출 / sample : 1027182136
		// API용 엔드포인트 https://api.vimeo.com/videos/1027182136 형태로 요청 보내야 함
		String videoEndPoint = VIMEO_API_LINK_PREFIX + videoId;

		// 3. video 정보 얻기
		VimeoResponse info;

		try {
			info = vimeo.getVideoInfo(videoEndPoint);
		} catch (IOException e) {
			log.info("Vimeo 영상 정보 추출 시도 했으나 네트워크 예외 발생, 요청 url = {}", videoEndPoint);
			throw new RuntimeException("Vimeo 네트워크 예외 발생, 다시 시도해주세요");
		}

		// 요청에는 성공했지만 받은 응답이 404 라면 영상을 못찾음
		if (info.getStatusCode() == HttpStatus.NOT_FOUND.value()) {
			throw new IllegalArgumentException("해당 Id에 해당하는 강의 영상 조회에 실패했습니다. 링크 혹은 영상 업로드 여부를 확인해주세요");
		}
        
        // 정보 확인
		log.info("info = {}", info);

		// 4-1. 영상 길이(Second) 추출 -> 초 단위
		int duration = info.getJson().getInt("duration");
		System.out.println("duration = " + duration);

		// 4-2. 영상 이름 추출
		String name = info.getJson().getString("name");
		System.out.println("name = " + name);

	}
}
  • 영상에서 Id부분만 추출

    • 실제로는 Java 코드로 String으로 split 등의 메서드를 이용해서 추출합니다.
  • API용 링크로 전환

    • 공식 문서 참조했을때 동영상 API 엔드포인트 확인
  • video 정보 얻기

    • 예외 발생할 수 있어 경우의 수 구분
    • 프론트에서 사용자한테 다시 영상 주소 올리라고 하거나 다시 시도하라고 하는 응답 등 구분 필요
      • 네트워크 오류 : IOException
      • 404 응답 : 해당 업로드 동영상이 없는 경우
  • 응답 확인

info = HTTP Status Code: 
200
Json: 
{
  "play": {"status": "playable"},
  //... 
  "duration": 25,
  //...
  "name": "6583403-uhd_4096_2160_25fps",
  //..
}
  • Json에서 duration, name 추출하여 저장

정리

  • 총 2편으로 나눠서 Vimeo 활용 방법 간략히 파악
  • Vimeo 활용한 프로젝트를 계획중이신 분들에게 도움이 되시길~!~!
profile
비슷한 어려움을 겪는 누군가에게 도움이 되길

0개의 댓글