python-3.x - 在每个请求的行数和 HTTP header 中的总行数有限的情况下循环通过 PYTHON API 调用?

标签 python-3.x http

我是 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/

相关文章:

python-3.x - 如何在 OpenCV 中获取 VideoCapture 对象的 4 字符编解码器代码?

python - 如何在Python中使用请求库将 key 发送到网页?

angular - HTTP 心跳以避免长时间运行的 http 调用的连接断开

javascript - express 中的路线优先级

html - 请求访问的帧的协议(protocol)为 "https",被访问的帧的协议(protocol)为 "file"。协议(protocol)必须匹配

java - android HTTP post php脚本问题

python - 使用 get_context_data 从 url 抓取数据创建详细 View

python - 如果字符串与列表中的字符串匹配,如何从句子中删除字符串

python - 如何从长字符串的一组指令中绘制路径

http - 为什么按主机名请求返回 1 个站点,但按 ip 请求返回另一个站点