엄민용

Get song information from Playlist(Singer) / Delete unnecessary files

가수와 관련된 재생목록에서 노래의 제목, 동영상 url, 썸네일(url) 정보를 가져온다
ssh 서버에서 oauth2 인증을 구현할 수 없어 oauth2 인증을 통한 구현 포기
oauth2파일을 포함해 불필요한 파일 정리
{
// IntelliSense를 사용하여 가능한 특성에 대해 알아보세요.
// 기존 특성에 대한 설명을 보려면 가리킵니다.
// 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요.
"version": "0.2.0",
"configurations": [
{
"type": "pwa-node",
"request": "launch",
"name": "Launch Program",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}/video_list_sad.js"
}
]
}
\ No newline at end of file
const { google } = require("googleapis");
var service = google.youtube('v3');
service.playlistItems.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
fields: 'items(snippet(title,resourceId,thumbnails(high(url))))', //제목, VideoId, Thumbnail 이미지 정보.
maxResults: 10,
playlistId: 'PLfVO1GXBPp3tgrwk3GDJi3v-E_Hnq3lDO'
}, function (err, response) {
if (err) {
console.log('The API returned an error: ', err);
return;
}
var video = response.data.items;
if (video.length == 0) {
console.log('검색된 동영상이 없습니다.');
} else {
for (var i = 0; i < 10; i++) {
console.log('{');
console.log(JSON.stringify(response.data.items[i].snippet.title).replace(/\"/gi, ""));
var a = JSON.stringify(response.data.items[i].snippet.resourceId.videoId);
console.log('https://www.youtube.com/watch?v=' + a.replace(/\"/gi, "")); //JSON stringify 큰따옴표 제거후 URL로 전환
console.log(JSON.stringify(response.data.items[i].snippet.thumbnails.high.url).replace(/\"/gi, ""));
console.log('}');
}
}
})
const { google } = require("googleapis");
var service = google.youtube('v3');
service.playlistItems.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
fields: 'items(snippet(title,resourceId,thumbnails(high(url))))', //제목, VideoId, Thumbnail 이미지 정보.
maxResults: 10,
playlistId: 'PLfVO1GXBPp3ubihJVPi6HSltRIuvSqSI1'
}, function (err, response) {
if (err) {
console.log('The API returned an error: ', err);
return;
}
var video = response.data.items;
if (video.length == 0) {
console.log('검색된 동영상이 없습니다.');
} else {
for (var i = 0; i < 10; i++) {
console.log('{');
console.log(JSON.stringify(response.data.items[i].snippet.title).replace(/\"/gi, ""));
var a = JSON.stringify(response.data.items[i].snippet.resourceId.videoId);
console.log('https://www.youtube.com/watch?v=' + a.replace(/\"/gi, "")); //JSON stringify 큰따옴표 제거후 URL로 전환
console.log(JSON.stringify(response.data.items[i].snippet.thumbnails.high.url).replace(/\"/gi, ""));
console.log('}');
}
}
})
const { google } = require("googleapis");
var service = google.youtube('v3');
service.playlistItems.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
fields: 'items(snippet(title,resourceId,thumbnails(high(url))))', //제목, VideoId, Thumbnail 이미지 정보.
maxResults: 10,
playlistId: 'PLfVO1GXBPp3u0ckIfYZkADGlSQ6LQoAIQ'
}, function (err, response) {
if (err) {
console.log('The API returned an error: ', err);
return;
}
var video = response.data.items;
if (video.length == 0) {
console.log('검색된 동영상이 없습니다.');
} else {
for (var i = 0; i < 10; i++) {
console.log('{');
console.log(JSON.stringify(response.data.items[i].snippet.title).replace(/\"/gi, ""));
var a = JSON.stringify(response.data.items[i].snippet.resourceId.videoId);
console.log('https://www.youtube.com/watch?v=' + a.replace(/\"/gi, "")); //JSON stringify 큰따옴표 제거후 URL로 전환
console.log(JSON.stringify(response.data.items[i].snippet.thumbnails.high.url).replace(/\"/gi, ""));
console.log('}');
}
}
})
const { google } = require("googleapis");
var service = google.youtube('v3');
service.playlistItems.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
fields: 'items(snippet(title,resourceId,thumbnails(high(url))))', //제목, VideoId, Thumbnail 이미지 정보.
maxResults: 10,
playlistId: 'PLfVO1GXBPp3vo3sivJPfFzREBECRFepVK'
}, function (err, response) {
if (err) {
console.log('The API returned an error: ', err);
return;
}
var video = response.data.items;
if (video.length == 0) {
console.log('검색된 동영상이 없습니다.');
} else {
for (var i = 0; i < 10; i++) {
console.log('{');
console.log(JSON.stringify(response.data.items[i].snippet.title).replace(/\"/gi, ""));
var a = JSON.stringify(response.data.items[i].snippet.resourceId.videoId);
console.log('https://www.youtube.com/watch?v=' + a.replace(/\"/gi, "")); //JSON stringify 큰따옴표 제거후 URL로 전환
console.log(JSON.stringify(response.data.items[i].snippet.thumbnails.high.url).replace(/\"/gi, ""));
console.log('}');
}
}
})
const { google } = require("googleapis");
var http = require('http');
var opn = require('opn');
var destroyer = require('destroyer');
var url = require('url');
var enableDestroy = require('server-destroy');
const oauth2Client = new google.auth.OAuth2(
"394965702516-q817fn2gj8r8sqoudhp29k1rd71ku42j.apps.googleusercontent.com",
"xgo5tcTwsmg2alNumeY1Drj_",
"http://localhost:3031/api/oauth2callback"
);
const scopes = [
'https://www.googleapis.com/auth/youtube',
'https://www.googleapis.com/auth/youtube.force-ssl',
'https://www.googleapis.com/auth/youtube.readonly',
'https://www.googleapis.com/auth/youtubepartner'
];
let refreshToken = '';
async function authenticate() {
return new Promise((resolve, reject) => {
if (refreshToken !== "") {
oauth2Client.setCredentials({
refresh_token: refreshToken
});
oauth2Client.getAccessToken((err, ttoken) => {
if (err) {
reject(e);
}
resolve(oauth2Client);
});
} else {
const authorizeUrl = oauth2Client.generateAuthUrl({
access_type: 'offline',
scope: scopes.join(' '),
});
const server = http.createServer(async (req, res) => {
try {
if (req.url.indexOf('/api/oauth2callback') > -1) {
const qs = new url.URL(req.url, 'http://localhost:3031').searchParams;
res.end('Completed');
enableDestroy(server);
server.destroy();
const {
tokens
} = await oauth2Client.getToken(qs.get('code'));
refreshToken = tokens.refresh_token;
oauth2Client.credentials = tokens;
resolve(oauth2Client);
}
} catch (e) {
reject(e);
}
}).listen(3031, () => {
opn(authorizeUrl, {
wait: false
}).then(cp => cp.unref());
});
destroyer(server);
}
});
}
module.exports.refreshClient=authenticate;
\ No newline at end of file
const { google } = require("googleapis");
var service = google.youtube('v3');
const oauth2Service = require('./oauth2');
async function getPlaylistItemData(oauth2Client, playlistId) {
const res = await service.playlistItems.list({
auth: oauth2Client,
part: 'snippet',
fields: 'items(snippet(title))', //제목 정보만 필요함
maxResults: 50,
playlistId: playlistId
});
if (res.data.items == null || res.data.items.length === 0) {
throw new Error("데이터가 존재하지 않습니다.");
}
return res.data;
}
oauth2Service.refreshClient() //getPlaylistItemData(client, 재생목록의 주소) 예시로 슬픈노래 재생목록을 가져옴.
.then(client => getPlaylistItemData(client, 'PLJrlhDfEQCMD0SG8WCSbUjztMAYnVyuuY'))
.then(data => {
console.log(JSON.stringify(data.items, null, 4));
})
.catch(error => console.error);
\ No newline at end of file
var {google} =require('googleapis');
//1
var service = google.youtube('v3');
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: '8ykMyNHAdKk', // 동영상 Id 팔레트
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//2
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: '6744glqD6lk', // 동영상 Id 밤편지
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//3
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'he2C4lx63M0', // 동영상 Id 마음
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//4
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'xKZ3U8viuIU', // 동영상 Id 금요일에 만나요
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//5
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'seFr4qWykgY', // 동영상 Id 너랑나
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//6
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'r_-GQjN9Tpc', // 동영상 Id 내 손을 잡아
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//7
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'OIHlzvEKncQ', // 동영상 Id 좋은날
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//8
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: '04tYkKUPPv4', // 동영상 Id 라일락
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//9
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: '0ldJaGupC1o', // 동영상 Id 사랑이 잘
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//10
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'l0rcWimJmQ8', // 동영상 Id 봄 사랑, 벛꽃 말고
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
var {google} =require('googleapis');
//1
var service = google.youtube('v3');
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'j-seAiANLG8', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//2
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'F8c8f2nK82w', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//3
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'IfemyZEhfpY', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//4
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: '86suvlS1pGM', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//5
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'ztmOmJrTF5c', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//6
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: '6jAHysZVtwI', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//7
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'fFZ1__X-kKs', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//8
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'ei0k_1Uro-U', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//9
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'mCtVrf2x5BQ', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//10
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'FV003QMWhNM', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
var {google} =require('googleapis');
//1
var service = google.youtube('v3');
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'p5iu1V30myk', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//2
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'i-SBnhaZSSU', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//3
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'Etfgb6A7hSI', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//4
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'IN2mml9xs_s', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//5
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'tp1uoFAfgHE', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//6
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'Qx22TnVVIfU', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//7
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: '3y1QIqR115A', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//8
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'VXBI1wt8XII', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//9
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'aWMBn2--E0Q', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
//10
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'HyTbgBlnLCo', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4));
}
})
var {google} =require('googleapis');
var service = google.youtube('v3');
service.videos.list({
key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518',
part: 'snippet',
id: 'p5iu1V30myk', // 동영상 Id
fields: 'items(snippet(title))'
}, function(err, response) {
if (err) {
console.log('The API returned an error: ',err);
return;
}
var video =response.data.items;
if(video.length ==0){
console.log('검색된 동영상이 없습니다.');
} else {
console.log(JSON.stringify(response.data.items[0],null,4)); // 콘솔에 출력
}
})
\ No newline at end of file
내가 할 일 : ( api를 통해 얻어온 유튜브 영상 제목 모두 ) or ( 랜덤하게 한개 ) 를 라인을 통해 사용자에게 보내는 방법 찾기
ex)
사용자: 슬픈 노래 추천해줘
챗봇: 재생목록에서 받아온 노래 n개 출력 or 랜덤하게 한개 출력.
\ No newline at end of file
oauth2.js 실행할 필요 없이 playlistbyid.js 만 실행하셔도 될 것 같습니다.
실행하기 이전에, 제가 package 파일을 다루는걸 몰라서
아직은 수동으로 npm install 을 진행해주셔야 할 것 같습니다.
oauth2.js 와 playlistbyid.js 에 있는 require 항목들을 모두 install 해주시고 진행해주시면 됩니다.
playlistbyid.js를 실행하시면 브라우저 창에서 구글 아이디를 통해 유튜브 api를 이용할 수 있도록 인증하는 절차를 거치게 됩니다.
확인되지 않은 앱이라고 뜨시면 고급으로 이동하여 안전하지 않은 페이지로 이동하시면 됩니다.
모든 인증이 끝나면 Completed 라는 메시지가 뜹니다.
재생목록의 주소를 입력하면 재생목록의 영상 제목을 출력하도록 하였습니다.
\ No newline at end of file
수동으로 googleapis 를 npm install 해야합니다.
\ No newline at end of file
......