2012-10-31 2 views
6

Prereq: Erstellen Sie sich einen API-Schlüssel für urlshortener bei https://code.google.com/apis/console/Wie kann ich eine URL in js go.gl kürzen?

Es gibt viele Dokumente für verschiedene Möglichkeiten, über die js get api eine goo.gl URL in die ursprüngliche URL drehen, zB: here, here und here - - und zumindest funktioniert der erste sogar.

Wenn ich, dass man immer so leicht zwicken die insert api verwenden eine URL - eine kleine URL zu konvertieren, eine { "longUrl": "https://codepen.io/" } anstatt vorbei, aber es bricht. Versuchen Sie es bei http://codepen.io/johan/full/EHbGy#YOUR-API-KEY-HERE wenn Sie mögen, oder diese irgendwo laufen:

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

... es reagiert nur mit einem Fehler:

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

Verbesserungsvorschläge? (Nein, ist es nicht besser, wenn Sie den url.insert Parameter auf ein Objekt ändern mit einer resource.longUrl Schlüssel -. Oder Weitergabe nur die URL ohne Wrapper-Objekt)

Antwort

6

Es ist nicht super klar in der Dokumentation oder eine Fehlermeldung, aber Ihre Anfrage sollte wie folgt aussehen und alles wird gut:

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

Danke! Die Pflege guter Dokumente ist genauso schwierig wie das Erstellen guter APIs. – ecmanaut

+0

@ecmanaut Was, du meinst, dieser Link zu einem Beispiel einer 'URL Resource' war nicht hilfreich? https://developers.google.com/url-shortener/v1/url/url#resource – doublesharp

+0

Es gibt eine Menge Möglichkeiten für developers.google.com, sich mit jemandem zu verbessern, der (und Google Webmaster Tools fähig) in der Lage ist, seine 404s zu sortieren . Ich konnte sehen, dass dies eine ununterbrochene Vollzeit-QA-Position ist. – ecmanaut

1

ich denke, ich werde die chaotische Client-Bibliothek für diese fallen, wenn es stellt sich heraus, dass ich es fünf Linien von Coffeescript alle statt Laden tun das cruft, wie ich sowieso schon jQuery habe: 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

Hinweis: Diese [einfügen] (https://developers.google.com/url-shortener/v1/url/insert) API funktionierte vor dem 15. November gut, hat aber seither die CORS OPTIONS-Anfrage mit einem 404-Fehler nicht bestanden Der eigentliche POST kann nicht passieren. Ich habe einen Fehlerbericht sowohl auf der [Mailingliste] (https://groups.google.com/forum/?fromgroups=#!forum/google-url-shortener) als auch auf der Docs-Website eingereicht. Der Google js-Client funktioniert immer noch, da er sich rückwärts biegt, um einen versteckten www.iframeapis.com-iframe zu erstellen, der im Auftrag Ihrer Seite nicht-CORS-rpc-ajax-Anfragen bearbeitet. – ecmanaut

+0

danke dafür. es hat mir wirklich geholfen! –

Verwandte Themen