Я хотел бы создать плейлист YouTube в учетной записи пользователя, но я изо всех сил пытался аутентифицировать POST в API YouTube v3.
Начну с того, как далеко я продвинулся с этой проблемой..
Документация API YouTube
Документация API Youtube содержит подробную информацию о создании списка воспроизведения и рабочий пример в API Explorer * 1011.*
Я ввел следующий код в тело запроса:
{
"snippet":
{
"title":"Test Playlist"
}
}
Это успешно создало плейлист в моей учетной записи YouTube с таким же названием.Таким образом, из этого я могу сказать, что заголовок был необходим в теле, и для этого потребовалась бы проверка подлинности OAuth 2.0 (если отображается ошибка, если она не включена) с использованием одной из областей действия: youtube, youtube.force-ssl, youtubepartner.*
Первая попытка реагирования
Первое, что я попробовал, было похоже на это:
fetch('/youtube/v3/playlists', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': 'Bearer' + api.youtube,
},
body: JSON.stringify({
"snippet":
{
"title":"Test"
}
})
}).then(response => response.json()).then(data => {
console.log(data)
})
api.youtube содержит мой API-ключ YouTube.Большая часть форматирования для этого была получена от другого API, который у меня есть в той же программе, для получения данных от spotify, который работает.Ответ, который я получил от этого, сказал бы: «Ошибка входа в систему» или «Ошибка аутентификации» (что-то в этом роде)
В любом случае, это важно, потому что я знаю, что моим первым препятствием является получение аутентификации.
Аутентификация
Документация по API YouTube содержит руководство под названием Реализация авторизации OAuth 2.0 Я следовал руководству по клиентским веб-приложениям .Первое, что я заметил, это то, что они используют библиотеку, я нашел это на npm под googleapis и установил.Когда я попытался вызвать это в React, используя
const {google} = require('googleapis');
, я не буду углубляться в ошибку, но отреагировал, сказав: «Не удалось преобразовать неопределенное в объект», и обнаружил проблему, в которой говорилось, что googleapis предназначен дляна стороне сервера, а не на стороне клиента, я попытался создать приложение реакции и поместить его в herokuapp, но получил ту же ошибку.Кто-то еще предложил использовать gapi-client на npm, который является оболочкой узла для googleapis.
Следующее, что я сделал, это попробовал пример на странице npm, которая очень похожа на GoogleПример для настройки объекта клиента.У меня это есть, поэтому часть импорта и функция находятся в верхней части моего app.js, а затем часть gapi.load активируется после нажатия кнопки (это может быть бесполезной информацией, но с е)
import gapi from 'gapi-client';
//On load, called to load the auth2 library and API client library.
gapi.load('client:auth2', initClient);
function initClient() {
gapi.client.init({
discoveryDocs: ["https://www.googleapis.com/discovery/v1/apis/drive/v3/rest"],
clientId: 'YOUR_CLIENT_ID',
scope: 'https://www.googleapis.com/auth/drive.metadata.readonly'
}).then(function () {
// do stuff with loaded APIs
console.log('it worked');
});
}
Я скопировал свой идентификатор клиента из консоли API, и это точный ответ, который я получил:
FireFox
Загрузка не удалась для с источником «https://apis.google.com//scs/apps-static//js/k=oz.gapi.en.WcpMzqgmJZU.O/m=auth2,client/rt=j/sv=1/d=1/ed=1/am=AQ/rs=AGLTcCNsTS1p4dx0iMhlrwEpiaXw4iMjOg/cb=gapi.loaded_0”.
Хром
GET https://apis.google.com//scs/apps-static//js/k=oz.gapi.en.WcpMzqgmJZU.O/m=auth2,client/rt=j/sv=1/d=1/ed=1/am=AQ/rs=AGLTcCNsTS1p4dx0iMhlrwEpiaXw4iMjOg/cb=gapi.loaded_0 net :: ERR_ABORTED 404
Это примерно столько, сколько я получил, и я не уверен, что делать дальше, поэтому любая помощь очень ценится.Я надеюсь, что это не получилось слишком запутанным, но я постарался донести свою проблему настолько четко, насколько это возможно.