1

我有一個約3,000個網址的列表我試圖創建谷歌縮短鏈接,這個想法是這個CSV有一個鏈接列表,我希望我的代碼輸出原始網址旁邊列中的縮短鏈接。創建谷歌縮短的URL,更新我的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 

感謝你的幫助,

+0

據我瞭解,目前您shorternUrl功能不跑呢?即使你只是嘗試了shortnUrl('www.google.com'),你會得到一個錯誤?看起來像一個非常類似的問題:https://stackoverflow.com/questions/11278049/google-url-shortener-api-with-python-returning-error有幫助嗎? –

+0

@JohnFaben,是的,這是我在我的問題中鏈接到的問題。我試圖從這個示例問題中創建一些適用於我的代碼。是的,你也是對的,我的功能根本沒有運行。感謝您的評論。 – SDS

回答

2

我認爲這個問題是,你因此未包括在請求中的API密鑰。順便提一句,certifi包允許您確保鏈接的連接。您可以使用pip install certifipip urllib3[secure]

這裏我創建了我自己的API密鑰,所以你可能想用你的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)。

+0

我無法得到這個工作。當我嘗試shortenURL(sampleURL)時,我得到一個很長的錯誤信息,以這個「TypeError:urlopen得到多個值的關鍵字參數'身體'」 - 任何想法我做錯了什麼?我按照你的指示導入了所有的圖書館......謝謝! – SDS

+0

我想我發現了這個問題。在我使用的Conda中,任何小於urllib3 1.10的值都會給出我收到的錯誤。我的Cona不會讓我升級到1.10,這些錯誤/錯誤已解決。 – SDS

+0

我的可用於代碼的urlib3版本是1.14.1。這是我默認安裝PyCharm的原因,因爲當我使用'conda update urllib3'時,它找不到這樣的軟件包。 在這種情況下,您可能需要使用'conda install urllib3'命令。 –

1

我發現這裏的解決方案:

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))