J'essaie le service Google Cloud Functions et je veux lire et écrire une feuille de calcul Google, mais je n'arrive pas à trouver d'exemples ou de façons de le faire.
Mon problème découle du fait que l'exemple de javascript pour une fonction cloud de Google est:
exports.helloWorld = function helloWorld (req, res) {
res.send(`Hello ${req.body.name || 'World'}!`);
};
Cela fonctionne, mais je veux faire ce que google a comme exemple à lire à partir d'une feuille de calcul Google:
gapi.load('client:auth2', initClient);
function initClient() {
gapi.client.init({
discoveryDocs: DISCOVERY_DOCS,
clientId: CLIENT_ID,
scope: SCOPES
}).then(function () {
// Listen for sign-in state changes.
gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);
// Handle the initial sign-in state.
gapi.client.sheets.spreadsheets.values.get({
spreadsheetId: '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms',
range: 'Class Data!A2:E',
}).then(function(response) {
var range = response.result;
if (range.values.length > 0) {
appendPre('Name, Major:');
for (i = 0; i < range.values.length; i++) {
var row = range.values[i];
// Print columns A and E, which correspond to indices 0 and 4.
appendPre(row[0] + ', ' + row[4]);
}
} else {
appendPre('No data found.');
}
}, function(response) {
appendPre('Error: ' + response.result.error.message);
});
});
}
Est-ce que quelqu'un sait si c'est possible ou un exemple qui montre comment faire quelque chose de similaire à cela?
Voici comment je l'ai fait avec Google Cloud Functions. Je pensais que OAuth ne serait pas un bon choix, car les fonctions cloud fonctionnent souvent sans surveillance. Heureusement, il existe des comptes de service , destiné à la communication de machine à machine.
À l'étape 1, un fichier clé au format JSON a été téléchargé sur votre ordinateur. Enregistrez-le dans votre répertoire de projet et renommez-le credentials.json
.
Copiez et enregistrez la clé API de l'étape 3 dans un fichier appelé api_key.json
dans le répertoire de votre projet. Ça devrait ressembler à ça:
{
"key": "<PASTE YOUR API KEY HERE>"
}
Partagez la feuille de calcul avec l'e-mail du compte de service créé à l'étape 1.
Voici mon code qui ajoute une ligne à la feuille de calcul à chaque appel de la fonction Cloud.
const {google} = require('googleapis');
exports.reply = (req, res) => {
var jwt = getJwt();
var apiKey = getApiKey();
var spreadsheetId = '<PASTE YOUR SPREADSHEET ID HERE>';
var range = 'A1';
var row = [new Date(), 'A Cloud Function was here'];
appendSheetRow(jwt, apiKey, spreadsheetId, range, row);
res.status(200).type('text/plain').end('OK');
};
function getJwt() {
var credentials = require("./credentials.json");
return new google.auth.JWT(
credentials.client_email, null, credentials.private_key,
['https://www.googleapis.com/auth/spreadsheets']
);
}
function getApiKey() {
var apiKeyFile = require("./api_key.json");
return apiKeyFile.key;
}
function appendSheetRow(jwt, apiKey, spreadsheetId, range, row) {
const sheets = google.sheets({version: 'v4'});
sheets.spreadsheets.values.append({
spreadsheetId: spreadsheetId,
range: range,
auth: jwt,
key: apiKey,
valueInputOption: 'RAW',
resource: {values: [row]}
}, function(err, result) {
if (err) {
throw err;
}
else {
console.log('Updated sheet: ' + result.data.updates.updatedRange);
}
});
}
J'espère que cela t'aides!
J'ai trouvé un moyen de le faire de la même manière auto-authentifiée que le autres services peut.
Dans le README de l'API NodeJS, ils ont un exemple d'authentification automatique que nous pouvons appliquer à l'API Sheets comme ceci:
index.js:
const { google } = require('googleapis');
const { promisify } = require('util');
exports.main = (req, res) => {
google.auth.getClient({
scopes: ['https://www.googleapis.com/auth/spreadsheets'],
}).then(auth => {
const api = google.sheets({ version: 'v4', auth });
const getSheets = promisify(api.spreadsheets.get.bind(api.spreadsheets));
return getSheets({ spreadsheetId: 'SPREADSHEET_ID' });
})
// This just prints out all Worksheet names as an example
.then(({ data: { sheets } }) => {
res.status(200).send({ sheets });
})
.catch(err => {
res.status(500).send({ err });
})
};
package.json:
{
"dependencies": {
"googleapis": "^42"
}
}
Enfin, partagez la feuille avec l'adresse e-mail du compte de service exécutant la fonction cloud.
google.auth.getClient
dans cet exemple détectera les informations d'identification du compte de service associé à la fonction cloud. Vous pouvez donc interagir avec l'API Sheets sans avoir à gérer de secrets d'authentification.
Je navigue sur le Web depuis des heures à la recherche d'aide sur la façon d'intégrer l'API Google Sheets aux fonctions Cloud de Firebase.
Heureusement, j'ai trouvé cet article sur Medium qui traite de ce sujet précis: