728x90

Youtube가 정말 핫합니다.

그래서 유튜브를 좀 더 적극적으로 활용하기 위해 Youtube API를 nodejs와 함께 쓰는법에 대해 포스팅을 해보겠습니다.

 

먼저, 목적에 따라 쓰는법이 달라질 수 있으니,

제가 쓰고자 하는 목적에 따라 아래의 가이드를 선택적으로 살펴보세요.

 

Type A: 단순히, 영상 id를 통해 목록 혹은 영상의 정보를 호출하고자 하는경우

Type B: 계정에 영향을 주는 작업, 예를들어 영상업로드나 수정과 같은.

 

* Type A

이 경우에 작업은 매우 간단하다.

GCP 계정을 생선한 다음 credentials에서 web용 api-key를 발급받습니다.

 

영상정보를 호출하고자 하는 경우,

https://www.googleapis.com/youtube/v3/videos

위의 url로 params: { key, id, part } 정보와 함께 get 요청을 하면됩니다.

part의 값으로는 'snippet,contentDetails'와 같은 값이 올 수 있습니다.

https://www.googleapis.com/youtube/v3/videos?key=abcabccom&id=wowow10&part=snippet

 

 

* Type B

이 경우에는 작업이 다소 복잡합니다...

우선, OAuth의 인증 작업을 걸쳐야 합니다.

따라서, 클라이언트와의 연계작업이 불가피하게 들어가게 됩니다. (여기서 말하는 연계작업이란, 클라이언트 사이드에서의 로그인 인증 과정을 말합니다.)

 

아래와 같이 작업해볼까요?.

Nodejs서버에 npm의 youtube-api, dotenv 세개의 라이브러리를 설치합니다. (없어도 구현가능 하지만, 예제에서는 사용하도럭 하겠습니다.)

 

다음, GCP credentials에서 OAuth client를 하나 생성하겠습니다.

이 때, callback url은 자유롭게 설정해도 되나, 예제와 같이하려면 /oauth2callback을 콜백url로 지정하는게 속편하겠죠?.

예를들면, "http://localhost:9000/oauth2callback"

생성한 계정정보를 가지고 앞으로의 작업을 진행할 것입니다.

const OAuth = Youtube.authenticate({
    type: 'oauth',
    client_id: process.env.OAUTH_ID,
    client_secret: process.env.OAUTH_PW,
    redirect_url: 'http://localhost:9000/oauth2callback',
});

 

OAuth를 통해 인증작업을 진행해보도록 하겠습니다..

*** dotenv모듈을 설치하면 .env파일에 저장한 정보들이 환경변수로 지정되며 위와같이 process.env.변수명 으로 불러올 수 있다.

*** 사용을 희망하는 파일에서 require('dotenv').require()와 같이 파일 맨 상단에 불러와주면 된다.

 

const data = { ...뭐시기뭐시기 };

const url = OAuth.generateAuthUrl({
  access_type: 'offline',
  scope: ['https://www.googleapis.com/auth/youtube.upload'],
  state: JSON.stringify(data),
});

return res.redirect(url); or return res.send(url);

 

위 코드에서  data는 클라이언트에서 받아온 정보이거나, 하여튼 무언가 정보가 있을수 있습니다.

(예를들면 영상과 영상정보)

callback에서 해당 정보를 전달받기 위해서는 위와 같이 state에 값을 string형태로 저장해 보내주면 됩니다.

아마 작업을 하시다보면 꼭 필요한 부분일것입니다. 잘 응용하시길 바랍니다.

 

이제, callback을 받아볼까요?

app.get('/oauth2callback', async (req, res) => {
    let { code, state } = req.query;
    state = JSON.parse(state);

    OAuth.getToken(code, (err, tokens) => {
        OAuth.setCredentials(tokens); //신뢰할 수 있는 사이트 지정

        const config = {
            part: 'snippet,status',
            resource: {
                snippet: {
                    title: state.title} 아이디어 발표영상,
                    description: state.description,
                    tags: ['유튜브api', '테스트'],
                },
                status: {
                    privacyStatus: 'public', // public, unlisted, private
                },
            },
            media: {
                body: state.media, // media
            },
        };
 

        Youtube.videos.insert(config, (err, data) => {
            if (err) return res.status(500).send('failed');
            else return res.status(200).send('success');
        });
    });
});

 

여기서 media파일이 중요합니다.

위의 경우에는 s3에 저장된 영상을 getObejct하여 바로 createReadStream() 처리해 받아온 경우이기 때문에 바로 사용할 수 있었습니다.

 

만약, 서버에 저장된 영상파일을 올려야한다면,

fs.createReadStream(media)와 같이 처리해야합니다.

 

 

 


웹사이트 개발 / 홈페이지 제작 / android앱 개발 / ios 앱 개발 / server / client / aws / fullstack / buisness partner / 외주 / 용역

https://open.kakao.com/o/sNETgUJb

http://self-made.cloud

 

 

728x90
반응형