When I am trying to retrieve all orders through API, I am not getting the exhaustive data. So many orders are missing. I am using the below code to get the orders.
import requests
import json
import time
import pandas as pd
API credentials
api_key = ‘api_key’
access_token = ‘access_token’
shop_url = ‘shop_url’
#endpoint = [email removed]
def create_session():
s = requests.Session()
s.headers.update({
“X-Shopify-Access-Token”: access_token,
“Content_Type”: “application/json”
})
def api_calls(r, *args, **kwargs):
calls_left = r.headers[‘X-Shopify-Shop-Api-Call-Limit’].split(“/”)
if int(calls_left[0]) == int(calls_left[1]) - 1:
print(‘Limit close, Sleeping’)
time.sleep(5)
s.hooks[“response”] = api_calls
return s
orders =
def process_order(order):
order_data = {
‘order_id’ : order[‘id’],
‘created_at’: order[‘created_at’],
‘order_name’ : order[‘name’],
‘customer_email’: order[‘email’]
}
orders.append(order_data)
def main():
sess = create_session()
page_count = 1
endpoint1 = [email removed] # API endpoint with pagination
while True:
count=0
if page_count==1:
endpoint=endpoint1
else:
endpoint=endpoint2
resp = sess.get(endpoint)
data = resp.json()
for order in data[‘orders’]:
count+=1
#print(order[‘name’])
process_order(order)
print(len(orders))
print(count)
print(f"Processed Page {page_count}")
page_count += 1
if ‘next’ in resp.links:
endpoint2 = resp.links[‘next’][‘url’]
print(endpoint2)
else:
break
Process the list of orders
#for order in orders:
Perform desired operations on each order
#print(order)
Total number of orders retrieved
total_orders = len(orders)
print(f"Total Orders: {total_orders}")
if name == ‘main’:
main()