2

I have made an API request as follow:

response = requests.get('{}/customers'.format(API_URL), headers=headers,  params = {"sort_by":'id', "min_id": 0})
data1 = response.json()

each request returns 1000 entries as a list, hence data1 is a list of 1000 elements. The total data I am trying to pull is 100,000 rows. Meaning I should play with the min_id to pull those. The way I was doing this was as follow:

step one is:

response = requests.get('{}/customers'.format(API_URL), headers=headers,  params = {"sort_by":'id', "min_id": 0})
data1 = response.json()

this gives:

[{'id': 6,
  'a': 'x',
  'b': 'y',
  'c': 'z'},...,
{'id': 9994,
  'a': 'm',
  'b': 'n',
  'c': 'o'}]

In the above output you can see the fist and the last element, so now I see that the last id is 9994, and now I make the second request as:

response = requests.get('{}/customers'.format(API_URL), headers=headers,  params = {"sort_by":'id', "min_id": 9995})
data2 = response.json()

where now the min_id starts from 9995. I can make 100s of this requests and extract the whole data, but this is not certainly efficient. I wonder if I can make an iterative function to do this. Such that on each iteration the min_id is being replaced by the id value of the last pull plus 1?

1 Answer 1

2

You can use max() function to find maximum id and then update the parameter accordingly. Pseudocode:

min_id = 0
all_data = []
for r in range(100):
    print('Request no. {}..'.format(r))

    response = requests.get(
        "{}/customers".format(API_URL),
        headers=headers,
        params={"sort_by": "id", "min_id": min_id},  # <-- use min_id here
    )
    data1 = response.json()
    
    # find maximum id in data1 and update min_id
    min_id = max(data1, key=lambda k: k['id']) + 1

    # store data1 to all_data
    all_data.extend(data1)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.