Использую 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
'ами?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Ребята подскажите где можно скачать литературу по JS/React/Angular/ на русском бесплатноПо JS хотелось бы что нить про OOP JS,паттерны
Обработчик висит на элементе mainПри клике по элементам внутри main, если элемент (цель клика) является потомком блока message, к соответствующему...
Готовлюсь к собеседованию, помогите плиз разобраться с тестамиНапример как можно протестить эту функцию
Все аккордеоны открывают контент вниз методом next(), как мне сделать чтобы кнопка всегда была внизу, а текст скрытый аккордеоном открывался...