我使用Google API检索goo.gl短链接。 这是用Python编写的代码
#!/usr/bin/python3
import urllib.parse
import requests
import time
def main():
"""
def get_json_field(url):
f = urllib.request.urlopen(url)
reader = codecs.getreader("utf-8")
values = json.load(reader(f))
url_encoded = urllib.parse.quote_plus(values['nextPageToken'])
return url_encoded
"""
def get_gapi_token(url):
r = requests.post(url, data = {'client_id':'mygapiClientID', 'client_secret':'mygapiClientSecret',
'refresh_token':'mygapiRefreshToken',
'grant_type':'refresh_token'})
gapi_token = r.json()
return gapi_token['access_token']
def parse_next():
lines = [line.rstrip('\n') for line in open('tokens.txt')]
with open('data.json', 'a') as f:
for i,val in enumerate(lines):
lines[i] = urllib.parse.quote_plus(val)
api_url = test_url + '&start-token=' + lines[i]
r = requests.get(api_url)
f.write(r.text)
gapi_url = 'https://accounts.google.com/o/oauth2/token'
test_url = 'https://www.googleapis.com/urlshortener/v1/url/history?access_token='+get_gapi_token(gapi_url)
fn = open('data.json','w')
fapi_url = test_url
r = requests.get(fapi_url)
fn.write(r.text)
fn.close()
parse_next()
start_time = time.time()
main()
print("--- %s seconds ---" % (time.time() - start_time))
如何从JSON响应中解析 nextPageToken 并在进一步的请求中使用它?而不是加载项目 从文本文件开始,现在就完成了。
如何在没有递归调用的情况下创建该函数?
P.S。虽然我找到了问题的解决方案,但我还是 感兴趣的是用#34;标准的#34; Google API Python SDK。 就像它实现here
一样答案 0 :(得分:0)
正确的解决方案就在这里。 我们下面有一些糟糕的代码, 但无论如何它完成了我需要的一切
#!/usr/bin/python3
import codecs
import json
import urllib.parse
import requests
import time
def main():
def get_json_field(turl, num):
tokens_list = [''] * num
f = urllib.request.urlopen(turl)
reader = codecs.getreader("utf-8")
values = json.load(reader(f))
url_encoded = urllib.parse.quote_plus(values['nextPageToken'])
tokens_list[0] = url_encoded
for i in range (1,num):
g = urllib.request.urlopen(turl+'&start-token='+tokens_list[i-1])
reader = codecs.getreader("utf-8")
local_values = json.load(reader(g))
url_encoded = urllib.parse.quote_plus(local_values['nextPageToken'])
tokens_list[i] = url_encoded
return tokens_list
def get_gapi_token(url):
r = requests.post(url, data = {'client_id':'mygapiClientID',
'client_secret':'mygapiSecret',
'refresh_token':'mygapiRefreshToken',
'grant_type':'refresh_token'})
gapi_token = r.json()
return gapi_token['access_token']
def parse_next(n):
lines = [''] * n
lines = get_json_field(test_url,n)
with open('data.json', 'a') as f:
for i,val in enumerate(lines):
api_url = test_url + '&start-token=' + lines[i]
r = requests.get(api_url)
f.write(r.text)
gapi_url = 'https://accounts.google.com/o/oauth2/token'
test_url = 'https://www.googleapis.com/urlshortener/v1/url/history?access_token='+get_gapi_token(gapi_url)
fn = open('data.json','w')
fapi_url = test_url
r = requests.get(fapi_url)
fn.write(r.text)
fn.close()
parse_next(7)
start_time = time.time()
main()
print("--- %s seconds ---" % (time.time() - start_time))
请进来,讨论今晚用Python写的自制的意大利面条代码: - )
谢谢!