Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 创建谷歌缩短的URL,更新我的CSV文件_Python 3.x_Pandas_Url Rewriting_Google Api Python Client_Google Url Shortener - Fatal编程技术网

Python 3.x 创建谷歌缩短的URL,更新我的CSV文件

Python 3.x 创建谷歌缩短的URL,更新我的CSV文件,python-3.x,pandas,url-rewriting,google-api-python-client,google-url-shortener,Python 3.x,Pandas,Url Rewriting,Google Api Python Client,Google Url Shortener,我有一个大约3000个URL的列表,我正在尝试创建Google的缩短链接,其想法是这个CSV有一个链接列表,我希望我的代码在原始URL旁边的列中输出缩短的链接 我一直在试图修改这个网站上的代码,但我没有足够的技能让它工作 以下是我的代码(我通常不会发布API密钥,但提出此问题的原始人已经将其公开发布在该网站上): 但我只是在这一点上出错,甚至在我开始弄清楚如何将新URL写入CSV文件之前 以下是一些示例数据: URL www.apple.com www.google.com www.micros

我有一个大约3000个URL的列表,我正在尝试创建Google的缩短链接,其想法是这个CSV有一个链接列表,我希望我的代码在原始URL旁边的列中输出缩短的链接

我一直在试图修改这个网站上的代码,但我没有足够的技能让它工作

以下是我的代码(我通常不会发布API密钥,但提出此问题的原始人已经将其公开发布在该网站上):

但我只是在这一点上出错,甚至在我开始弄清楚如何将新URL写入CSV文件之前

以下是一些示例数据:

URL
www.apple.com
www.google.com
www.microsoft.com
www.linux.org
谢谢你的帮助


Me

我认为问题在于请求中没有包含API密钥。顺便说一下,
certifi
软件包允许您保护到链接的连接。您可以使用
pip-install-certifi
pip-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

我认为问题在于请求中没有包含API密钥。顺便说一下,
certifi
软件包允许您保护到链接的连接。您可以使用
pip-install-certifi
pip-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

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

从链接页面复制的示例:

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

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

从链接页面复制的示例:

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

我想现在你的ShorterURL函数根本没有运行?也就是说,即使你尝试缩短URL('www.google.com'),你也会出错吗?看起来是一个非常类似的问题:这有帮助吗?@JohnFaben,是的,这是我在问题中链接到的问题。我试图从这个示例问题出发,创建一些适合我的代码。是的,你也说得对,我的函数根本没有运行。谢谢你的评论。我想目前你的ShorterURL函数根本没有运行?也就是说,即使你尝试缩短URL('www.google.com'),你也会出错吗?看起来是一个非常类似的问题:这有帮助吗?@JohnFaben,是的,这是我在问题中链接到的问题。我试图从这个示例问题出发,创建一些适合我的代码。是的,你也说得对,我的函数根本没有运行。谢谢你的评论。我不能让它工作。当我尝试shortenURL(sampleURL)时,我会收到一条以“TypeError:urlopen为关键字参数'body'获取了多个值”结尾的长错误消息-知道我做错了什么吗?我按照你的指示导入了所有库。。。非常感谢。我想我发现了问题所在。在我使用的Conda中,任何小于urllib3 1.10的内容都会给出我得到的错误。我的Cona不允许我升级到1.10版本,在那里可以解决这些错误/bug。我的urlib3版本可用于代码是1.14.1。我想这是我安装PyCharm时的默认设置,因为当我使用
conda update urllib3
时,它没有找到这样的包。在这种情况下,您可能希望改用
conda install urllib3
命令。这是最好的解决方案,Pyshortner的时间限制为0.5秒,而我的列表很长,因此一直失败。这种方法甚至可以缩短2500多个URL的列表。我无法让它工作。当我尝试shortenURL(sampleURL)时,我会收到一条以“TypeError:urlopen为关键字参数'body'获取了多个值”结尾的长错误消息-知道我做错了什么吗?我按照你的指示导入了所有库。。。非常感谢。我想我发现了问题所在。在我使用的Conda中,任何小于urllib3 1.10的内容都会给出我得到的错误。我的Cona不允许我升级到1.10版本,在那里可以解决这些错误/bug。我的urlib3版本可用于代码是1.14.1。我想这是我安装PyCharm时的默认设置,因为当我使用
conda update urllib3
时,它没有找到这样的包。在这种情况下,您可能希望改用
conda install urllib3
命令。这是最好的解决方案,Pyshortner的时间限制为0.5秒,而我的列表很长,因此一直失败。这种方法甚至可以缩短2500多个URL的列表。