One of those features I wanted is the ability to upload some data to the blog periodically, and then have that data available to people reading the blog. For instance, I'd like to have the weather forecast for the next few days show up. I can “scrape” that sort of data from other web sites, then package it up for display on my blog – but to do that, I need to upload that data to the blog server somehow. Many blogging platforms provide an API for that sort of thing, but Ghost does not. I spent quite a bit of time on the Ghost forums, researching the issue and asking questions about it. The conclusion from expert Ghost developers: it can't be done.
This morning I came up with a way to do it, and I whipped up a prototype and tested it – it works! Best of all, it's easy as can be. Here's how it works:
- I created a special “bucket” on Amazon's AWS S3 storage service. This bucket has the name “assets.www.slightlyloony.com”.
- I created a DNS record (a CNAME record) that aliases “assets.www.slightlyloony.com” to the S3 storage URL.
- I wrote a program that uploads the data of interest to a particular set of files within the S3 bucket.
- In my client side code (running in the blog reader's browser), whenever I want to access some of that data, I use the URL “http://assets.www.slightlyloony.com/[file name]” to get it. The browser thinks it's on the same host, because “assets.www.slightlyloony.com” is a subdomain of “www.slightlyloony.com”, where the browser loaded the page from. No cross-site scripting rules are violated by this.