¿Hay alguna manera de obtener valores de celda de una hoja de cálculo pública de Google?
GET https://sheets.googleapis.com/v4/spreadsheets/1vW01Y46DcpCC7aKLIUwV_W4RXLbeukVwF-G9AA7P7R0/values/A1A4?key=abcdef devuelve 403.
También envié el Referrer en Postman: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36
{ "error": { "code": 403, "message": "Requests from referer Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36 are blocked.", "status": "PERMISSION_DENIED", "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "reason": "API_KEY_HTTP_REFERRER_BLOCKED", "domain": "googleapis.com", "metadata": { "consumer": "projects/666", "service": "sheets.googleapis.com" } } ] } }Estoy tratando de acceder a los datos de una hoja pública directamente desde JavaScript del lado del cliente.
No hay viajes de ida y vuelta al servidor. Recuerdo que esto fue posible hace unos 10 años, pero no puedo localizar los documentos.
Puede acceder a la hoja de cálculo pública por json endpoint
var id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; var gid = '1111111111111'; var url = 'https://docs.google.com/spreadsheets/d/'+id+'/gviz/tq?tqx=out:json&tq&gid='+gid;tomar una rebanada
data.substring(47).slice(0, -2)y analizar el json
function getEndpointJson(){ var id = '1n-rjSYb63Z2jySS3-M0BQ78vu8DTPOjG-SZM4i8IxXI'; var gid = '0'; var txt = UrlFetchApp.fetch(`https://docs.google.com/spreadsheets/d/${id}/gviz/tq?tqx=out:json&tq&gid=${gid}`).getContentText(); var jsonString = txt.match(/(?<="table":).*(?=}\);)/g)[0] var json = JSON.parse(jsonString) var table = [] var row = [] json.cols.forEach(colonne => row.push(colonne.label)) table.push(row) json.rows.forEach(r => { var row = [] rcforEach(cel => { try{var value = cel.f ? cel.f : cel.v} catch(e){var value = ''} row.push(value) } ) table.push(row) } ) return (table) }Por ejemplo, en la página html (debe almacenarla en un servidor externo)
<html> <title>Google Sheets json endpoint V4</title> <author>Mike Steelson</author> <style> table {border-collapse: collapse;} th,td{border: 1px solid black;} </style> <body> <div id="json">json here</div> <script> var id = '1n-rjSYb63Z2jySS3-M0BQ78vu8DTPOjG-SZM4i8IxXI'; var gid = '0'; var url = 'https://docs.google.com/spreadsheets/d/'+id+'/gviz/tq?tqx=out:json&tq&gid='+gid; fetch(url) .then(response => response.text()) .then(data => document.getElementById("json").innerHTML=myItems(data.substring(47).slice(0, -2)) ); function myItems(jsonString){ var json = JSON.parse(jsonString); var table = '<table><tr>' json.table.cols.forEach(colonne => table += '<th>' + colonne.label + '</th>') table += '</tr>' json.table.rows.forEach(ligne => { table += '<tr>' ligne.c.forEach(cellule => { try{var valeur = cellule.f ? cellule.f : cellule.v} catch(e){var valeur = ''} table += '<td>' + valeur + '</td>' } ) table += '</tr>' } ) table += '</table>' return table } </script> </body></html>El ID de la hoja que ha proporcionado es incorrecto.
Según una breve investigación , hay bibliotecas JS disponibles que le permiten acceder a los datos de GSheets, pero Google requiere una clave API:
Las solicitudes a la API de Hojas de cálculo de Google para datos públicos deben ir acompañadas de un identificador, que puede ser una clave API o un token de acceso.
Aquí hay una biblioteca de ejemplo:
gsheets : obtenga hojas de cálculo públicas de Google como JavaScript/JSON simple.