创建Google缩短的网址,更新我的CSV文件

时间:2017-07-17 08:28:10

标签: python-3.x pandas url-rewriting google-api-python-client google-url-shortener

我已经获得了大约3,000个网址的列表我试图创建Google缩短的链接,这个想法是这个CSV有一个链接列表,我希望我的代码输出缩短的链接原始网址旁边的列。

我一直在尝试修改此网站上的代码here,但我还不够熟练,无法让它发挥作用。

这是我的代码(我通常不会发布API密钥,但是原来已经在此网站上公开发布的人):

import json
import pandas as pd

df = pd.read_csv('Links_Test.csv')
def shorternUrl(my_URL):
    API_KEY = "AIzaSyCvhcU63u5OTnUsdYaCFtDkcutNm6lIEpw"
    apiUrl = 'https://www.googleapis.com/urlshortener/v1/url'
    longUrl = my_URL
    headers = {"Content-type": "application/json"}
    data = {"longUrl": longUrl}
    h = httplib2.Http('.cache')
    headers, response = h.request(apiUrl, "POST", json.dumps(data), headers)
    return response


for url in df['URL']:
    x = shorternUrl(url)
    # Then I want it to write x into the column next to the original URL

但在我开始弄清楚如何将新网址写入CSV文件之前,我此时只会遇到错误。

以下是一些示例数据:

URL
www.apple.com
www.google.com
www.microsoft.com
www.linux.org

感谢您的帮助,

2 个答案:

答案 0 :(得分:3)

我认为问题是您没有在请求中包含API密钥。顺便说一下,certifi包允许您保护与链接的连接。您可以使用pip install certifipip urllib3[secure]

来获取它

在这里,我创建了自己的API密钥,因此您可能希望将其替换为您的密钥。

from urllib3 import PoolManager
import json
import certifi

sampleURL = 'http://www.apple.com'

APIkey = 'AIzaSyD8F41CL3nJBpEf0avqdQELKO2n962VXpA'
APIurl = 'https://www.googleapis.com/urlshortener/v1/url?key=' + APIkey
http = PoolManager(cert_reqs = 'CERT_REQUIRED', ca_certs=certifi.where())

def shortenURL(url):
    data = {'key': APIkey, 'longUrl' : url}
    response = http.request("POST", APIurl, body=json.dumps(data), headers= {'Content-Type' : 'application/json'}).data.decode('utf-8')
    r = json.loads(response)
    return (r['id'])

解码部分将响应对象转换为字符串,以便我们可以将其转换为JSON并检索数据。

从那以后,您可以将数据存储到另一列,依此类推。

对于sampleUrl,我从函数中找回了https(goo.gl/nujb)。

答案 1 :(得分:2)

我在这里找到了一个解决方案:

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

从链接页面复制的示例:

from pyshorteners import Shortener

url = 'http://www.google.com'
api_key = 'YOUR_API_KEY'
shortener = Shortener('Google', api_key=api_key)
print "My short url is {}".format(shortener.short(url))