Home > Software design >  How to extract specific data in Python from a REST API request
How to extract specific data in Python from a REST API request

Time:11-22

I'm using a REST API from RapidApi, and I succeded in printing the whole response, but I need only some specific parameters. Like, to print only the Deprature and Arrival times. When using params:{} it doesn't help, because that prints every parameter with the specified argument. I need the inverse, to print a specific parameter with more arguments.

import requests
url = "https://timetable-lookup.p.rapidapi.com/TimeTable/LHR/BCN/20221119/"

headers = {
    "X-RapidAPI-Key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "X-RapidAPI-Host": "timetable-lookup.p.rapidapi.com"
}

response = requests.request("GET",url,headers=headers, params=querystring)
print(response.text)

The API response is the following:

<?xml version="1.0" encoding="UTF-8"?>
<OTA_AirDetailsRS PrimaryLangID="eng" Version="1.0" TransactionIdentifier="" FLSNote="This XML adds attributes not in the OTA XML spec.  All such attributes start with FLS" FLSDevice="ota-xml-expanded" xmlns="http://www.opentravel.org/OTA/2003/05">
  <Success/>
  <FLSResponseFields FLSOriginCode="LHR" FLSOriginName="Heathrow Airport" FLSDestinationCode="BCN" FLSDestinationName="Barcelona Airport" FLSStartDate="2022-11-19" FLSEndDate="2022-11-19" FLSResultCount="5" FLSRoutesFound="124" FLSBranchCount="1457" FLSTargetCount="1112" FLSRecordCount="785252"/>
  <FlightDetails TotalFlightTime="PT2H05M" TotalMiles="714" TotalTripTime="PT2H05M" FLSDepartureDateTime="2022-11-19T06:05:00" FLSDepartureTimeOffset=" 0000" FLSDepartureCode="LHR" FLSDepartureName="Heathrow Airport" FLSArrivalDateTime="2022-11-19T09:10:00" FLSArrivalTimeOffset=" 0100" FLSArrivalCode="BCN" FLSArrivalName="Barcelona Airport" FLSFlightType="NonStop" FLSFlightLegs="1" FLSFlightDays=".....6." FLSDayIndicator="">
    <FlightLegDetails DepartureDateTime="2022-11-19T06:05:00" FLSDepartureTimeOffset=" 0000" ArrivalDateTime="2022-11-19T09:10:00" FLSArrivalTimeOffset=" 0100" FlightNumber="472" JourneyDuration="PT2H05M" SequenceNumber="1" LegDistance="714" FLSMeals="G" FLSInflightServices=" " FLSUUID="LHRBCN20221119BA472">
      <DepartureAirport CodeContext="IATA" LocationCode="LHR" FLSLocationName="Heathrow Airport" Terminal="5" FLSDayIndicator=""/>
      <ArrivalAirport CodeContext="IATA" LocationCode="BCN" FLSLocationName="Barcelona Airport" Terminal="1" FLSDayIndicator=""/>
      <MarketingAirline Code="BA" CodeContext="IATA" CompanyShortName="British Airways"/>
      <Equipment AirEquipType="32N"/>
    </FlightLegDetails>
  </FlightDetails>
  <FlightDetails TotalFlightTime="PT2H05M" TotalMiles="714" TotalTripTime="PT2H05M" FLSDepartureDateTime="2022-11-19T07:25:00" FLSDepartureTimeOffset=" 0000" FLSDepartureCode="LHR" FLSDepartureName="Heathrow Airport" FLSArrivalDateTime="2022-11-19T10:30:00" FLSArrivalTimeOffset=" 0100" FLSArrivalCode="BCN" FLSArrivalName="Barcelona Airport" FLSFlightType="NonStop" FLSFlightLegs="1" FLSFlightDays=".....6." FLSDayIndicator="">
    <FlightLegDetails DepartureDateTime="2022-11-19T07:25:00" FLSDepartureTimeOffset=" 0000" ArrivalDateTime="2022-11-19T10:30:00" FLSArrivalTimeOffset=" 0100" FlightNumber="478" JourneyDuration="PT2H05M" SequenceNumber="1" LegDistance="714" FLSMeals="G" FLSInflightServices=" " FLSUUID="LHRBCN20221119BA478">
      <DepartureAirport CodeContext="IATA" LocationCode="LHR" FLSLocationName="Heathrow Airport" Terminal="5" FLSDayIndicator=""/>
      <ArrivalAirport CodeContext="IATA" LocationCode="BCN" FLSLocationName="Barcelona Airport" Terminal="1" FLSDayIndicator=""/>
      <MarketingAirline Code="BA" CodeContext="IATA" CompanyShortName="British Airways"/>
      <Equipment AirEquipType="320"/>
    </FlightLegDetails>
  </FlightDetails>
  <FlightDetails TotalFlightTime="PT2H05M" TotalMiles="714" TotalTripTime="PT2H05M" FLSDepartureDateTime="2022-11-19T10:25:00" FLSDepartureTimeOffset=" 0000" FLSDepartureCode="LHR" FLSDepartureName="Heathrow Airport" FLSArrivalDateTime="2022-11-19T13:30:00" FLSArrivalTimeOffset=" 0100" FLSArrivalCode="BCN" FLSArrivalName="Barcelona Airport" FLSFlightType="NonStop" FLSFlightLegs="1" FLSFlightDays=".....6." FLSDayIndicator="">
    <FlightLegDetails DepartureDateTime="2022-11-19T10:25:00" FLSDepartureTimeOffset=" 0000" ArrivalDateTime="2022-11-19T13:30:00" FLSArrivalTimeOffset=" 0100" FlightNumber="474" JourneyDuration="PT2H05M" SequenceNumber="1" LegDistance="714" FLSMeals="G" FLSInflightServices=" " FLSUUID="LHRBCN20221119BA474">
      <DepartureAirport CodeContext="IATA" LocationCode="LHR" FLSLocationName="Heathrow Airport" Terminal="5" FLSDayIndicator=""/>
      <ArrivalAirport CodeContext="IATA" LocationCode="BCN" FLSLocationName="Barcelona Airport" Terminal="1" FLSDayIndicator=""/>
      <MarketingAirline Code="BA" CodeContext="IATA" CompanyShortName="British Airways"/>
      <Equipment AirEquipType="32N"/>
    </FlightLegDetails>
  </FlightDetails>
  <FlightDetails TotalFlightTime="PT2H05M" TotalMiles="714" TotalTripTime="PT2H05M" FLSDepartureDateTime="2022-11-19T13:15:00" FLSDepartureTimeOffset=" 0000" FLSDepartureCode="LHR" FLSDepartureName="Heathrow Airport" FLSArrivalDateTime="2022-11-19T16:20:00" FLSArrivalTimeOffset=" 0100" FLSArrivalCode="BCN" FLSArrivalName="Barcelona Airport" FLSFlightType="NonStop" FLSFlightLegs="1" FLSFlightDays=".....6." FLSDayIndicator="">
    <FlightLegDetails DepartureDateTime="2022-11-19T13:15:00" FLSDepartureTimeOffset=" 0000" ArrivalDateTime="2022-11-19T16:20:00" FLSArrivalTimeOffset=" 0100" FlightNumber="480" JourneyDuration="PT2H05M" SequenceNumber="1" LegDistance="714" FLSMeals="G" FLSInflightServices=" " FLSUUID="LHRBCN20221119BA480">
      <DepartureAirport CodeContext="IATA" LocationCode="LHR" FLSLocationName="Heathrow Airport" Terminal="5" FLSDayIndicator=""/>
      <ArrivalAirport CodeContext="IATA" LocationCode="BCN" FLSLocationName="Barcelona Airport" Terminal="1" FLSDayIndicator=""/>
      <MarketingAirline Code="BA" CodeContext="IATA" CompanyShortName="British Airways"/>
      <Equipment AirEquipType="320"/>
    </FlightLegDetails>
  </FlightDetails>
  <FlightDetails TotalFlightTime="PT2H05M" TotalMiles="714" TotalTripTime="PT2H05M" FLSDepartureDateTime="2022-11-19T19:20:00" FLSDepartureTimeOffset=" 0000" FLSDepartureCode="LHR" FLSDepartureName="Heathrow Airport" FLSArrivalDateTime="2022-11-19T22:25:00" FLSArrivalTimeOffset=" 0100" FLSArrivalCode="BCN" FLSArrivalName="Barcelona Airport" FLSFlightType="NonStop" FLSFlightLegs="1" FLSFlightDays=".....6." FLSDayIndicator="">
    <FlightLegDetails DepartureDateTime="2022-11-19T19:20:00" FLSDepartureTimeOffset=" 0000" ArrivalDateTime="2022-11-19T22:25:00" FLSArrivalTimeOffset=" 0100" FlightNumber="482" JourneyDuration="PT2H05M" SequenceNumber="1" LegDistance="714" FLSMeals="G" FLSInflightServices=" " FLSUUID="LHRBCN20221119BA482">
      <DepartureAirport CodeContext="IATA" LocationCode="LHR" FLSLocationName="Heathrow Airport" Terminal="5" FLSDayIndicator=""/>
      <ArrivalAirport CodeContext="IATA" LocationCode="BCN" FLSLocationName="Barcelona Airport" Terminal="1" FLSDayIndicator=""/>
      <MarketingAirline Code="BA" CodeContext="IATA" CompanyShortName="British Airways"/>
      <Equipment AirEquipType="32N"/>
    </FlightLegDetails>
  </FlightDetails>
</OTA_AirDetailsRS>

How can I write the code to display only the DepartureDateTime , ArrivalDateTime, and LocationCode for the arrival and destination country?

Thank you!

CodePudding user response:

Try parsing the output using the xml.etree.ElementTree package. From there, you should be able to search through your xml tree to find the relevant data and display it however you wish.

Here's a snippet to get you started:

# create element tree object
tree = ET.parse(xmlfile)
  
# get root element
root = tree.getroot()

From there you can search from the root using a tree structure. The documentation is here https://docs.python.org/3/library/xml.etree.elementtree.html

CodePudding user response:

If anyone interested, I found a solution, I used BeautifulSoup Python library to parse the contents from my XML response. Use the code below as an example:

soup = BeautifulSoup(response.content, 'html.parser')
for i in range(5):
    print ("Arrivals: ",soup.findAll("flightlegdetails")[i]["arrivaldatetime"])

I printed 5 answers from type FlightLegDetail with ArrivalDateTime foobar. This link could give you some more information: https://www.projectpro.io/recipes/parse-xml-in-python

  • Related