Mutiple API with different variable in URL

Ali Durrani :

I am learning Python and had a question regarding for and if loops. This is my scenario:

  • I have an endpoint that i make API-call with request.get
  • I need to retrieve all the historic data
  • I have a start_date (2017-06-17)

So i need to make multiple API-call because they have a limit of 60-days period. So i made my code like this:

date = datetime.strptime("2017-06-17", "%Y-%m-%d")         # Start Date
current_date = date.date()                                 # timedelta need date object so i make it a date object
days_after = (current_date+timedelta(days=60)).isoformat() # days_after is set to 60-days because limit in API
date_string = current_date.strftime('%Y-%m-%d')            # made to string again since API need string not date object

So this is how i make the dates for 60 days period. Starting from 2017-06-17 and 60-days ahead.

This is how i make the API-request:

response = requests.get("https://reporting-api/campaign?token=xxxxxxxxxx&format=json&fromDate="+date_string+"&toDate="+days_after)
response_data = response.json()  # Added this because i am writing temprorary to a JSON file

This is how i write to JSON file:

if response_data:
    print("WE GOT DATA")              # Debugging
    data = response.json()            # This is duplicate?
    with open('data.json', 'w') as f: # Open my data.json file as write
        json.dump(data, f)            # dumps my json-data from API to the file
else:
    print("NO DATA")                  # Debugging if no data / response. Should make a skip statement here

So my question is how can i proceed with my code so that every time i make a API-call starting from 2017-06-17 the date date_string and days_after should go 60 days forward for each API-call and append those data to data.json. I would maybe need some for loops or something?

Please note i have been using Python for 3 days now, be gentle. Thanks!

Daniel Blei :

You could use a while loop that changes the start and end date until a specified condition is met. Also, you can append the response to a file for every run. the example below I used the date of "today":

import os
from datetime import datetime, timedelta

x = 0 
y = 60

date = datetime.strptime("2017-06-17", "%Y-%m-%d")
current_date = date.date() 
date_start = current_date+timedelta(days=x)

while date_start < datetime.now().date(): 
    date_start = current_date+timedelta(days=x)
    days_after = current_date+timedelta(days=y)
    x = x + 60
    y = y + 60

    response = requests.get("https://reporting-api/campaign?token=xxxxxxxxxx&format=json&fromDate="+date_start.isoformat() +"&toDate="+days_after.isoformat())

    response_data = response.json()
    if response_data:
        print("WE GOT DATA")      
        data = response.json()   

        #create a file if not exists or append new data to it.
        if os.path.exists('data.json'):
            append_write = 'a' # append if already exists
        else:
            append_write = 'w' # make a new file if not
        with open('data.json', append_write) as f: 
            json.dump(data, f)            
    else:
        print("NO DATA")

Basically, on every run the time of start and end is increased by 60 days and appended to the data.json file.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=27722&siteId=1