December 7, 2007

Using Google Gadgets to Cache Images

Google Gadgets API has a lot of interesting features for creating gadgets, but you could also use it to improve your site. Instead of creating gadgets that can be added to iGoogle and embedded into other web pages, you're using Google Gadgets API as a proxy for some features that are difficult to add on the client side.

One of the most interesting features is caching images. Let's say you upload a big image to your site and you suddenly get a lot of visitors or you dynamically generate a chart of your traffic stats every 30 minutes. Google Gadgets API has a useful function:
_IG_GetImage(url, {refreshInterval:num}) that returns the cached version of an image from Google's servers.

Using the function, I built a pseudo-gadget has two parameters: the image URL (up_imgurl) and the refresh interval in seconds (up_update), which is optional. Here's an example of gadget call:

http://gmodules.com/ig/ifr?up_update=60&
up_imgurl=http://www.parislive.net/eiffelwebcam1.jpg&
url=http://hosting.gmodules.com/ig/gadgets/file/114716457819959241692/cache-image.xml




The example above uses an image from a Paris webcam that's updated every two seconds, but it's cached on Google's servers every 60 seconds. That means you only need to include an iframe that calls a gadget (hosted by Google), add the two parameters and make sure to add the width/height of the image in the iframe's style attribute.

4 comments:

  1. Interesting. Is there perhaps an even easier way to do it?

    I replaced the actual image URLs your gadget delivered with another image to cache. The URL for that image displayed fine here (though I don't know how stable that hack is).

    ReplyDelete
  2. Yes, I think
    http://gmodules.com/ig/proxy?url=ImageUrl should also work, but you probably need to do some tricks to refresh the cached image (like appending some random number as a fake parameter).

    ReplyDelete
  3. WOW! That is amazing. Can't believe how quick it's being cached on Google.

    ReplyDelete