Ich versuche, eine Anfrage an die Youtube Analytics API zu stellen. und ich habe Probleme, die Anfragen so zu formulieren, dass sie akzeptiert werden. Ich bin mit dem Google-APIs Node.js-ClientYoutube Analytics - Erstellen von Anfragen
https://github.com/google/google-api-nodejs-client
und mein Code wie folgt
import { Meteor } from 'meteor/meteor';
import google from 'googleapis';
import KEY_FILE from './keyFile.json';
import { CHANNEL_ID } from './channelId.js';
//api's
const analytics = google.youtubeAnalytics('v1');
//fetch youtube analytics
export function youtubeAnalytics(start, end){
//initalise request data
const startDate = `${start.getFullYear()}-${('0'+(start.getMonth()+1)).slice(-2)}-${('0'+(start.getDate())).slice(-2)}`;
const endDate = `${end.getFullYear()}-${('0'+(end.getMonth()+1)).slice(-2)}-${('0'+(end.getDate())).slice(-2)}`;
const scopes = [
'https://www.googleapis.com/auth/youtube',
'https://www.googleapis.com/auth/youtube.readonly',
'https://www.googleapis.com/auth/yt-analytics-monetary.readonly',
'https://www.googleapis.com/auth/yt-analytics-monetary.readonly'
];
//generate authorisation token
var AUTH = new google.auth.JWT(
KEY_FILE.client_email,
null,
KEY_FILE.private_key,
scopes,
null
);
//authorize request
AUTH.authorize(function (err, tokens) {
if (err) {
console.log(err);
return;
}
//create request
const analyticsRequest = {
auth: AUTH,
'start-date': startDate,
'end-date': endDate,
ids: `channel==${CHANNEL_ID}`,
metrics: 'views',
};
//make request
analytics.reports.query(analyticsRequest, function (err, data) {
if (err) {
console.error('Error: ' + err);
return false;
}
if (data) {
console.log(data);
return data;
}
});
});
return false;
}
Meteor.methods({youtubeAnalytics});
Ich halte die folgende Fehlermeldung erhalten
Error: Error: Invalid query. Query did not conform to the expectations.
ich seine denken zu tun mit meiner Anfrage Objekt
const analyticsRequest = {
auth: AUTH,
'start-date': startDate,
'end-date': endDate,
ids: `channel==${CHANNEL_ID}`,
metrics: 'views',
};
aber alle Beispiele, die ich gefunden habe, sagen, dass dieses Anfrageobjekt funktionieren sollte. Ich habe es so weit wie möglich vereinfacht. Meine ursprüngliche Anfrage (die, die ich eigentlich möchte) war wie folgt.
const analyticsRequest = {
auth: AUTH,
'start-date': startDate,
'end-date': endDate,
ids: `channel==${CHANNEL_ID}`,
metrics: 'views',
dimensions: 'video',
sort: '-views',
'max-results': '200'
}
danach brauche ich eine andere Anforderung zu tun, alle zugehörigen Informationen zu den Videos zu bekommen aufgelistet, die einen anderen api-Endpunkt verwendet.
//api's
const youtube = google.youtube('v3');
/*
do processing of analytics data to create batchRequest
which is a string of comma separated video ids
*/
videoRequest = {
auth: AUTH,
part: 'id,snippet',
id: batchRequest;
}
youtubeApiData.search.list(videosRequest, function (err, data) {
if (err) {
console.error('Error: ' + err);
return false;
}
if (data) {
console.log(data);
return data;
}
});
So In Zusammenfassung
Ich brauche eine Anfrage an verschiedene Google api zu tun und habe Schwierigkeiten mit der Anfrage bilden, so dass sie akzeptiert werden (ich habe nicht über die erste Anfrage von YouTube Analytics bekam) .
Kann mir jemand in die richtige Richtung zeigen?