Actualmente estoy tratando de escribir datos en la celda A1 de una hoja de cálculo de Google a través de Javascript y la API de Google Sheets. Dado que el acceso de escritura y el método .update necesitan la identificación OAuth2, seguí el tutorial de esta excelente publicación .
Desafortunadamente, sigo recibiendo errores 401, lo que significa que no estoy autorizado a pesar de ofrecer un token de actualización y un token de acceso.
No estoy seguro de dónde y cómo procesar el token de acceso, ya que en el pasado solo usé solicitudes de lectura que se pueden completar con una clave API.
El código en cuestión:
function get_access_token_using_saved_refresh_token() { const refresh_token = "INSERT REFRESH TOKEN"; const client_id = "INSERT CLIENT ID"; const client_secret = "INSERT CLIENT KEY"; const refresh_url = "https://www.googleapis.com/oauth2/v4/token"; const post_body = `grant_type=refresh_token&client_id=${encodeURIComponent(client_id)}&client_secret=${encodeURIComponent(client_secret)}&refresh_token=${encodeURIComponent(refresh_token)}`; let refresh_request = { body: post_body, method: "POST", headers: new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }) } fetch(refresh_url, refresh_request).then( response => { return(response.json()); }).then( response_json => { console.log(response_json); SheetRequest(response_json.access_token); }); } function SheetRequest(access_token, callback, request){ var url = 'https://sheets.googleapis.com/v4/spreadsheets/{INSERT SHEETID}/values/A1&key={INSERT API KEY}'; var request = { "majorDimension": "ROWS", "values": [ [ "test", ] ] }; var xhr = new XMLHttpRequest(); xhr.open("POST", url); xhr.setRequestHeader('Authorization', 'Bearer ' + access_token); xhr.setRequestHeader('Access-Control-Allow-Origin', '*'); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.onload = function (e) { if (e) console.log(e); if (xhr.readyState === 4) { if (xhr.status === 200) { console.log(xhr.responseText); callback(xhr.responseText.toString()); } else { callback(null); console.log(xhr.status); } } else { console.log(xhr.status); }; }; xhr.send(JSON.stringify(request)); } get_access_token_using_saved_refresh_token();Pensé que su secuencia de comandos para recuperar el token de acceso es correcta. Entonces, cuando su token de acceso se puede usar para actualizar la hoja de cálculo usando Sheets API, ¿qué tal la siguiente modificación?
En esta modificación, su función de SheetRequest se modifica utilizando la API de búsqueda de Javascript.
function SheetRequest(access_token) { var url = 'https://sheets.googleapis.com/v4/spreadsheets/{INSERT SHEETID}/values/A1?valueInputOption=USER_ENTERED'; fetch(url, { method: "PUT", headers: { "Authorization": "Bearer " + access_token, "Content-Type": "application/json" }, body: JSON.stringify({ "values": [["test"]] }) }) .then(res => res.json()) .then(res => console.log(res)) .catch(err => console.log(err)); }En tu guión,
test , se requiere utilizar "Método: hojas de cálculo.valores.actualizar".Cuando se ejecuta este script, el valor de "prueba" se coloca en la celda "A1" de la pestaña 1at de la hoja de cálculo.