2013-06-28 35 views
11

Tôi muốn viết một ứng dụng để rút ngắn url. Đây là mã của tôi:cách sử dụng API Google Shortener với Python

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

khi tôi chạy mã để nhận được một url nhỏ, nó ném một ngoại lệ: urllib2.HTTPError: HTTP Error 400: Bad Requests. Điều gì sai với mã này?

Trả lời

16

tôi đã cố gắng mã của bạn và không thể làm cho nó làm việc, hoặc, vì vậy tôi đã viết nó với 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 

Chỉnh sửa: Mã làm việc với 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

nhờ cho API reply.The lại urllib và urllib2 thực sự là ugly.actually, tôi đã viết các ứng dụng với các yêu cầu và nó cũng hoạt động, nhưng tại sao tôi nên thay thế urllib.urlencode bằng json.dumps? – YuYang

+0

bởi vì khóa url 'urlencode': giá trị được phân cách bởi & và những gì API Google đang mong đợi là một json giống như dữ liệu {key: value}. [urlencode] (http://docs.python.org/2/library/urllib.html#urllib.urlencode) – PepperoniPizza

+0

có lẽ tôi nên đọc tài liệu api cẩn thận hơn.Cảm ơn bạn rất nhiều .... – YuYang

2

Tôi biết câu hỏi này là cũ nhưng nó cao trên Google.

Một điều cần thử là thư viện pyshorteners nó rất đơn giản để thực hiện.

Dưới đây là một liên kết:

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

2

Với một phím 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() 
Các vấn đề liên quan