Этот код не работает.Я использую ReactJS вместо обычного js для загрузки скрипта, эта часть работает (я получаю разрешение), но тогда «url» как-то ошибается
*, что я хочу сделать, это отправить почтус помощью API Gmail, поиска в Google и документах API, пока не повезло
componentDidMount() {
this.handleSort('stocks_present', 'total_invested_EUR')();
const script = document.createElement("script");
script.src = "https://apis.google.com/js/client.js";
document.body.appendChild(script);
script.onload = () => this.sendMail(script);
}
wait = ms => new Promise((r, j) => setTimeout(r, ms));
sendMail = async (script) => {
let clientId = 'xxxxxxxx.apps.googleusercontent.com';
let apiKey = 'xxxxxxxxxxxxxxxxxxx5ZDsC3l9TY';
let scopes = 'https://www.googleapis.com/auth/gmail.send';
const google_auth = async () => {
window.gapi.client.setApiKey(apiKey);
await this.wait(1000);
console.log('starting -> authorized')
window.gapi.auth2.authorize({
client_id: clientId,
scope: scopes,
immediate: true
}, () => {
console.log('loading gmail');
window.gapi.client.load('gmail',
{
callback: () => {
console.log('loaded'); // it doesn't get here
let sendRequest = window.gapi.client.gmail.users.messages.send({
'userId': 'me',
'resource': {
'raw': window.btoa(email).replace(/\+/g, '-').replace(/\//g, '_')
}
});
sendRequest.execute();
},
onerror: (e) => console.log('error'),
timeout: 1000,
ontimeout: (e) => console.log('error')
});
});
return false;
}
let counter = 10;
while (counter > 1) {
if (script.getAttribute('gapi_processed')) {
console.log('auth gained');
google_auth();
break;
} else {
await this.wait(1000);
counter--;
console.log('waiting for gapi ' + counter);
}
}
}
Я получаю
waiting for gapi 9
auth gained
starting -> authorized
loading gmail
, а затем ошибка
GET https://content.googleapis.com/discovery/v1/apis/gmail/%5Bobject%20Object%5D/rest?fields=kind%2Cname%2Cversion%2CrootUrl%2CservicePath%2Cresources%2Cparameters%2Cmethods%2CbatchPath%2Cid&pp=0&key=xxxxxxxxxxxxxxx3l9TY 404
гдеесли я делаю это вручную, я получаю
{"error":{"errors":[{"domain":"global","reason":"notFound","message":"Not Found"}],"code":404,"message":"Not Found"}}
ОБНОВЛЕНИЕ: я могу, если я использую это
window.gapi.client.load('gmail', 'v1', () => {
console.log('loaded');
let sendRequest = window.gapi.client.gmail.users.messages.send({
'userId': 'me',
'resource': {
'raw': window.btoa(email).replace(/\+/g, '-').replace(/\//g, '_')
}
});
sendRequest.execute();
console.log('message sent');
});
Но в теории этот способ устарел, так как язаставить это работать?
gapi.client.load (имя, версия, обратный вызов) устарело.Пожалуйста, загрузите API с документами обнаружения.Загружает интерфейс клиентской библиотеки к определенному API.Если обратный вызов не предоставлен, возвращается goog.Thenable.Загруженный интерфейс API будет иметь вид gapi.client.api.collection.method.Например, API-интерфейс Moderator будет создавать такие методы, как gapi.client.moderator.series.list.