2012-10-31 17 views
6

Prereq: utwórz własne klucz API dla urlshortener na https://code.google.com/apis/console/Jak mogę goo.gl skrócić adres URL w js?

Istnieje wiele docs dla różnych sposobów toczenia goo.gl URL do oryginalnego adresu URL za pomocą js get API, np: here, here i here - - a przynajmniej pierwszy działa.

Gdybym uszczypnąć, że jeden bardzo nieznacznie używać insert api przekonwertować url do drobny url, przekazując { "longUrl": "https://codepen.io/" } zamiast jednak łamie. Wypróbuj go na http://codepen.io/johan/full/EHbGy#YOUR-API-KEY-HERE jeśli chcesz, albo uruchomić to gdzieś:

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

... to po prostu reaguje z błędem:

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

sugestie? (Nie, to nie działa lepiej, jeśli zmienisz parametr url.insert na obiekt z kluczem resource.longUrl - lub po prostu przekazujesz adres URL bez obiektu opakowania).

Odpowiedz

6

W dokumencie lub komunikacie o błędzie nie jest to zbyt jasne, ale twoja prośba powinna wyglądać następująco a wszystko będzie dobrze:

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

Dzięki! Utrzymanie dobrych dokumentów jest tak trudne, jak tworzenie dobrych interfejsów API. – ecmanaut

+0

@ecmanaut Co, masz na myśli, że ten link do przykładu 'Resource URL 'nie był pomocny? https://developers.google.com/url-shortener/v1/url/url#resource – doublesharp

+0

Istnieje wiele możliwości, aby developer.google.com poprawił się dzięki komforcie (i narzędziom Google Webmaster Tools), aby uporządkować 404 . Widziałem, że jest to nieustanne stanowisko QA w pełnym wymiarze godzin. – ecmanaut

1

myślę wpadnę niechlujny biblioteki klienta dla tego, kiedy okazuje się, że mogę to zrobić pięć linii coffeescript zamiast załadunku wszystkich to okrakiem, ponieważ i tak mam już jQuery: 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

Uwaga: ten plik [insert] (https://developers.google.com/url-shortener/v1/url/insert) api działał poprawnie przed 15 listopada, ale od tego czasu nie udało się uzyskać żądania CORS OPTIONS z błędem 404, więc rzeczywisty POST nie może się zdarzyć. Złożyłem zgłoszenie błędu zarówno na [liście dyskusyjnej] (https://groups.google.com/forum/?fromgroups=#!forum/google-url-shortener), jak i na stronie docs. Klient google js nadal działa, ponieważ wygina się do tyłu, aby utworzyć ukryty element iframe, który wykonuje zapytania rpc ajax spoza CORS w imieniu strony. – ecmanaut

+0

dzięki za to. to naprawdę mi pomogło! –