use open-uri to make it easier to configure timeouts and the like, but still wrap results with api cache