Use Variable in URL request on loop to collect data
Question:
I have a requests URL I am using to collect data for races for each day. I need to make one call to an API to get the race info for the day, then I need to use the race keys for each race to make another call to get the data for each race.
So far I have the code below to collect the race info for the day.
def races_list():
race_keys = []
link = f'{Base_url}meetings.json?app_id={AppID}&app_key={AppKey}&searchRequest.startDateTime={StartDate}&searchRequest.endDateTime={EndDate}&searchRequest.raceType={RaceType}&searchRequest.countryCodes={Country}'
print(link)
# Request data from link as 'str'
data = requests.get(link).text
# convert 'str' to Json
data = json.loads(data)
# JSON PARSE
for event_data in data['meetings']:
for race_data in event_data['events']:
race_start = race_data['advertisedDateTimeUtc']
race_status = race_data['status']
race_key = race_data['eventKey']
race_number = race_data['sequence']
race_name = race_data['name']
race_id = race_data['id']
race_distance = race_data['distanceMetres']
race_class_1 = race_data['classes'][0]
race_keys.append(race_key)
print(f'{race_start} {race_status} {race_key} {race_number} {race_name} {race_id} {race_distance} {race_class_1}')
return race_keys
if __name__ == "__main__":
races_list()
this returns the data below
2022-10-28T02:00:00Z Open 202210280200.T.AUS.pakenham_synthetic.1 1 Www.Pakcup.Com.Au Mdn Plate race:202210280200.T.AUS.pakenham_synthetic.1 1100 Maiden
2022-10-28T02:30:00Z Open 202210280200.T.AUS.pakenham_synthetic.2 2 Pakenham Cup Tixs On Sale Mdn race:202210280200.T.AUS.pakenham_synthetic.2 1100 Maiden
2022-10-28T03:00:00Z Open 202210280300.T.AUS.pakenham_synthetic.3 3 Schweppes Mdn Plate race:202210280300.T.AUS.pakenham_synthetic.3 1600 Maiden
2022-10-28T03:30:00Z Open 202210280300.T.AUS.pakenham_synthetic.4 4 Grant's Plumbing Mdn Plate race:202210280300.T.AUS.pakenham_synthetic.4 1400 Maiden
2022-10-28T04:00:00Z Open 202210280400.T.AUS.pakenham_synthetic.5 5 Bet With Mates-Bm70 race:202210280400.T.AUS.pakenham_synthetic.5 1400 Benchmark 70
2022-10-28T04:30:00Z Open 202210280400.T.AUS.pakenham_synthetic.6 6 Harris Automation Engin.-Bm58 race:202210280400.T.AUS.pakenham_synthetic.6 2200 Benchmark 58
2022-10-28T05:00:00Z Open 202210280500.T.AUS.pakenham_synthetic.7 7 Bet With Mates-Bm58 race:202210280500.T.AUS.pakenham_synthetic.7 1200 Benchmark 58
2022-10-28T05:30:00Z Open 202210280500.T.AUS.pakenham_synthetic.8 8 De Bortoli Spring Soiree-Bm58 race:202210280500.T.AUS.pakenham_synthetic.8 1200 Benchmark 58
2022-10-28T06:00:00Z Open 202210280600.T.AUS.pakenham_synthetic.9 9 Robertson Wouters (Bm58) race:202210280600.T.AUS.pakenham_synthetic.9 1400 Benchmark 58
2022-10-28T02:35:00Z Open 202210280200.T.AUS.wagga.1 1 Mountaineer Cup (Bm74) race:202210280200.T.AUS.wagga.1 2500 Benchmark 74
2022-10-28T03:10:00Z Open 202210280300.T.AUS.wagga.2 2 Vale Katrina Dimitropoulos-C1 race:202210280300.T.AUS.wagga.2 1600 Class 1
2022-10-28T03:45:00Z Open 202210280300.T.AUS.wagga.3 3 Good Talk Bragger Cup (Bm50) race:202210280300.T.AUS.wagga.3 1600 Benchmark 50
2022-10-28T04:25:00Z Open 202210280400.T.AUS.wagga.4 4 Wagga Early Years Learning Ctr race:202210280400.T.AUS.wagga.4 1000 Open
2022-10-28T05:05:00Z Open 202210280500.T.AUS.wagga.5 5 Delta Star Designs Mdn Hcp race:202210280500.T.AUS.wagga.5 1000 Maiden
2022-10-28T05:40:00Z Open 202210280500.T.AUS.wagga.6 6 Reece Group Wagga Wagga Mdn race:202210280500.T.AUS.wagga.6 1200 Maiden
2022-10-28T06:20:00Z Open 202210280600.T.AUS.wagga.7 7 Sca Stan Sadleir Stakes race:202210280600.T.AUS.wagga.7 1300 Open
2022-10-28T06:55:00Z Open 202210280600.T.AUS.wagga.8 8 Commins Hendriks Solicitors-C1 race:202210280600.T.AUS.wagga.8 1200 Class 1
2022-10-28T06:15:00Z Open 202210280600.T.AUS.moonee_valley.1 1 Maiden Plate race:202210280600.T.AUS.moonee_valley.1 1200 Maiden
2022-10-28T06:45:00Z Open 202210280600.T.AUS.moonee_valley.2 2 Tote Bar & Dining (Bm70) race:202210280600.T.AUS.moonee_valley.2 1200 Benchmark 70
2022-10-28T07:15:00Z Open 202210280700.T.AUS.moonee_valley.3 3 Christmas At The Valley Hcp-C1 race:202210280700.T.AUS.moonee_valley.3 1500 Class 1
2022-10-28T07:45:00Z Open 202210280700.T.AUS.moonee_valley.4 4 Make-A-Wish Australia Mdn race:202210280700.T.AUS.moonee_valley.4 1600 Maiden
2022-10-28T08:15:00Z Open 202210280800.T.AUS.moonee_valley.5 5 Dce (Bm70) race:202210280800.T.AUS.moonee_valley.5 1600 Benchmark 70
2022-10-28T08:45:00Z Open 202210280800.T.AUS.moonee_valley.6 6 55 Sec Challenge(Bm70) race:202210280800.T.AUS.moonee_valley.6 955 Benchmark 70
2022-10-28T09:15:00Z Open 202210280900.T.AUS.moonee_valley.7 7 Musk Creek Farm (Bm70) race:202210280900.T.AUS.moonee_valley.7 2040 Benchmark 70
2022-10-28T09:45:00Z Open 202210280900.T.AUS.moonee_valley.8 8 Cirka (Bm64) race:202210280900.T.AUS.moonee_valley.8 2040 Benchmark 64
2022-10-28T10:15:00Z Open 202210281000.T.AUS.moonee_valley.9 9 Drummond Golf (Bm64) race:202210281000.T.AUS.moonee_valley.9 1200 Benchmark 64
2022-10-28T02:57:00Z Open 202210280200.T.AUS.ipswich.1 1 This Is A Conversation (Bm65) race:202210280200.T.AUS.ipswich.1 1350 Benchmark 65
2022-10-28T03:34:00Z Open 202210280300.T.AUS.ipswich.2 2 Base Metal Fabrication Mdn race:202210280300.T.AUS.ipswich.2 1350 Maiden
2022-10-28T04:12:00Z Open 202210280400.T.AUS.ipswich.3 3 Swich On Inc Mdn Plate race:202210280400.T.AUS.ipswich.3 1350 Maiden
2022-10-28T04:47:00Z Open 202210280400.T.AUS.ipswich.4 4 Oxley Golf Club (Bm68) race:202210280400.T.AUS.ipswich.4 800 Benchmark 68
2022-10-28T05:27:00Z Open 202210280500.T.AUS.ipswich.5 5 Icare Services Australia (C4) race:202210280500.T.AUS.ipswich.5 1200 Class 4
2022-10-28T06:04:00Z Open 202210280600.T.AUS.ipswich.6 6 Sirromet Hcp (C1) race:202210280600.T.AUS.ipswich.6 1350 Class 1
2022-10-28T06:40:00Z Open 202210280600.T.AUS.ipswich.7 7 Nuturf (Bm65) race:202210280600.T.AUS.ipswich.7 1350 Benchmark 65
2022-10-28T07:20:00Z Open 202210280700.T.AUS.ipswich.8 8 Bundaberg Rum Hcp (C2) race:202210280700.T.AUS.ipswich.8 1666 Class 2
2022-10-28T02:15:00Z Open 202210280200.T.AUS.coonamble.1 1 Southern Cross Turf Hcp (C2) race:202210280200.T.AUS.coonamble.1 1600 Class 2
2022-10-28T02:50:00Z Open 202210280200.T.AUS.coonamble.2 2 Qube Agri&Paragon Pastoral Mdn race:202210280200.T.AUS.coonamble.2 1200 Maiden
2022-10-28T03:25:00Z Open 202210280300.T.AUS.coonamble.3 3 Dad & Dave Turf Mdn Plate race:202210280300.T.AUS.coonamble.3 1400 Maiden
2022-10-28T04:05:00Z Open 202210280400.T.AUS.coonamble.4 4 Keady & Nalder Families Mdn race:202210280400.T.AUS.coonamble.4 1100 Maiden
2022-10-28T04:40:00Z Open 202210280400.T.AUS.coonamble.5 5 Swanny's Foods (Bm58) race:202210280400.T.AUS.coonamble.5 1100 Benchmark 58
2022-10-28T05:20:00Z Open 202210280500.T.AUS.coonamble.6 6 Inland Petroleum Hcp (C1) race:202210280500.T.AUS.coonamble.6 1100 Class 1
2022-10-28T05:55:00Z Open 202210280500.T.AUS.coonamble.7 7 Geronimo Farm Equipment (Bm66) race:202210280500.T.AUS.coonamble.7 1200 Benchmark 66
2022-10-28T06:30:00Z Open 202210280600.T.AUS.coonamble.8 8 Nutrien Ag (Bm58) race:202210280600.T.AUS.coonamble.8 1400 Benchmark 58
I need to use the race keys (T.AUS.pakenham_synthetic.1 for example) in another requests URL in another function to collect the data I need for each race.
so I would need to use the race keys one by one to call this URL below, then i will parse that race data and move onto the next race (race key).
{Base_url}events/202210280200.T.AUS.pakenham_synthetic.1.json?app_id={AppID}&app_key={AppKey}
what would be the best way to achieve this?
thank you for your assistance. Still learning, so apologies if it’s an obvious question.
Answers:
You need to iterate over that data gathered by races_list(). Here is a basic example, although you might want to consider moving it into its own function.
if __name__ == "__main__":
for key in races_list():
data = requests.get(f'{Base_url}events/{key}.json?app_id={AppID}&app_key={AppKey}').text
# parse race data
I have a requests URL I am using to collect data for races for each day. I need to make one call to an API to get the race info for the day, then I need to use the race keys for each race to make another call to get the data for each race.
So far I have the code below to collect the race info for the day.
def races_list():
race_keys = []
link = f'{Base_url}meetings.json?app_id={AppID}&app_key={AppKey}&searchRequest.startDateTime={StartDate}&searchRequest.endDateTime={EndDate}&searchRequest.raceType={RaceType}&searchRequest.countryCodes={Country}'
print(link)
# Request data from link as 'str'
data = requests.get(link).text
# convert 'str' to Json
data = json.loads(data)
# JSON PARSE
for event_data in data['meetings']:
for race_data in event_data['events']:
race_start = race_data['advertisedDateTimeUtc']
race_status = race_data['status']
race_key = race_data['eventKey']
race_number = race_data['sequence']
race_name = race_data['name']
race_id = race_data['id']
race_distance = race_data['distanceMetres']
race_class_1 = race_data['classes'][0]
race_keys.append(race_key)
print(f'{race_start} {race_status} {race_key} {race_number} {race_name} {race_id} {race_distance} {race_class_1}')
return race_keys
if __name__ == "__main__":
races_list()
this returns the data below
2022-10-28T02:00:00Z Open 202210280200.T.AUS.pakenham_synthetic.1 1 Www.Pakcup.Com.Au Mdn Plate race:202210280200.T.AUS.pakenham_synthetic.1 1100 Maiden
2022-10-28T02:30:00Z Open 202210280200.T.AUS.pakenham_synthetic.2 2 Pakenham Cup Tixs On Sale Mdn race:202210280200.T.AUS.pakenham_synthetic.2 1100 Maiden
2022-10-28T03:00:00Z Open 202210280300.T.AUS.pakenham_synthetic.3 3 Schweppes Mdn Plate race:202210280300.T.AUS.pakenham_synthetic.3 1600 Maiden
2022-10-28T03:30:00Z Open 202210280300.T.AUS.pakenham_synthetic.4 4 Grant's Plumbing Mdn Plate race:202210280300.T.AUS.pakenham_synthetic.4 1400 Maiden
2022-10-28T04:00:00Z Open 202210280400.T.AUS.pakenham_synthetic.5 5 Bet With Mates-Bm70 race:202210280400.T.AUS.pakenham_synthetic.5 1400 Benchmark 70
2022-10-28T04:30:00Z Open 202210280400.T.AUS.pakenham_synthetic.6 6 Harris Automation Engin.-Bm58 race:202210280400.T.AUS.pakenham_synthetic.6 2200 Benchmark 58
2022-10-28T05:00:00Z Open 202210280500.T.AUS.pakenham_synthetic.7 7 Bet With Mates-Bm58 race:202210280500.T.AUS.pakenham_synthetic.7 1200 Benchmark 58
2022-10-28T05:30:00Z Open 202210280500.T.AUS.pakenham_synthetic.8 8 De Bortoli Spring Soiree-Bm58 race:202210280500.T.AUS.pakenham_synthetic.8 1200 Benchmark 58
2022-10-28T06:00:00Z Open 202210280600.T.AUS.pakenham_synthetic.9 9 Robertson Wouters (Bm58) race:202210280600.T.AUS.pakenham_synthetic.9 1400 Benchmark 58
2022-10-28T02:35:00Z Open 202210280200.T.AUS.wagga.1 1 Mountaineer Cup (Bm74) race:202210280200.T.AUS.wagga.1 2500 Benchmark 74
2022-10-28T03:10:00Z Open 202210280300.T.AUS.wagga.2 2 Vale Katrina Dimitropoulos-C1 race:202210280300.T.AUS.wagga.2 1600 Class 1
2022-10-28T03:45:00Z Open 202210280300.T.AUS.wagga.3 3 Good Talk Bragger Cup (Bm50) race:202210280300.T.AUS.wagga.3 1600 Benchmark 50
2022-10-28T04:25:00Z Open 202210280400.T.AUS.wagga.4 4 Wagga Early Years Learning Ctr race:202210280400.T.AUS.wagga.4 1000 Open
2022-10-28T05:05:00Z Open 202210280500.T.AUS.wagga.5 5 Delta Star Designs Mdn Hcp race:202210280500.T.AUS.wagga.5 1000 Maiden
2022-10-28T05:40:00Z Open 202210280500.T.AUS.wagga.6 6 Reece Group Wagga Wagga Mdn race:202210280500.T.AUS.wagga.6 1200 Maiden
2022-10-28T06:20:00Z Open 202210280600.T.AUS.wagga.7 7 Sca Stan Sadleir Stakes race:202210280600.T.AUS.wagga.7 1300 Open
2022-10-28T06:55:00Z Open 202210280600.T.AUS.wagga.8 8 Commins Hendriks Solicitors-C1 race:202210280600.T.AUS.wagga.8 1200 Class 1
2022-10-28T06:15:00Z Open 202210280600.T.AUS.moonee_valley.1 1 Maiden Plate race:202210280600.T.AUS.moonee_valley.1 1200 Maiden
2022-10-28T06:45:00Z Open 202210280600.T.AUS.moonee_valley.2 2 Tote Bar & Dining (Bm70) race:202210280600.T.AUS.moonee_valley.2 1200 Benchmark 70
2022-10-28T07:15:00Z Open 202210280700.T.AUS.moonee_valley.3 3 Christmas At The Valley Hcp-C1 race:202210280700.T.AUS.moonee_valley.3 1500 Class 1
2022-10-28T07:45:00Z Open 202210280700.T.AUS.moonee_valley.4 4 Make-A-Wish Australia Mdn race:202210280700.T.AUS.moonee_valley.4 1600 Maiden
2022-10-28T08:15:00Z Open 202210280800.T.AUS.moonee_valley.5 5 Dce (Bm70) race:202210280800.T.AUS.moonee_valley.5 1600 Benchmark 70
2022-10-28T08:45:00Z Open 202210280800.T.AUS.moonee_valley.6 6 55 Sec Challenge(Bm70) race:202210280800.T.AUS.moonee_valley.6 955 Benchmark 70
2022-10-28T09:15:00Z Open 202210280900.T.AUS.moonee_valley.7 7 Musk Creek Farm (Bm70) race:202210280900.T.AUS.moonee_valley.7 2040 Benchmark 70
2022-10-28T09:45:00Z Open 202210280900.T.AUS.moonee_valley.8 8 Cirka (Bm64) race:202210280900.T.AUS.moonee_valley.8 2040 Benchmark 64
2022-10-28T10:15:00Z Open 202210281000.T.AUS.moonee_valley.9 9 Drummond Golf (Bm64) race:202210281000.T.AUS.moonee_valley.9 1200 Benchmark 64
2022-10-28T02:57:00Z Open 202210280200.T.AUS.ipswich.1 1 This Is A Conversation (Bm65) race:202210280200.T.AUS.ipswich.1 1350 Benchmark 65
2022-10-28T03:34:00Z Open 202210280300.T.AUS.ipswich.2 2 Base Metal Fabrication Mdn race:202210280300.T.AUS.ipswich.2 1350 Maiden
2022-10-28T04:12:00Z Open 202210280400.T.AUS.ipswich.3 3 Swich On Inc Mdn Plate race:202210280400.T.AUS.ipswich.3 1350 Maiden
2022-10-28T04:47:00Z Open 202210280400.T.AUS.ipswich.4 4 Oxley Golf Club (Bm68) race:202210280400.T.AUS.ipswich.4 800 Benchmark 68
2022-10-28T05:27:00Z Open 202210280500.T.AUS.ipswich.5 5 Icare Services Australia (C4) race:202210280500.T.AUS.ipswich.5 1200 Class 4
2022-10-28T06:04:00Z Open 202210280600.T.AUS.ipswich.6 6 Sirromet Hcp (C1) race:202210280600.T.AUS.ipswich.6 1350 Class 1
2022-10-28T06:40:00Z Open 202210280600.T.AUS.ipswich.7 7 Nuturf (Bm65) race:202210280600.T.AUS.ipswich.7 1350 Benchmark 65
2022-10-28T07:20:00Z Open 202210280700.T.AUS.ipswich.8 8 Bundaberg Rum Hcp (C2) race:202210280700.T.AUS.ipswich.8 1666 Class 2
2022-10-28T02:15:00Z Open 202210280200.T.AUS.coonamble.1 1 Southern Cross Turf Hcp (C2) race:202210280200.T.AUS.coonamble.1 1600 Class 2
2022-10-28T02:50:00Z Open 202210280200.T.AUS.coonamble.2 2 Qube Agri&Paragon Pastoral Mdn race:202210280200.T.AUS.coonamble.2 1200 Maiden
2022-10-28T03:25:00Z Open 202210280300.T.AUS.coonamble.3 3 Dad & Dave Turf Mdn Plate race:202210280300.T.AUS.coonamble.3 1400 Maiden
2022-10-28T04:05:00Z Open 202210280400.T.AUS.coonamble.4 4 Keady & Nalder Families Mdn race:202210280400.T.AUS.coonamble.4 1100 Maiden
2022-10-28T04:40:00Z Open 202210280400.T.AUS.coonamble.5 5 Swanny's Foods (Bm58) race:202210280400.T.AUS.coonamble.5 1100 Benchmark 58
2022-10-28T05:20:00Z Open 202210280500.T.AUS.coonamble.6 6 Inland Petroleum Hcp (C1) race:202210280500.T.AUS.coonamble.6 1100 Class 1
2022-10-28T05:55:00Z Open 202210280500.T.AUS.coonamble.7 7 Geronimo Farm Equipment (Bm66) race:202210280500.T.AUS.coonamble.7 1200 Benchmark 66
2022-10-28T06:30:00Z Open 202210280600.T.AUS.coonamble.8 8 Nutrien Ag (Bm58) race:202210280600.T.AUS.coonamble.8 1400 Benchmark 58
I need to use the race keys (T.AUS.pakenham_synthetic.1 for example) in another requests URL in another function to collect the data I need for each race.
so I would need to use the race keys one by one to call this URL below, then i will parse that race data and move onto the next race (race key).
{Base_url}events/202210280200.T.AUS.pakenham_synthetic.1.json?app_id={AppID}&app_key={AppKey}
what would be the best way to achieve this?
thank you for your assistance. Still learning, so apologies if it’s an obvious question.
You need to iterate over that data gathered by races_list(). Here is a basic example, although you might want to consider moving it into its own function.
if __name__ == "__main__":
for key in races_list():
data = requests.get(f'{Base_url}events/{key}.json?app_id={AppID}&app_key={AppKey}').text
# parse race data