Подтвердить что ты не робот

Как использовать API Google Shortener с Python

Я хочу написать приложение, чтобы сократить URL-адрес. Это мой код:

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. Что не так с этим кодом?

4b9b3361

Ответ 1

Я пробовал ваш код и не мог заставить его работать, поэтому я написал его с помощью 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']

Ответ 2

Я знаю, что этот вопрос старый, но он высокий на Google.

Еще одна вещь, которую нужно попробовать - это библиотеку pyshorteners, которую очень просто реализовать.

Вот ссылка:

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

Ответ 3

С помощью ключа 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()