A Node.JS module, which provides an object oriented wrapper for the Youtube v3 API.
$ npm i youtube-api
/**
* This script uploads a video (specifically `video.mp4` from the current
* directory) to YouTube,
*
* To run this script you have to create OAuth2 credentials and download them
* as JSON and replace the `credentials.json` file. Then install the
* dependencies:
*
* npm i r-json lien opn bug-killer
*
* Don't forget to run an `npm i` to install the `youtube-api` dependencies.
* */
// Dependencies
var Youtube = require("youtube-api")
, Fs = require("fs")
, ReadJson = require("r-json")
, Lien = require("lien")
, Logger = require("bug-killer")
, Opn = require("opn")
;
// Constants
// I downloaded the file from OAuth2 -> Download JSON
const CREDENTIALS = ReadJson("./credentials.json");
// Init lien server
var server = new Lien({
host: "localhost"
, port: 5000
});
// Authenticate
// You can access the Youtube resources via OAuth2 only.
// https://developers.google.com/youtube/v3/guides/moving_to_oauth#service_accounts
var 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"]
}));
// Handle oauth2 callback
server.page.add("/oauth2callback", function (lien) {
Logger.log("Trying to get the token using the following code: " + lien.search.code);
oauth.getToken(lien.search.code, function(err, tokens) {
if (err) { lien(err, 400); return Logger.log(err); }
oauth.setCredentials(tokens);
Youtube.videos.insert({
resource: {
// Video title and description
snippet: {
title: "Testing YoutTube API NodeJS module"
, description: "Test video upload via YouTube API"
}
// I don't want to spam my subscribers
, status: {
privacyStatus: "private"
}
}
// This is for the callback function
, part: "snippet,status"
// Create the readable stream to upload the video
, media: {
body: Fs.createReadStream("video.mp4")
}
}, function (err, data) {
if (err) { return lien.end(err, 400); }
lien.end(data);
});
});
});
The official Youtube documentation is a very useful resource.
- Activities
- ChannelBanners
- Channels
- GuideCategories
- PlaylistItems
- Playlists
- Search
- Subscriptions
- Thumbnails
- VideoCategories
- Videos
If you have any questions, just open an issue.
Youtube.authenticate({
type: "oauth"
, token: "your access 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"
});
Only for requests that don't require user authorization (certain list operations)
Youtube.authenticate({
type: "key"
, key: "your server key"
});
Have an idea? Found a bug? See how to contribute.
If you are using this library in one of your projects, add it in this list. ✨
-
anitube
by kikura-yuichiro -
kyot-sunday-playlists
by Alin Pandichi -
mediacenterjs
by Jan Smolders -
node-red-node-youtube
by Jay Long -
node-youtubeapi-simplifier
by Haidy777 -
pullplaylist
by Sameid Usmani -
pully
by Jim Buck -
steam-chat-bot
by See contributors -
test-youtube-api
by Ionică Bizău -
youtube-vanitystats
by Sebastian Patten