In preparation for the upcoming solar eclipse, I was asked for a list of various businesses across the county. It'd been years since I went through and audited all the businesses and there is quite a bit of small business turnover around here. I noticed recently that Google had released new Street View images and I began to utilize that to go through those areas and verify or update businesses and other significant locations. The issue was that I wouldn't know what areas had been recently updated or even available. After searching for a way to get that information, I found that google has an API that can return JSON formatted data on image capture dates based on input information. So if I could use my existing road layer to determine a point to feed into the API, I could get an image capture date.
I discussed it with my colleagues in #GISChat on Twitter. Several people showed interest.
My process was to use the mid-point of every road segment. I knew I could pull and massage that information using available processing tools from QGIS, but I couldn't see a way to feed it in the Google API, pull in the result, and parse it into attributes. I considered doing this in pure Python script to run periodically and give me an alert whenever Google had an update published; I may modify this to do this for me at some point, but I realized that this solution wouldn't be accessible to people who didn't feel comfortable enough in Python to configure the variables; worse would be if bad input data or an incorrect API key would cost them time and possibly a lot of money; I wanted to build in safety measures to avoid that.
I began to build an interface for a QGIS plugin as I've done in the past, but for the benefits it offers, I really wanted the user to be able to export it directly into their database as a joinable table if they preferred; developing as a processing plugin affords this; it would also give them the option of tying it into their own processing models.
"Code is read more often than it is written." Having written code in the past the over time would get gradually confusing and a bit messy, I kept this mantra in mind. I'm very happy with the readability and am not afraid to open this back up in a few years for fear of not knowing what is going on. There's still a couple of things I wish the interface could do better (mainly a better alerting method), but it meets the goals and has passed tests on several platforms and configurations.