Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
loop running indefinitely
#5
A first pass could be splitting the USA and Australia requests out into their own functions.
import requests
import json
import argparse
import time
import pandas as pd
import warnings
warnings.filterwarnings("ignore")

def get_usa_data(df, year, latitude, longitude):   
    parameters = {
        'lat1': latitude, # [deg]
        'lon1': longitude, # [deg]
        'model': 'IGRF', # [Model]
        'startYear': None, # [year]
        'startMonth': 7, # [month]
        'startDay':1,  # [date] 
        'resultFormat': 'json', # [format] 
    }
    hostname = "http://www.ngdc.noaa.gov/geomag-web/calculators/calculateDeclination?%s"

    for year in range(startYear, endYear): 
        try:
            parameters["year"] = year
            response = requests.get(hostname, params=dict(parameters, ps=str(year)))
            # extract JSON payload of response as Python dictionary
            json_payload = response.json()
            # raise an Exception if we encoutnered any HTTP error codes like 404
            response.raise_for_status()
        except requests.exceptions.ConnectionError as e:
            # handle any typo errors in url or endpoint, or just patchy internet connection
            print(e)
        except requests.exceptions.HTTPError as e:
            # handle HTTP error codes in the response
            print(e, json_payload['error'])
        except requests.exceptions.RequestException as e:
            # general error handling
            print(e, json_payload['error'])
        else:
            json_payload = response.json()
            #print(json.dumps(json_payload, indent=4, sort_keys=True))
            row_df = pd.DataFrame(json_payload['result'])
            new_row = {
                "SourceFile": hostname,
                "Year": year,
                "Magnetic Declination": row_df.iloc[0, 2],
                "Latitude": -35,
                "Longitude": 145
            }
            df = df.append(new_row, ignore_index=True)
        return df
 
def get_australia_data(df, year, latitude, longitude):   
    parameters = {
        "latd": latitude, # [deg]
        "latm": 00, # [deg]
        "lats": 00, # [deg]
        "lond": longitude, # [deg]
        "lonm": 00, # [deg]
        "lons": 00, # [deg]
        "elev" : 00, # [km]
        "year" : None, # [YYYY]
        "month" : '07', # [MM]
        "day": '01', # [DD]
        "Ein": 'D'  # [Model]
    }
    hostname = "https://api.geomagnetism.ga.gov.au/agrf"

    try:
        parameters["year"] = year
        response = requests.get(hostname, params=dict(parameters, ps=str(year)))
        # extract JSON payload of response as Python dictionary
        json_payload = response.json()
        # raise an Exception if we encoutnered any HTTP error codes like 404
        response.raise_for_status()
    except requests.exceptions.ConnectionError as e:
        # handle any typo errors in url or endpoint, or just patchy internet connection
        print(e)
    except requests.exceptions.HTTPError as e:
        # handle HTTP error codes in the response
        print(e, json_payload['error'])
    except requests.exceptions.RequestException as e:
        # general error handling
        print(e, json_payload['error'])
    else:
        json_payload = response.json()
        #print(json.dumps(json_payload, indent=4, sort_keys=True))
        row_df = pd.DataFrame(json_payload)
        new_row = {
            "SourceFile": hostname,
            "Year": year,
            "Magnetic Declination": row_df.iloc[5, 3],
            "Latitude": latitude,
            "Longitude": longitude
        }
        df = df.append(new_row, ignore_index=True)


if __name__ == '__main__':
    start = time.time()
    parser = argparse.ArgumentParser(description="Process some integers.")
    parser.add_argument("-latitude", help="Latitude(Degress)")
    parser.add_argument("-longitude", help="Longitude(Degress)")
    parser.add_argument("-startYear", help="Start of the Year")
    parser.add_argument("-endYear", help="End of the Year")
    parser.add_argument("--verbose", help="display processing information")
    args = parser.parse_args()
    latitude = args.latitude
    longitude = args.longitude
    startYear = int(args.startYear)
    endYear = int(args.endYear)
    verbose = args.verbose

    usa_data = pd.DataFrame()
    australia_data = pd.DataFrame()

    for year in range(startYear, endYear):
        if year < 1985:
            get_usa_data(usa_data, year, latitude, longitude) 
        else:
            get_australia_data(australia_data, year, latitude, longitude) 

    usa_data = usa_data[['Year', 'Latitude', 'Longitude','Magnetic Declination','SourceFile']]
    usa_data.to_csv('magnetic_declination_usa.csv', index=False) 

    australia_data = australia_data[['Year', 'Latitude', 'Longitude','Magnetic Declination','SourceFile']]
    australia_data.to_csv('magnetic_declination_australia.csv', index=False)

    combined_data = pd.concat([usa_data, australia_data], axis=0) 
    combined_data.to_csv('Magnetic_Declination_(USA+Australia).csv', index=False) 

    print("Processed time:", time.time() - start)  # Total Time
Reply


Messages In This Thread
loop running indefinitely - by shantanu97 - Jun-14-2021, 12:10 PM
RE: loop running indefinitely - by snippsat - Jun-14-2021, 12:55 PM
RE: loop running indefinitely - by deanhystad - Jun-14-2021, 02:06 PM
RE: loop running indefinitely - by Gribouillis - Jun-14-2021, 03:38 PM
RE: loop running indefinitely - by deanhystad - Jun-14-2021, 04:52 PM
RE: loop running indefinitely - by Underscore - Sep-29-2021, 05:58 PM
RE: loop running indefinitely - by deanhystad - Sep-29-2021, 08:03 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  help RuntimeError: no running event loop marpaslight 5 7,750 Oct-18-2022, 10:04 PM
Last Post: marpaslight
  bleak library RuntimeError: This event loop is already running alice93 3 6,395 Sep-30-2021, 08:06 AM
Last Post: alice93
  Running A Loop Until You See A Particular Result knight2000 6 34,506 Sep-04-2021, 08:55 AM
Last Post: knight2000
  Running loop at specific frequency mdsousa 3 8,190 Apr-21-2021, 11:22 AM
Last Post: jefsummers
  RuntimeError: This event loop is already running newbie2019 2 7,915 Sep-30-2020, 06:59 PM
Last Post: forest44
  Running function from parent module which has a loop in it. ta2909i 1 3,462 Nov-18-2019, 07:04 PM
Last Post: Gribouillis
  How to add coroutine to a running event loop? AlekseyPython 1 9,714 Mar-21-2019, 06:04 PM
Last Post: nilamo
  action on MQTT while long loop is running runboy 4 7,352 Oct-05-2018, 11:57 PM
Last Post: runboy
  Outer loop not running ted_gress 2 4,018 Aug-25-2018, 07:56 AM
Last Post: volcano63
  Running Class methods in a loop and updating variables. ujjwalrathod007 3 7,926 Oct-05-2016, 07:11 PM
Last Post: nilamo

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020