ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 유튜브(Youtube) API - 10. Video Insert
    소프트웨어개발 이야기 2020. 2. 25. 17:21

    유튜브 데이터 API 뜯어보기 - Videos 동영상 업로드

     

    본글에서는 9. Videos(동영상 조회 편)에 이어서 Data API의 동영상(Video) 기능을 활용하여 동영상을 유튜브에 업로드하고 결과를 확인해 보도록 하겠다. 

     

     

    Video API는 다음과 같은 기능을 제공한다.

    Videos

    > 동영상 목록 조회

    > 동영상 업로드

    > 동영상의 메타정보 수정

    > 동영상 삭제

    > 동영상에 평가(좋아요, 싫어요) 추가/삭제

     

     

    PlaylistItems API를 통해서 동영상을 재생목록에 추가할 수 있지만, 해당 동영상을 업로드하기 위해서는 Videos API의 insert 기능을 사용해야 한다. 즉, 동영상을 유튜브에 업로드할 수 있는 유일한 방법은 Videos API 밖에 없다.

     

    지금부터 동영상을 업로드 하는 Videos.insert API에 대해서 살펴보자.

     


     

    이전 글과 마찬가지로 본 글에서도 가상의 시나리오를 작성하고 API를 통해 이를 구현하는 방식으로 설명을 진행한다.

     

    > Videos:insert

    동영상 업로드(특정 영상을 업로드하거나 메타데이터를 선택적으로 설정 가능)

    • 최대 파일 크기: 64GB
    • 허용된 미디어 MIME 유형: video/*, application/octet-stream
    • autoLevels 속성(true/false)을 통해 동영상의 조명과 색상 자동보정 여부 설정
    • stabilize 속성(true/false)을 통해 카메라 흔들림 제거 여부 설정
    시나리오. 테스트를 위한 개인채널에 영상과 정보(제목, 설명, 태그, 공개 상태 <비공개>)를 업로드하고 성공 여부를 출력한다.

     

    1. 동영상 업로드 작업은 기존에 사용하던 엑세스 토큰으로는 불가하며 추가 스코프가 필요하다.

    스코프에 업로드 권한('https://www.googleapis.com/auth/youtube.upload')을 추가하여 엑세스 토큰을 얻어온다.

    엑세스 토큰을 얻는 과정은 '5. 인증받고 사용하기' 글을 참고한다.

     

    const oauth2Service = require('./oauth2_service');
    
    const scopes = [
        'https://www.googleapis.com/auth/youtube',
        'https://www.googleapis.com/auth/youtubepartner',
        'https://www.googleapis.com/auth/youtube.readonly',
        'https://www.googleapis.com/auth/youtube.upload',
        'https://www.googleapis.com/auth/yt-analytics.readonly',
        'https://www.googleapis.com/auth/yt-analytics-monetary.readonly',
    ];
    
    oauth2Service.initialize(scopes)
        .then((client) => {
            console.log("OAuth2 Initialization is done.");
        })
        .catch(console.error);
    

     

    2. videos.insert 메서드를 사용하여 mp4 영상파일을 업로드한다. 

    var {
      google
    } = require('googleapis');
    var service = google.youtube('v3');
    
    const oauth2Service = require('../common/oauth2_service');
    const fs = require('fs');
    const readline = require('readline');
    
    async function insertVideo(client, fileName) {
      const fileSize = fs.statSync(fileName).size;
      const res = await service.videos.insert({
        auth: client,
        part: 'id,snippet,status',
        autoLevels: true,
        requestBody: {
          snippet: {
            title: '유튜브 API를 사용한 동영상 업로드',
            description: '유튜브의 Videos API를 사용하여 mp4 동영상을 업로드합니다. 잘 올라가겠죠?! 그래야 할텐데요 =.=',
            tags: ['유튜브API', '동영상업로드', 'videos.insert']
          },
          status: {
            privacyStatus: 'private',
          },
        },
        media: {
          body: fs.createReadStream(fileName),
        },
      }, {
        onUploadProgress: evt => {
          const progress = (evt.bytesRead / fileSize) * 100;
          readline.clearLine(process.stdout, 0);
          readline.cursorTo(process.stdout, 0, null);
          process.stdout.write(`${Math.round(progress)}% 완료`);
        },
      });
    
      console.log('\n\n');
      return res.data;
    }
    
    oauth2Service.refreshClient()
      .then(client => insertVideo(client, 'test.mp4'))
      .then(data => console.log(JSON.stringify(data, null, 4)))
      .catch(err => {
        console.error("수행중 에러가 발생했습니다.\n", err);
      });

    snippet의 title, description, tags 속성을 통해 메타 정보를 설정했다. status의 privacyStatus 속성을 통해 영상을 비공개로 업로드하고 추가로 autoLevels를 활성화해서 보정작업도 진행했다.

     

    onUploadProgress는 Videos.insert 메소드에서 업로드 진척률을 확인하기 위해 호출해주는 이벤트 핸들러(Axios에서 호출함)로 화면에 진척률을 출력했다.(껌벅거리는 커서만 믿고 있기엔 업로드 시간이 너무 지루하다;)

     

     

    3. 업로드가 완료되면, 입력한 메타 정보를 포함하여 동영상 아이디를 확인할 수 있다.

     

    Youtube 사이트에서도 업로드된 영상을 확인 가능하다. 

     

    스튜디오에서 보다 자세한 정보를 확인해 보자.

     


    유튜브 API를 사용해서 동영상을 업로드 하는 간단한 실습을 진행해 봤다. Videos.insert 메서드를 학습하는 차원으로는 문제가 없지만, 막상 실무에 적용하다 보면 추가로 필요한 부분을 만나게 된다.

     

    예를 들어, 유튜브 스튜디오에서는 영상 올리면서 썸네일도 지정하고 재생목록도 설정하고 심지어 최종 화면에 영상 추가도 가능한데 이런 건 API로 어떻게 해야 하지?!

     

    이런 고민은 당연하다.(없다면 반성해야 함 ㅎㅎ) 

    결국 사용자가 대면하는 유튜브 스튜디오는 구글에서 UX 최적화를 통해 만들어진 결과물이기 때문에 이를 프로그래밍으로 풀기 위해서는 다양한 유튜브 API를 조합해서 사용하는 노력이 필요하다.

     

    시작이 반이다.

    우리는 이미 다양한 API를 사용해 봤으니 하나씩 알아가는 재미가 있지 않을까?!: )

    댓글

Designed by Joypinkgom.