如何解决使用 API 通过 python 获取数据
我使用此代码通过 API 获取数据。如果您回答我的问题,我将不胜感激。我收到此错误回溯(最近一次通话) 输出: 44 # 确定结果和页面数据。 JSON normalize 将所有键转换为 csv 输出的标头
代码中的第 46 行: p_total = TypeError: 'NoneType' 对象不可下标
import http.client,json,csv,requests
import pandas as pd
from pandas import json_normalize
client_id = 'My client ID'
client_secret = 'My client secret'
def get_token():
conn = http.client.HTTPSConnection("api.ipot")
payload = "client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}&grant_type=client_credentials".format(CLIENT_ID=client_id,CLIENT_SECRET=client_secret)
headers = {
'content-type': "application/x-www-form-urlencoded"
}
conn.request("POST","/v4/oauth2/token",payload,headers)
res = conn.getresponse()
token_raw = res.read()
data_parsed = json.loads(token_raw.decode("utf-8"))
access_token = data_parsed['access_token']
conn.close()
return (access_token)
conn = http.client.HTTPSConnection("api.ipot")
payload = ""
headers = {'Authorization': "Bearer token".format(TOKEN=str(get_token())),}
#######
## Set filters,parameters and define the api request.
endpoint = '/v4/metrics/digital/brands?'
page_size = '&page[size]=10' # Do not alter
page_number = '&page[number]=1' # Do not alter
start_date = 'filter[start_date]=2021-05-01'
end_date = '&filter[end_date]=2021-07-14'
includes ='&include=actions_facebook_video_likes,facebook_video_shares,facebook_likes'
params = start_date + end_date + filters + includes
api_request = endpoint + params + page_size
conn.request("GET",api_request + page_number,headers,)
res = conn.getresponse()
request_id = res.headers.get('X-Request-ID')
request_datetime = res.headers.get('Date')
print('\r\nRequest ID: {REQUEST_ID}\r\nDatetime: {REQUEST_DATETIME}\r\nStatus:{STATUS}'.format(REQUEST_ID=request_id,REQUEST_DATETIME=request_datetime,STATUS=res.status))
final = res.read()
jsonResponse = json.loads(final.decode('utf-8'))
########
# Determine results and page data. JSON normalize converts all keys into headers for csv output
p = 0
p_total = jsonResponse.get('meta')['pagination']['total_pages']
total_values = jsonResponse.get('meta')['pagination']['total']
current_page = jsonResponse.get('meta')['pagination']['current_page']
print('\r\n{NRESULTS} results across {PAGE_NUM} pages\r\n'.format(NRESULTS=total_values,PAGE_NUM=p_total))
print('Completed: ' + api_request + page_number)
jsonResponse = jsonResponse['data']
json_norm = json_normalize(jsonResponse,sep='_')
if p == 0:
json_norm.to_csv('output.csv',mode='w',sep=',',header=True,index=False)
else:
json_norm.to_csv('output.csv',mode='a',header=False,index=False)
while p < (p_total + 1):
try:
p += 1
conn.request("GET",api_request + "&page[number]=" + str(int(current_page + 1)),)
res = conn.getresponse()
final = res.read()
jsonResponse = json.loads(final.decode('utf-8'))
jsonResponse = jsonResponse['data']
json_norm = json_normalize(jsonResponse,sep='_')
json_norm.to_csv('output.csv',index=False)
print('Completed:https://api.pottv{ENDPOINT}&page[number]={CURRENT}'.format(ENDPOINT=api_request,CURRENT=str(int(current_page + 1))))
current_page += 1
except Exception:pass
else:pass.
我收到此错误:
类型错误
46 p_total =...
TypeError: 'NoneType' 对象不可下标。有人能帮我解决这个错误吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。