如何改善这个" raw" Google API使用情况?

时间:2018-04-06 18:10:40

标签: python json python-3.x api google-api

我使用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

一样

1 个答案:

答案 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写的自制的意大利面条代码: - )

谢谢!