Рубрики
Без рубрики

Загрузка видео на YouTube, используя nodejs

Использование различных служб API может быть сложно, особенно для начинающих, но не только. В этом посте я постараюсь сделать более четким, как загрузить видео на YouTube, используя Nodejs.

Автор оригинала: Johnny B. (Ionică Bizău).

Использование различных служб API может быть сложно, особенно для начинающих, но не только. В этом посте я постараюсь сделать более четким, как загрузить видео на YouTube, используя Nodejs.

Назад в 2013 году я опубликовал свой первый модуль NPM: YouTube-API «Объектно-ориентированная обертка для API YouTube V3. Людям понравился этот модуль и обратная связь. Взносы, отчеты об ошибках, звездах и т. Д. Это означает, что люди фактически использовали мой модуль, который невероятно.

Итак, давайте предположим, что у вас есть видеофайл (CodeName: Video.mp4 ) И вы хотите загрузить его на свой аккаунт YouTube. Хотя есть пара методов аутентификации (JWT, OAUTH2, ключ сервера и т. Д.), Чтобы загрузить видео на YouTube, вам нужна аутентификация OAUTT2.

Документация Cleary States:

Учетные записи службы не работают на вызовы API данных YouTube, поскольку учетные записи службы требуют связанного канала YouTube, и вы не можете связать новые или существующие каналы с учетными записями. Если вы используете учетную запись службы для вызова API YouTube Data API, API Server Возвращает ошибку С помощью типов ошибок установлен Несанкционированный и причина, установленная на YouTubesignuPrequireded Отказ

Итак, нам нужен аутентификация OAUTH2. Если вы не Знакомьтесь с Oauth2, вам может понадобиться Прочитайте документы Отказ

Создание приложения Google

Как и для других услуг API, вам необходимо создать приложение, которое будет мостом между Вы и API Service Отказ Чтобы получить доступ к ресурсам YouTube, вам необходимо создать приложение Google.

  1. Откройте свою консоль Google и создать проект, нажав на Создать проект кнопка.
  1. Установите имя проекта во всплывающем окном, который был открыт.
  1. После создания приложения перейдите к APIS & AUTH и нажмите на API пункт меню.
  1. Здесь вы должны включить YouTube данные API Отказ Для этого нажмите YouTube данные API ссылка и нажмите кнопку Включить API кнопка.
  1. Прежде чем получить учетные данные, вы должны установить Экран согласия Информация (название продукта обязательно):
  1. Теперь пришло время получить учетные данные приложений. Но пока нет полномочий. Вы должны создать идентификатор клиента OAUTT2. Сделать это, перейдите к Учетные данные Страница и нажмите Создать новый идентификатор клиента Отказ Всплывающее окно будет открыто.
  1. Установите Авторизованный JavaScript Origins просто поставить http://localhost: 5000 Поскольку наш локальный сервер будет запущен (вы можете добавить другие истоки, такие как URL-адрес разработки и производства). URL обратного вызова это http://localhost: 5000/oauth2callback После доставки приложения доступа к вашей учетной записи (ресурсы YouTube в этом случае), вы будете перенаправлены там.
  1. После нажатия на Создать идентификатор клиента Кнопка, вы получите свои учетные данные.
  1. Теперь нажмите на Скачать JSON Кнопка для загрузки учетных данных в формате JSON.

Поскольку у вас есть учетные данные на вашем компьютере, теперь мы можем начать кодировать наш скрипт.

Использование YouTube-API для загрузки видео

Мы создадим Лиен Сервер, который будет обрабатывать URL-адрес обратного вызова OAUTH2.

Смотрите встроенные комментарии. Легче понять вещи.

/**
 * 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.
 * */

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")
    ;

// I downloaded the file from OAuth2 -> Download JSON
const CREDENTIALS = readJson(`${__dirname}/credentials.json`);

// Init lien server
let 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
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"]
}));

// Handle oauth2 callback
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: {
                // 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")
            }
        }, (err, data) => {
            console.log("Done.");
            process.exit();
        });

        setInterval(function () {
            Logger.log(`${prettyBytes(req.req.connection._bytesDispatched)} bytes uploaded.`);
        }, 250);
    });
});

Перед запуском скрипта мы должны установить некоторые зависимости:

$ npm i r-json lien opn bug-killer youtube-api pretty-bytes

Тогда просто запустите скрипт Узел ваш-скрипт.js Отказ Вам придется позволить вашему приложению Google получить доступ к вашей учетной записи YouTube и быть терпеливым, пока ваше видео не будет загружено.

Полученные результаты

Если все работает гладко, вы увидите ваше видео на вашей учетной записи YouTube. Если вы хотите играть с другими ресурсами YouTube, проверьте Это игровое приложение Отказ

Если у вас есть какие-либо вопросы, идеи или что-нибудь, Проверьте YouTube-API Пакет на Github и Откройте проблему Если вещи все еще неясны для вас.

Счастливая загрузка!