0

SendinBlue API からデータを取得しようとしています。問題は、API の呼び出しごとに 100 レジスタの制限があり、Python ループが正しく機能していないことです。これは私がこれまでに持っているものです。呼び出しは正常に機能します。

import requests
import pandas as pd
from pandas import json_normalize
import json

results = []
pagination = 0

url = "https://api.sendinblue.com/v3/smtp/statistics/events"

querystring = {"limit":"100","offset":pagination,"days":"15"}

headers = {
    "Accept": "application/json",
    "api-key": "XXXXXXX"
}

#respuesta de la API
response = requests.request("GET", url, headers=headers, params=querystring) 
#convertir json a diccionario
data = json.loads(response.text)
#convertir diccionario a DataFrame
base = pd.json_normalize(data,record_path='events')

データ構造は次のようになります。

{'events': [
  {'email': 'chusperu@gmail.com',
   'date': '2020-10-18T17:18:58.000-05:00',
   'subject': 'Diego, ¡Gracias por registrarte! ',
   'messageId': '<202010181429.12179607081@smtp-relay.mailin.fr>',
   'event': 'opened',
   'tag': '',
   'from': 'ventas01@grupodymperu.com',
  {'email': 'cynthiaapurimac@gmail.com',
   'date': '2020-10-18T17:52:56.000-05:00',
   'subject': 'Alvarado, ¡Gracias por registrarte! ',
   'messageId': '<202010182252.53640747487@smtp-relay.mailin.fr>',
   'event': 'requests',
   'tag': '',
   'from': 'ventas01@grupodymperu.com'},
   ....

私が試したループはこれですが、最初の 200 レジスタのみにページ番号が付けられました。私が間違っていることは何ですか?

for i in data['events']:
    results.append(i)
while response.status_code == 200:
    pagination += 100
    querystring ['offset'] = pagination
    response = requests.request("GET", url, headers=headers, params=querystring)
    data = json.loads(response.text)

    for i in data['events']:
        results.append(i)
    else:
        break
print(results)
4

1 に答える 1