Если у вас сайт на
php, то создаёте в корне файл
test.php такого содержания:
spoiler<?php
header('Access-Control-Allow-Origin: *');
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=archive.zip');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
echo file_get_contents('https://docs.google.com/spreadsheets/d/1LCPXEorv3x5YYiikpciI0A2YaPNB41Epn-9JKMdW94/export?format=zip');
Ссылку на экспорт таблицы разумеется заменяете на свою! Допустим у вас есть ссылка на Google таблицу:
https://docs.google.com/spreadsheets/d/1LCPXEorv3x5YYiikpciI0A2YaPNB41Epn-9JKMdW94/edit
Вам нужно в конце поменять
edit на
export?format=zip чтобы получилось:
https://docs.google.com/spreadsheets/d/1LCPXEorv3x5YYiikpciI0A2YaPNB41Epn-9JKMdW94/export?format=zip
Если вы перейдете по такой ссылке, то увидите, что вам отдаётся zip-архив внутри которого лежат html-файлы. Соответственно, задача далее сводится к тому, чтобы распаковать полученный zip-архив и спарсить html-файлы.
Чтобы спарсить информацию, на самом сайте перед закрывающим тегом
</head>
вставляйте:
spoiler<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.5.0/jszip.js"></script>
<script type="text/javascript">
// Функция для парсинга Google таблицы:
async function googleTableParse() {
var response = await fetch('/test.php');
var zip = await response.blob();
var archive = await new JSZip().loadAsync(zip);
var files = Object.keys(archive.files);
var lists = Object.create(null);
for (var n = 0; n < files.length; n++) {
if (!files[n].includes('/') && files[n].includes('.html')) {
var blob = await archive.files[files[n]].async('blob');
var html = await blob.text();
var name = files[n].replace(/\.html$/g, '');
lists[name] = tableParser(html);
}
}
return lists;
}
// Функция для парсинга html-кода таблицы:
function tableParser(html) {
var doc = new DOMParser().parseFromString(html, "text/html");
var th = doc.querySelector('table > tbody > tr').querySelectorAll('th, td');
var title = [];
for (var i = 0; i < th.length; i++) {
title.push(th[i].innerText);
}
var tr = doc.querySelectorAll('table > tbody > tr');
var array = [];
for (var i = 1; i < tr.length; i++) {
var td = tr[i].querySelectorAll('th, td');
var obj = {};
var add = 0;
for (var y = 1; y < td.length; y++) {
td[y].innerHTML = td[y].innerHTML.replace(/\<br\>/g, '{перенос строки}');
obj[title[y]] = td[y].innerText.replace(/\{перенос строки\}/g, "\n").trim();
if (obj[title[y]] !== '') {
add = 1;
}
}
if (add) {
array.push(obj);
}
}
return array;
}
</script>
Далее заходите на свой сайт, открываете консоль и в целях теста выполняете:
test = await googleTableParse();
Если в переменную
test упал объект с данными, значит все в порядке, можете пользоваться.