我是 Python 的新手。我已经编写了一个 API 调用,用于大量的电力结算数据,主要来自 API 指令。安全 API 将请求限制为每个请求 50,000 行。 API 指令提供了一个 HTTP 响应 header “X-TotalRows”,以协助遍历可能有数百万行的整个数据集。
我如何为 Python 调用编写循环以追加所有数据,一次追加 50,000 行?我已经包含了初始数据集(第 1-50,000 行)的代码,但没有了解如何使用 HTML header “X-TotalRows”追加整个数据集,一次 50k。
说明建议使用 HTML header “X-TotalRows”遍历数据并将起始行参数更改为“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))
最佳答案
我找到了答案:
strtotalcount = response.headers['X-TotalRows']
总计数 = int(strtotalcount)
然后使用 rowcount 和 totalcount 以追加模式将数据循环到文件中。
关于python-3.x - 在每个请求的行数和 HTTP header 中的总行数有限的情况下循环通过 PYTHON API 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49497644/