2013-06-28 17 views
11

Chcę napisać aplikację, aby skrócić adres URL. To jest mój kod:jak używać Google Shortener API z Pythonem

import urllib, urllib2 
import json 
def goo_shorten_url(url): 
    post_url = 'https://www.googleapis.com/urlshortener/v1/url' 
    postdata = urllib.urlencode({'longUrl':url}) 
    headers = {'Content-Type':'application/json'} 
    req = urllib2.Request(
     post_url, 
     postdata, 
     headers 
     ) 
    ret = urllib2.urlopen(req).read() 
    return json.loads(ret)['id'] 

kiedy uruchomić kod, aby uzyskać drobny url, zgłasza wyjątek: urllib2.HTTPError: HTTP Error 400: Bad Requests. Co jest nie tak z tym kodem?

Odpowiedz

16

Próbowałem swój kod i nie mógł zrobić to działało, więc napisałem go z requests:

import requests 
import json 

def goo_shorten_url(url): 
    post_url = 'https://www.googleapis.com/urlshortener/v1/url' 
    payload = {'longUrl': url} 
    headers = {'content-type': 'application/json'} 
    r = requests.post(post_url, data=json.dumps(payload), headers=headers) 
    print r.text 

Edycja: Kod pracy z urllib:

def goo_shorten_url(url): 
    post_url = 'https://www.googleapis.com/urlshortener/v1/url' 
    postdata = {'longUrl':url} 
    headers = {'Content-Type':'application/json'} 
    req = urllib2.Request(
     post_url, 
     json.dumps(postdata), 
     headers 
    ) 
    ret = urllib2.urlopen(req).read() 
    print ret 
    return json.loads(ret)['id'] 
+0

dzięki za reply.The API urllib i urllib2 jest naprawdę ugly.actually, pisałem aplikacja z żądaniami i działa, ale dlaczego mam zastąpić urllib.urlencode json.dumps? – YuYang

+0

ponieważ 'urlencode' przekazuje klucz: wartość oddzielona przez & i to, czego spodziewa się google API to json jak dane {klucz: wartość}. [urlencode] (http://docs.python.org/2/library/urllib.html#urllib.urlencode) – PepperoniPizza

+0

Może powinienem uważniej przeczytać dokument api. dziękuję bardzo ... – YuYang

2

Wiem, że to pytanie jest stare, ale w Google jest wysokie.

Inną rzeczą, którą należy wypróbować, jest biblioteka pyshorteners, którą można bardzo łatwo zaimplementować.

Oto link:

https://pypi.python.org/pypi/pyshorteners

2

z kluczem API:

import requests 
import json 

def shorten_url(url): 
    post_url = 'https://www.googleapis.com/urlshortener/v1/url?key={}'.format(API_KEY) 
    payload = {'longUrl': url} 
    headers = {'content-type': 'application/json'} 
    r = requests.post(post_url, data=json.dumps(payload), headers=headers) 
    return r.json() 
Powiązane problemy