배치 처리이지만 Youtube Auth 인증이 필요했기 때문에 편하게 어떻게 든
13218 단어 YouTube
소개
취미로 이런 것을 만들었습니다.
htps //w w. 요츠베. 코 m / 찬 l / 우카 r-Q-rsW3TCgW3-hw2A / p-y-sts
Youtube의 플레이리스트를 자동 생성하는 스크립트를 cron적인 느낌으로 달리고 있습니다만, 플레이리스트 작성을 위해서는 Auth 인증하고 API를 두드려야 했습니다.
자신의 Youtube 계정으로 인증하고 싶은 것만으로 불특정 다수의 유저가 인증하는 것은 아니기 때문에, 진지하게 Auth 인증을 만드는 것은 귀찮다고 생각해, 좋은 방법 없을까라고 생각하고 있으면 좋은 방법이 있었으므로 그 메모입니다.
전지식
했던 일
샘플 코드는 js이지만 별도로 무엇이든 좋습니다.
1: client_id, client_secret 생성
↑이미지와 같은 タイプ: ウェブアプリケーション, OAuth2.0クライアント
의 ID를 발행해 둡니다.
2부: 인증 URL을 두드리는
//
// script1.js
//
// その1で取得したclient_id
const clientId = "xxx.apps.googleusercontent.com";
// redirectUrlは実際にサーバを立てる必要はない。localhostならまあなんでも良い
const redirectUrl = "http://localhost:8000";
const scope = "https://www.googleapis.com/auth/youtube";
const url = [
"https://accounts.google.com/o/oauth2/auth?",
`client_id=${clientId}&`,
`redirect_uri=${encodeURIComponent(redirectUrl)}&`,
`scope=${scope}&`,
"response_type=code&",
"access_type=offline"
].join("");
console.log(url);
$ node script1.js
https://accounts.google.com/o/oauth2/auth?client_id=xxx.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8000&scope=https://www.googleapis.com/auth/youtube&response_type=code&access_type=offline
↑이 URL을 브라우저에서 엽니다.
그 3: refresh_token 얻기
그 2에서 생성한 URL을 두드려 Youtube 인증하면 아래와 같은 localhost로 리디렉션됩니다.
http://localhost:8000/?code=aaa&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube#
서버는 세우지 않기 때문에 브라우저의 에러 화면이 됩니다만 특별히 문제 없습니다.
URL 바에 포함된 code
를 복사하여 아래 스크립트를 실행합니다.
//
// script2.js
//
const body = {
code: "aaa", // 先程取得したcode
client_id: "xxx.apps.googleusercontent.com", // その1で取得したclient_id
client_secret: "yyy", // その1で取得したclient_secret
redirect_uri: "http://localhost:8000", // その2と同じくサーバを立てる必要はない
grant_type: "authorization_code"
};
const command = [
"curl -X POST",
'-H "Content-Type: application/json"',
"-d",
`'${JSON.stringify(body)}'`,
"https://accounts.google.com/o/oauth2/token"
].join(" ");
console.log(command);
$ node script2.js
curl -X POST -H "Content-Type: application/json" -d '{"code":"aaa","client_id":"xxx.apps.googleusercontent.com","client_secret":"yyy","redirect_uri":"http://localhost:8000","grant_type":"authorization_code"}' https://accounts.google.com/o/oauth2/token
# ↑このコマンドをコピペして実行すると下記のレスポンスが返ってくる
{
"access_token": "xxx",
"expires_in": 3600,
"refresh_token": "zzz", // これが欲しかった!!
"scope": "https://www.googleapis.com/auth/youtube",
"token_type": "Bearer"
}%
4: refresh_token을 사용하여 인증이 필요한 API를 두드리기
//
// script3.js
//
import { google } from "googleapis";
const getAuthorizedYoutubeClient = () => {
const OAuth2 = google.auth.OAuth2;
const clientId = "xxx.apps.googleusercontent.com";
const clientSecret = "yyy";
const refreshToken = "zzz";
const authClient = new OAuth2(
clientId,
clientSecret,
"http://localhost:8000"
);
authClient.setCredentials({ refresh_token: refreshToken });
return google.youtube({
version: "v3",
auth: authClient
});
};
const client = getAuthorizedYoutubeClient();
client.playlists.insert({
part: "snippet,status",
requestBody: {
snippet: {
title: "playlist title",
description: "playlist description"
},
status: {
privacyStatus: "public"
}
}
}).then(result => {
console.log(result);
});
이제 마음대로 refresh_token을 사용하여 인증하고 API를 두드려줍니다.
이 라이브러리는 매우 편리합니다.
기타 감상
//
// script1.js
//
// その1で取得したclient_id
const clientId = "xxx.apps.googleusercontent.com";
// redirectUrlは実際にサーバを立てる必要はない。localhostならまあなんでも良い
const redirectUrl = "http://localhost:8000";
const scope = "https://www.googleapis.com/auth/youtube";
const url = [
"https://accounts.google.com/o/oauth2/auth?",
`client_id=${clientId}&`,
`redirect_uri=${encodeURIComponent(redirectUrl)}&`,
`scope=${scope}&`,
"response_type=code&",
"access_type=offline"
].join("");
console.log(url);
$ node script1.js
https://accounts.google.com/o/oauth2/auth?client_id=xxx.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8000&scope=https://www.googleapis.com/auth/youtube&response_type=code&access_type=offline
//
// script2.js
//
const body = {
code: "aaa", // 先程取得したcode
client_id: "xxx.apps.googleusercontent.com", // その1で取得したclient_id
client_secret: "yyy", // その1で取得したclient_secret
redirect_uri: "http://localhost:8000", // その2と同じくサーバを立てる必要はない
grant_type: "authorization_code"
};
const command = [
"curl -X POST",
'-H "Content-Type: application/json"',
"-d",
`'${JSON.stringify(body)}'`,
"https://accounts.google.com/o/oauth2/token"
].join(" ");
console.log(command);
$ node script2.js
curl -X POST -H "Content-Type: application/json" -d '{"code":"aaa","client_id":"xxx.apps.googleusercontent.com","client_secret":"yyy","redirect_uri":"http://localhost:8000","grant_type":"authorization_code"}' https://accounts.google.com/o/oauth2/token
# ↑このコマンドをコピペして実行すると下記のレスポンスが返ってくる
{
"access_token": "xxx",
"expires_in": 3600,
"refresh_token": "zzz", // これが欲しかった!!
"scope": "https://www.googleapis.com/auth/youtube",
"token_type": "Bearer"
}%
//
// script3.js
//
import { google } from "googleapis";
const getAuthorizedYoutubeClient = () => {
const OAuth2 = google.auth.OAuth2;
const clientId = "xxx.apps.googleusercontent.com";
const clientSecret = "yyy";
const refreshToken = "zzz";
const authClient = new OAuth2(
clientId,
clientSecret,
"http://localhost:8000"
);
authClient.setCredentials({ refresh_token: refreshToken });
return google.youtube({
version: "v3",
auth: authClient
});
};
const client = getAuthorizedYoutubeClient();
client.playlists.insert({
part: "snippet,status",
requestBody: {
snippet: {
title: "playlist title",
description: "playlist description"
},
status: {
privacyStatus: "public"
}
}
}).then(result => {
console.log(result);
});
Reference
이 문제에 관하여(배치 처리이지만 Youtube Auth 인증이 필요했기 때문에 편하게 어떻게 든), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/abeyuya/items/1739e15e73e4565186bb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)