Show HN: Turn a Google Spreadsheet into an API
sheetsu.com
sheetsu.com
It's great in a pinch. My use-case was a spreadsheet that others in my organization wanted to edit, then we'd pull the data onto a web page and display nicely. It worked, but eventually we had to set up a secondary server to cache the spreadsheet result because pulling directly from Google in realtime was too unreliable.
I made this very basic plugin for Jekyll:
https://github.com/netlify/jekyll-gdrive
That'll let you use a Google spreadsheet as a datasource and expose the data to your liquid templates.
Combine it with something like https://www.netlify.com that'll run the builds for you and let you trigger builds via webhooks, and you have a Google spreadsheet based publishing engine where the final sites are completely static and live straight on a CDN.
Used it for one site where we used the scripting options of Google spreadsheets to add a "Publish Now" image button to the sheet, so in the end user could edit the the sheet, and then press "Publish" to trigger a build+deploy.
If the users are already used to spredsheets, it can be a really handy little anti CMS :)
[disclaimer: I'm a founder of netlify]
Really great use case
Secondly, while the load page and then load the data in as JS approach definitely works, I found that just pushing the data in as HTML on the server side was easier to cache and faster to load.
1 - https://gist.github.com/mbuckbee/0ad3bd150e705c769c50
This was sufficient to handle thousands of requests per hour with a page load time of less than 250ms
Then we used it as backens for a blog for my University team as we were already using Drive, being each entry a google docs document [2]
[1] https://github.com/franciscop/drive-db [2] http://www.makersupv.com/
Here is a sample (from a github employee) that I've used in the past. Source: https://github.com/jlord/hack-spots and live site: jlord.us/hack-spots/#info - not sure how they are caching the spreadsheet, but I've never seen it not perform (not sure about concurrent users or whatever though).
That is, it would be great to keep my data in a google sheet and transform it into a static json file that lives in my app source, but then if I need to work offline, all I can do is edit the json and remember to reflect the changes into the sheet later.
I don't suppose anyone has found a workflow that solves this?
I made a video showing how to send a Raspberry Pi's temperature sensor data to a Google Sheet using Cloudstitch. https://www.youtube.com/watch?v=Cqa9Zkm7pCU
2. Your docs say: http://sheetsu.com/apis/12345/column/:column_name
Is ':' a documentation convention somewhere that I've not come across? I tried:
http://sheetsu.com/apis/12345/column/:Email
http://sheetsu.com/apis/12345/column/:email
until I realised it was just: http://sheetsu.com/apis/12345/column/Emailhttp://jsbin.com/zaberiqami/1/edit?js,output
The top part of the code is separated from the bottom plumbing, and is sprinkled with comments in Dutch for my students to edit ('8th grade', Dutch 2VWO).
I actually used it more as an example and inspiration to talk about databases in general. The group is a mix of students from the previous year; by setting the bar high and encouraging them to change the parts they knew something about, I could gauge their individual skill level a bit. Pink product listings ensued. JSBin really is an awesome tool I couldn't do without.
Thanks!
[1] http://www.convalesco.org/
UPDATE: A good use case is to use the HTML form to store subscribe/notify-me emails for landing pages. I was about to build a YAML file or use SQLite3 to store emails via form, but this is so much more convenient.
One major feature I would like is the ability to specify cells for I/O. Eg in some sort of "my api" console I could say "/custom_api, {stuff:A5, things:A6}, B2". Then requests to GET /custom_api would plug in the key-value of "stuff" into A5 and "things" into A6 and then respond with whatever is in B2.
Once more useful features are up, the ability to disable parts of the API (eg dump the whole spreadsheet) would be necessary.
Obviously you wouldn't build a large app with this, but I could see many traditional businesses using it for more than just prototyping.
1) https://docs.google.com/spreadsheets/d/1iUVXmC04KIU5K1Osb_4H...
I twitted her, but no response from her. If you have contact with her and she still needs it, please let her now about Sheetsu.
If you were to extend the functionality to include full CRUD on entities, I think I would start using it immediately on some proof of concept work.
For instance, being able to GET, PUT/PATCH, and DELETE by id (or per row) would be awesome.
Thanks again for the nice MVP work!
https://github.com/techjacker/google-docs-cms
On my server I have a cron script running which pulls the new JSON if there have been any changes.
ex. when you put =Sheet2!A1 and get that via API, you will get the value of A1 cell in Sheet2.
>Intercept XMLHttpRequest to fake a REST server based on JSON data. Use it on top of Sinon.js to test JavaScript REST clients on the browser side (e.g. single page apps) without a server.
I'll check it out this weekend, but man... thanks for sharing!
Anyways, it's really handy for simple and non traffic-intensive projects. Well done!
Why not speak normal English and say "access a Google Spreadsheet via an API", or something?
Also, relevant xkcd. https://xkcd.com/1053/
Otherwise, a neat idea. Needs a Office 365 connector too.
yes json it's convenient. no json isn't stateful, unless you transmit operations and allow API discovery, not just data.