2012-10-31 18 views
6

Prereq: crea una chiave API per urlshortener a https://code.google.com/apis/console/Come faccio a goo.gl-abbreviare un URL in js?

Ci sono un sacco di documenti per i vari modi di trasformare un URL goo.gl nell'URL originale attraverso i js get api, ad esempio: here, here e here - - e almeno il primo funziona persino.

Se ho tweak che una sempre leggermente di utilizzare la insert api per convertire un URL - un URL molto piccolo, il superamento di un { "longUrl": "https://codepen.io/" } invece, però, si rompe. Provare a http://codepen.io/johan/full/EHbGy#YOUR-API-KEY-HERE se ti piace, o eseguire questo da qualche parte:

<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> 

... semplicemente risponde con un errore:

{ "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" 
     } 
    ] 
    } 
} 

Suggerimenti? (No, non funziona meglio se si modifica il parametro url.insert in un oggetto con una chiave resource.longUrl - o semplicemente si passa l'URL senza un oggetto wrapper.)

risposta

6

Non è molto chiaro nei documenti o nel messaggio di errore, ma la richiesta dovrebbe essere simile al seguente e tutto andrà bene:

var request = gapi.client.urlshortener.url.insert({ 
    'resource': {'longUrl': 'https://codepen.io/'} 
}); 
+0

Grazie! Mantenere buoni documenti è difficile quanto fare buone API. – ecmanaut

+0

@ecmanaut Cosa, vuoi dire che questo link ad un esempio di 'Risorsa URL 'non è stato utile? https://developers.google.com/url-shortener/v1/url/url#resource – doublesharp

+0

C'è un sacco di opportunità per developers.google.com per migliorare con qualcuno che ha problemi (e gli strumenti per i Webmaster di Google in grado) di ordinare i suoi 404 . Potevo vedere che si trattava di una posizione di AQ incessante a tempo pieno. – ecmanaut

1

Penso che cadere la libreria client disordinato per questo, quando si scopre che posso farlo cinque righe di coffescript invece di caricare tutto che cruft, come ho già jQuery in ogni caso: http://codepen.io/johan/pen/puJyH

api = 'https://www.googleapis.com/urlshortener/v1/url' 
api += "?key=#{key}" if key = location.search.slice 1 

$.ajax 
    url: api 
    type: 'POST' 
    data: JSON.stringify(longUrl: url) 
    contentType: 'application/json' 
    success: (got) -> 
    alert "shortened url: #{got.id}" 
+0

Nota: questa [inserire] (https://developers.google.com/url-shortener/v1/url/insert) api ha funzionato bene prima del 15 novembre, ma da allora ha fallito la richiesta di CORS OPTIONS con un errore 404, quindi il POST effettivo non può accadere. Ho presentato una segnalazione di bug sia sulla [mailing list] (https://groups.google.com/forum/?fromgroups=#!forum/google-url-shortener) che sul sito dei documenti. Il client di google js funziona ancora, in quanto si piega all'indietro per creare un iframe www.googleapis.com nascosto che fa richieste ajax non CORS rpc per conto della tua pagina. – ecmanaut

+0

grazie per questo. mi ha davvero aiutato! –

Problemi correlati