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