我是Python的新手。我已经根据API指令编写了大量电力结算数据的API调用。受保护的API将请求限制为每个请求50,000行。 API指令提供HTTP响应头“X-TotalRows”,以帮助循环遍历整个数据集,这可能是数百万行。
我如何编写Python调用的循环来追加所有数据,一次50k行?我已经包含了初始数据集的代码(行1-50,000)但是没有知道如何使用HTML标题“X-TotalRows”追加整个数据集,一次50k。
说明建议使用HTML标头“X-TotalRows”循环数据并将Start Row参数更改为“1 + rowCount”。
这可能看起来很简单,但我已经搜索并试验了几个小时试图破解此代码。任何帮助表示赞赏。
import http.client, urllib.request, urllib.parse, urllib.error, base64
headers = {
# Request headers
'Ocp-Apim-Subscription-Key': 'xyz', 'content-type': 'application/json'
}
params = urllib.parse.urlencode({
# Request parameters
'download': 'true',
'rowCount': '50000',
'sort': 'datetime_beginning_ept',
'order': 'asc',
'startRow': 1,
'isActiveMetadata': 'true',
'fields': 'datetime_beginning_utc, datetime_beginning_ept, pnode_id, pnode_name, voltage, equipment, type, zone, system_energy_price_da, total_lmp_da, congestion_price_da, marginal_loss_price_da, row_is_current, version_nbr',
#'datetime_beginning_utc': '{string}',
'datetime_beginning_ept': '1-1-2018 00:00 to 1-31-2018 23:00',
#'pnode_id': '{number}',
#'pnode_name': '{string}',
#'voltage': '{string}',
#'equipment': '{string}',
#'type': '{string}',
'zone': 'aep;comed;pseg'
})
try:
conn = http.client.HTTPSConnection('api.pjm.com')
conn.request("GET", "/api/v1/da_hrl_lmps?%s" % params, "{body}", headers)
response = conn.getresponse()
print(response.status, response.reason)
data = response.read()
#print(data)
conn.close()
file = open('output.txt', 'w')
s=str(data)
file.write(s)
file.close()
print("Go to ouput.txt")
except Exception as e:
print("[Errno {0}] {1}".format(e.errno, e.strerror))
答案 0 :(得分:0)
我找到了答案:
strtotalcount = response.headers ['X-TotalRows']
totalcount = int(strtotalcount)
然后使用rowcount和totalcount将数据循环到追加模式的文件中。