Использую youtube api v3, и не понимаю, что я делаю. Есть метод buildApiRequest в котором получается запросить некоторые данные, но стоит выйти чуть шаг влево\вправо, все прекращает работать. Это не считая того, что некоторые видео по запросу приходят с idVideo === undefined.
Курил документацию, к сожалению мой английский не до конца позволяет понять всю картину, что и куда идёт, зачем столько формальностей и лишнего кода(опять же, на мой взгляд - более опытные ребята, вероятно, понимают: почему и зачем так, но в моем понимании - это как минимум, странно).
Приведу пример того, как это работает у меня (90% кода взято из офф документации, из моих действий было лишь удаление jQuery, переписал на нативный js и добавил es6 синтаксиса).
Код:
/***** START BOILERPLATE CODE: Load client library, authorize user. *****/
// Global variables for GoogleAuth object, auth status.
let GoogleAuth;
/**
* Load the API's client and auth2 modules.
* Call the initClient function after the modules load.
*/
function handleClientLoad() {
gapi.load('client:auth2', initClient);
}
function initClient() {
// Initialize the gapi.client object, which app uses to make API requests.
// Get API key and client ID from API Console.
// 'scope' field specifies space-delimited list of access scopes
gapi.client.init({
'clientId': '_тут мой айди_',
'discoveryDocs': ['https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest'],
'scope': 'https://www.googleapis.com/auth/youtube.force-ssl https://www.googleapis.com/auth/youtubepartner',
}).then(function() {
GoogleAuth = gapi.auth2.getAuthInstance();
// Listen for sign-in state changes.
GoogleAuth.isSignedIn.listen(updateSigninStatus);
// Handle initial sign-in state. (Determine if user is already signed in.)
setSigninStatus();
// Call handleAuthClick function when user clicks on "Authorize" button.
let authorizeButton = document.getElementById("execute-request-button");
authorizeButton.onclick = () => handleAuthClick(event);
});
}
function handleAuthClick(event) {
// Sign user in after click on auth button.
GoogleAuth.signIn();
}
function setSigninStatus() {
var user = GoogleAuth.currentUser.get();
isAuthorized = user.hasGrantedScopes('https://www.googleapis.com/auth/youtube.force-ssl https://www.googleapis.com/auth/youtubepartner');
// Toggle button text and displayed statement based on current auth status.
}
function updateSigninStatus(isSignedIn) {
setSigninStatus();
}
function createResource(properties) {
console.log(properties, "проперти");
var resource = {};
var normalizedProps = properties;
for (var p in properties) {
var value = properties[p];
if (p && p.substr(-2, 2) == '[]') {
var adjustedName = p.replace('[]', '');
if (value) {
normalizedProps[adjustedName] = value.split(',');
}
delete normalizedProps[p];
}
}
for (var p in normalizedProps) {
// Leave properties that don't have values out of inserted resource.
if (normalizedProps.hasOwnProperty(p) && normalizedProps[p]) {
var propArray = p.split('.');
var ref = resource;
for (var pa = 0; pa < propArray.length; pa++) {
var key = propArray[pa];
if (pa == propArray.length - 1) {
ref[key] = normalizedProps[p];
} else {
ref = ref[key] = ref[key] || {};
}
}
};
}
return resource;
}
function removeEmptyParams(params) {
for (var p in params) {
if (!params[p] || params[p] == 'undefined') {
delete params[p];
}
}
return params;
}
function executeRequest(request, callback) {
request.execute(function(response) {
console.log(response);
if (callback) {
callback(response);
}
});
}
function buildApiRequest(requestMethod, path, params, properties, callback) {
params = removeEmptyParams(params);
var request;
if (properties) {
var resource = createResource(properties);
request = gapi.client.request({
'body': resource,
'method': requestMethod,
'path': path,
'params': params
});
} else {
request = gapi.client.request({
'method': requestMethod,
'path': path,
'params': params
});
}
executeRequest(request, callback);
}
/***** END BOILERPLATE CODE *****/
Если у кого-то будет настроение\желание написать краткий гайд по тому, что здесь происходит, то я был бы очень благодарен.
Что из себя представляет gapi и что с его помощью можно делать?
DiscoveryDocs - для чего это нужно?
Scope - что это?
Как работать с next\prev pageToken'ами?
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости