11

我想写一个应用程序来缩短网址。这是我的代码:

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

当我运行代码以获取一个小 url 时,它会引发异常:urllib2.HTTPError: HTTP Error 400: Bad Requests. 这段代码有什么问题?

4

3 回答 3

15

我尝试了您的代码,但也无法使其正常工作,因此我使用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

编辑:使用 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']
于 2013-06-28T05:04:29.197 回答
5

我知道这个问题很老,但它在谷歌上很高。

要尝试的另一件事是 pyshorteners 库,它实现起来非常简单。

这是一个链接:

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

于 2015-07-31T03:14:36.127 回答
5

使用 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()
于 2017-08-13T16:38:56.080 回答