Гугл таблицы как база данных
Гугл таблицы как БД
Краткий обзор использования google spreadsheets в качестве облачной базы данных. Таблицы привычны всем, в том числе и мне, поэтому, пока я искал подходящую облачную БД для одного из проектов, данные “временно” расположил в них.
Хотелось, конечно, сразу использовать таблицы как БД, но для этого существовал ряд препятствий:
- Для получения данных нужна 0Auth - аутентификация, что ограничивает доступ к инфе не авторизированных пользователей
- Получаемыми даже при такой аутентификации данными неудобно оперировать (надо сначала причесывать)
Вскоре я обнаружил, что таблицу можно опубликовать в интернете в формате csv:
Что решает сразу и проблему причесывания данных - CSV легко парсится на массив объектов.
С помощью JQuery легко получить данные и распарсить их в массив объектов, фильтровать и оперировать этими объектами.
$.ajax({
type: "GET",
url: "#ССЫЛКА_НА_ТАБЛИЦУ_В_ФОРМАТЕ_CSV#",
dataType: "text",
success: function(data) {
csvdata = data;
tasks = $.csv.toObjects(csvdata); // необходимо подключить библиотеку https://cdnjs.cloudflare.com/ajax/libs/jquery-csv/...
})
}
});
У концепта есть 2 минуса:
- Таблица доступна всем по прямой ссылке (но только при условии, что эта ссылка в общем доступе. В моем проекте не стало проблемой, тем более, что конфиденциальной информации в таблице нет)
- Нельзя просто так записывать в эту БД. То есть Таблицы можно использовать в качестве “админки” сайта со всеми ее формулами, скриптами и пр. Для записи же нужно пользоваться “костылями”.
В конце привожу кусок кода, выводящий задачи разработчика (реализация трекера задач в firebase)
var csvdata = '';
var tasks = [];
var user;
var utasks;
function drawTable(td1,td2,td3){
$('tbody').append('' + td1 + '' + td2 + ''+ td3 +'')
}
function workWithUser(user){
if(user.role == 'dev'){
$('th:nth-child(3)').text('Статус');
$.ajax({
type: "GET",
url: "https://docs.google.com/spreadsheets/d/e/2PACX-1vT1I-YFGfiH80flu07zn7y965iey4QOsgo1N1GD5V1MYCaDcLgUdjFO_el2aVWRic4V_YdclCBfHGFF/pub?gid=64405821&single=true&output=csv",
dataType: "text",
success: function(data) {
csvdata = data;
tasks = $.csv.toObjects(csvdata);
utasks = tasks.filter(function(task){return (task['Ответственный'] == user.name) & (task['Ответственный'] !== '')& (task['Статус'] !== 'Завершена')});
$(utasks).each(function(key,task){
console.log(task);
drawTable(task['Название'],task['Описание'],task['Статус']);
})
}
});
}
}
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
firebase.database().ref('users/'+user.uid).on('value',function(val){
console.log(val.val());
user = val.val();
workWithUser(user);
$('table').attr('class','table-stripe ui-bar-d ui-body-d ui-responsive table-stroke ui-table ui-table-columntoggle');
});
}})