January 30, 2011Using goo.gl with jsonlibAn example using jsonlib to invoke an inconvenient HTTP API from Javascript. When Google released the goo.gl URL shortener API recently, they did not provide a JSONP API, so it is not convenient to make goo.gl URLs directly from Javascript. But then I wanted to implement a goo.gl-based "Save As Short Url" feature in the save box of Heidi's Sudoku Chrome App. The app is 100% Javascript and isn't even hosted on its own web server. What to do? It is easy to do cross-domain HTTP by bouncing JSONP requests off call.jsonlib.com. With jsonlib, invoking the goo.gl API is just a few lines of code. How To Do It Here is how the goo.gl API works:
In Javascript, it is inconvenient to POST data that is not formatted as "application/x-www-form-urlencoded", and it is hard to use cross-domain HTTP requests that do not return script-formatted JSONP services. However, call.jsonlib.com solves both of these problems easily. Here is the code for a goo.gl shortener wrapper that shows how it can be done with a single call to jsonlib.fetch: <script src="http://call.jsonlib.com/jsonlib.js"></script> <script> function googlurl(url, cb) { jsonlib.fetch({ url: 'https://www.googleapis.com/urlshortener/v1/url', header: 'Content-Type: application/json', data: JSON.stringify({longUrl: url}) }, function (m) { var result = null; try { result = JSON.parse(m.content).id; if (typeof result != 'string') result = null; } catch (e) { result = null; } cb(result); }); } // Make a short URL for a nicely written book. googlurl('http://www.amazon.com/Numerical-Linear-Algebra-Lloyd-' + 'Trefethen/dp/0898713617', function(s) { alert(s); }); </script> Voila! Short URLs in a single function call. Play with the code here if you like. Posted by David at January 30, 2011 11:53 AMComments
First, thanks for sharing David. I have been testing your solution for a while. But, what I've found is that for some reason Goo.gl is creating 3 different shortened URLs with this method. Do you have any idea why this is happening, and can you think of a method to prevent this? You will only notice this of course if you connect the Goo.gl shortening to your Google Account. You find my solution where I'm testing this here: The only difference between your code and mine is that I have added a Google API Key and OAuthToken to the url like this: url: 'https://www.googleapis.com/urlshortener/v1/url?key=myGoogleAPIKey&oauth_token=tokenGenerated' Posted by: Eivind Savio at April 24, 2011 08:49 AMPost a comment
|
Copyright 2011 © David Bau. All Rights Reserved. |