How do I goo.gl-shorten a url in js?
goo.gl, google-client, javascript
Solution
It's not super clear in the docs or error message, but your request should look like the following and all will be well:
var request = gapi.client.urlshortener.url.insert({
'resource': {'longUrl': 'https://codepen.io/'}
});
Problem
Prereq: create yourself an API key for urlshortener at https://code.google.com/apis/console/ There are lots of docs for various ways of turning a goo.gl url into the original URL via the js get api, e g: here, here and here -- and at least the first one even works. If I tweak that one ever so slightly to use the insert api to convert a url to a tiny url, passing a `{ "longUrl": "https://codepen.io/" }` instead, though, it breaks. Try it at http://codepen.io/johan/full/EHbGy#YOUR-API-KEY-HERE if you like, or run this somewhere: ``` <script> var api_key = 'YOUR-API-KEY-HERE'; function makeRequest() { var request = gapi.client.urlshortener.url.insert({ 'longUrl': 'https://codepen.io/' }); request.execute(function(response) { alert(JSON.stringify(window.got = response)); }); } function load() { gapi.client.setApiKey(api_key); gapi.client.load('urlshortener', 'v1', makeRequest); } </script> <script src="https://apis.google.com/js/client.js?onload=load"></script> ``` ...it just responds with an error: ``` { "code": 400 , "message": "Required" , "data": [ { "domain": "global" , "reason": "required" , "message": "Required" , "locationType": "parameter" , "location": "resource.longUrl" } ] , "error": { "code": 400 , "message": "Required" , "data": [ { "domain": "global" , "reason": "required" , "message": "Required" , "locationType": "parameter" , "location": "resource.longUrl" } ] } } ``` Suggestions? (No, it doesn't work any better if you change the `url.insert` parameter to an object with a `resource.longUrl` key – or just passing the url without a wrapper object.)