Necesito descargar los datos que están disponibles a través de una URL:
http://www.arpalazio.net/main/aria/sci/basedati/chimici/BDchimici/RM/MedieGiornaliere/RM_PM2.5_ 2019 _gg.txt
Para descargar los datos de diferentes años, necesito cambiar el año en la URL, como se muestra en rojo . Me gustaría escribir un bucle en JSL que abarque los años de 1990 a 2021 y poner los datos en una tabla. Soy nuevo en JSL, por lo que cualquier ayuda en ese sentido es muy apreciada.
Necesita un par de cosas para esto: bucle (for-loop), forma de construir la url (inserción de evaluación), forma de cargar datos desde la url (abrir con argumentos correctos) y forma de combinar los datos (concatenar).
Names Default To Here(1);
//We can use Eval Insert to replace ^temp_year^ in the string
dl_url = "http://www.arpalazio.net/main/aria/sci/basedati/chimici/BDchimici/RM/MedieGiornaliere/RM_PM2.5_^temp_year^_gg.txt";
dt = New Table(); //table to collect results
//for-loop
For(i = 1990, i <= 2021, i++,
temp_year= Char(i);
year_url = Eval Insert(dl_url);
//downloaded first one file by hand -> opened in JMP to get Open with correct parameters and replaced file path with URL
Try(
dt_temp = Open(
year_url,
Import Settings(
End Of Line(CRLF, CR, LF),
End Of Field(Spaces, Space, CSV(0)),
Strip Quotes(1),
Use Apostrophe as Quotation Mark(0),
Use Regional Settings(0),
Scan Whole File(1),
Treat empty columns as numeric(0),
CompressNumericColumns(0),
CompressCharacterColumns(0),
CompressAllowListCheck(0),
Labels(1),
Column Names Start(1),
Data Starts(2),
Lines To Read("All"),
Year Rule("20xx")
)
);
dt << Concatenate(dt_temp, Append to first table(1));
Close(dt_temp, no save);
,
Show(exception_msg)
);
);
Concatenar debería poder manejar las columnas que faltan creando valores perdidos y Try es una forma bastante fácil de manejar URL que no existen (aunque un poco perezoso).
Muchas gracias @jthi .Esto es muy útil.
Tengo una pregunta de seguimiento y me preguntaba si podría ayudarme con eso. Hay otra base de datos de la que necesito descargar los datos con casi el mismo método (es decir, cambiando el valor del año en la URL). Aquí está la URL:
https://www.arb.ca.gov/aqmis2/pickdl_hrly.php?param=OZONE&units=007&year=2021&county_name=--COUNTY--&basin=SC-South+Coast&latitude=--PART+OF+STATE--&report= PICKDATA & order = basin% 2Ccounty_name% 2Cs.name & submit = Retrieve + Data & ptype = aqd & std15 = & o3switch = new & hours = all & statistic = & qselect = Screened & start_mon = 1 & start_day = 1 & mon = 12 & day = 31 & submit = All + Sites & rows = 29
La única diferencia es que para obtener los datos de esta URL, necesito hacer clic en el botón "Obtener datos" en esa página. ¿Hay alguna forma de que esto se pueda hacer a través de JSL?
Que yo sepa, no puede hacer clic en elementos en sitios web con JMP, pero es posible que pueda usar solicitudes HTTP para obtener los datos. Para esto, tendría que averiguar cómo se realizan las solicitudes (las herramientas de desarrollador del navegador pueden ser útiles con esto).