youtube-api
A Node.JS module, which provides an object oriented wrapper for the Youtube v3 API.
:cloud: Installation
$ npm i --save youtube-api
:clipboard: Example
const Youtube = require("youtube-api")
, fs = require("fs")
, readJson = require("r-json")
, Lien = require("lien")
, Logger = require("bug-killer")
, opn = require("opn")
, prettyBytes = require("pretty-bytes")
;
const CREDENTIALS = readJson(`${__dirname}/credentials.json`);
let server = new Lien({
host: "localhost"
, port: 5000
});
let oauth = Youtube.authenticate({
type: "oauth"
, client_id: CREDENTIALS.web.client_id
, client_secret: CREDENTIALS.web.client_secret
, redirect_url: CREDENTIALS.web.redirect_uris[0]
});
opn(oauth.generateAuthUrl({
access_type: "offline"
, scope: ["https://www.googleapis.com/auth/youtube.upload"]
}));
server.addPage("/oauth2callback", lien => {
Logger.log("Trying to get the token using the following code: " + lien.query.code);
oauth.getToken(lien.query.code, (err, tokens) => {
if (err) {
lien.lien(err, 400);
return Logger.log(err);
}
Logger.log("Got the tokens.");
oauth.setCredentials(tokens);
lien.end("The video is being uploaded. Check out the logs in the terminal.");
var req = Youtube.videos.insert({
resource: {
snippet: {
title: "Testing YoutTube API NodeJS module"
, description: "Test video upload via YouTube API"
}
, status: {
privacyStatus: "private"
}
}
, part: "snippet,status"
, media: {
body: fs.createReadStream("index.mpeg")
}
}, (err, data) => {
console.log("Done.");
process.exit();
});
setInterval(function () {
Logger.log(`${prettyBytes(req.req.connection._bytesDispatched)} bytes uploaded.`);
}, 250);
});
});
:memo: Documentation
The official Youtube documentation is a very useful resource.
If you have any questions, just open an issue.
Authentication
OAuth (Access Token)
Youtube.authenticate({
type: "oauth"
, token: "your access token"
});
OAuth (Refresh Token)
Youtube.authenticate({
type: "oauth"
, refresh_token: "your refresh token"
, client_id: "your client id"
, client_secret: "your client secret"
, redirect_url: "your refresh url"
});
Server Key
Only for requests that don't require user authorization (certain list operations)
Youtube.authenticate({
type: "key"
, key: "your server key"
});
:yum: How to contribute
Have an idea? Found a bug? See how to contribute.
:dizzy: Where is this library used?
If you are using this library in one of your projects, add it in this list. :sparkles:
adasq-services-ytv
—It creates news feed from youtube search result, for specific queriesanitube
(by kikura-yuichiro)—node module for getting youtube video url of japanese animation OP/ED moviekyot-sunday-playlists
(by Alin Pandichi)—Kyot Sunday Playlistsmediacenterjs
(by Jan Smolders)—A NodeJS based mediacenter for your browsermediacenterjs-youtube
(by Jan Smolders)—A Youtube app for mediacenterjsnode-red-contrib-youtube
(by scaw.dev)—Youtube nodes for node-rednode-red-node-youtube
(by Jay Long)—A Node-RED node to access Youtube Data API.node-youtubeapi-simplifier
(by Haidy777)—The Youtube-API probably isn't the simplest api in the world.
So why isn't there a simplifier? Well, don't worry, now there is one :)pullplaylist
(by Sameid Usmani)—Youtube video downloader in pure javascript.steam-chat-bot
(by See contributors)—Simplified interface for a steam chat bot with lots of built-in functionalitytest-youtube-api
—Test Youtube API NodeJS moduleyoutube-album-uploader
(by Jared Chapiewsky)—Uploads an mp3 album to Youtubeyoutube-playlist-info
(by Benjamin Kaiser)—Youtube playlist information fetcher.youtube-vanitystats
(by Sebastian Patten)—A scheduled job that will will query YouTube's API for a given video ID. It will then email you the number of views and amount of revenue you have made since the last time it was run.
:scroll: License
MIT © Ionică Bizău