Новости‎ > ‎

Неудачи с Google SpreadSHITs

Отправлено 24 мар. 2016 г., 15:43 пользователем Denis Baskovsky
Вроде удобно: табличный редактор, доступный с любого места где есть браузер, мощный API с поддержкой для всех популярных языков, помощь от гугля. Но нет же внутри этого творения творится настоящий ад.

Казалось бы, простая задача - выгрузить CSV из приватного документа хостящегося на google drive. Что может быть проще? Ищешь доки по HTTP интерфейсу, инициализируешь токен, настраиваешь CORS через веб-морду, устанавливаешь выходной формат через &format=csv и херачишь по Ajax. Хер там. 

Тут же гугля:
Вместо нормального токена здесь новомодный JSON Web Token. А значит Oauth, с "удобной" либой gapi.
* Сранный поисковик засирает ответами с прошлой версией API V2. Повсюду предлагают простое решение которое работает только если ты расшарил доку публично, если приватно - читай доки сука!
* С экспортом в mimeType text/csv отдается только первый SHEET. Как получить второй - неизвестно. Поэтому я хоть забил feauture request чтобы эти бездельники удосужились добавить вменяемый gid для перехода по всем таблицам.
* Понятно что русский язык неофициален и неприемлем в интернете, тогда зачем отдавать response в utf-8? Хоть загуглил грязный depricated хак с JS переводом в нужной кодировке: 
decodeURIComponent(escape(response.body))
* В application/vnd.openxmlformats-officedocument.spreadsheetml.sheet формируется так называемый large string которую просто распарсить не получится

Короче потратил две (или три?) ночи, забил на это неблагодарное дело и решил реализовать это при помощи скрипта на Google App Script. Это гавнище каким походу за три года пока я к нему не прикасался совершенно не изменилось: 
дебаггер остался примитивным, интерфейс устаревшим, работает медленно и пр. И финальный штрих -  их API executable походу не работает, во всяком случае у меня оно не завелось. Однако, деплой в роли веб-приложения работает круто. Особенно радует простота с которой можно достаточно легко наваять JSON выдачу:

function doGet(request) {  
  return ContentService.createTextOutput(JSON.stringify({x:666}))
   .setMimeType(ContentService.MimeType.JSON);
}

PS. Гуглявцы те еще засранцы, именно такими быдло-действиями насильно подсаживают нас на свои их гавно сервисы.