library(jsonlite) library(httr) base <- "https://public-api.meteofrance.fr" dpobs <- "public/DPObs/v1/" dpclim <- "public/DPClim/v1/" dpPaquetObs="public/DPPaquetObs/v1/paquet/" liststat <- "liste-stations" infostat <- "information-station" # Create a Bearer token header headersLIM <- add_headers( accept = "*/*", apikey = token2 ) getDate <- function(var)as.POSIXlt(as.character(var), format = "%Y%m%d%H%M") token2="eyJ4NXQiOiJZV0kxTTJZNE1qWTNOemsyTkRZeU5XTTRPV014TXpjek1UVmhNbU14T1RSa09ETXlOVEE0Tnc9PSIsImtpZCI6ImdhdGV3YXlfY2VydGlmaWNhdGVfYWxpYXMiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJzaW1vbkNhcnJpZ25vbkBjYXJib24uc3VwZXIiLCJhcHBsaWNhdGlvbiI6eyJvd25lciI6InNpbW9uQ2Fycmlnbm9uIiwidGllclF1b3RhVHlwZSI6bnVsbCwidGllciI6IlVubGltaXRlZCIsIm5hbWUiOiJEZWZhdWx0QXBwbGljYXRpb24iLCJpZCI6MTIxODksInV1aWQiOiI1NGE5MTcyMy1iMzMwLTQ0MmMtODI0Ni1jNTc1MzMzZTMwZWQifSwiaXNzIjoiaHR0cHM6XC9cL3BvcnRhaWwtYXBpLm1ldGVvZnJhbmNlLmZyOjQ0M1wvb2F1dGgyXC90b2tlbiIsInRpZXJJbmZvIjp7IjUwUGVyTWluIjp7InRpZXJRdW90YVR5cGUiOiJyZXF1ZXN0Q291bnQiLCJncmFwaFFMTWF4Q29tcGxleGl0eSI6MCwiZ3JhcGhRTE1heERlcHRoIjowLCJzdG9wT25RdW90YVJlYWNoIjp0cnVlLCJzcGlrZUFycmVzdExpbWl0IjowLCJzcGlrZUFycmVzdFVuaXQiOiJzZWMifX0sImtleXR5cGUiOiJQUk9EVUNUSU9OIiwic3Vic2NyaWJlZEFQSXMiOlt7InN1YnNjcmliZXJUZW5hbnREb21haW4iOiJjYXJib24uc3VwZXIiLCJuYW1lIjoiRG9ubmVlc1B1YmxpcXVlc09ic2VydmF0aW9uIiwiY29udGV4dCI6IlwvcHVibGljXC9EUE9ic1wvdjEiLCJwdWJsaXNoZXIiOiJiYXN0aWVuZyIsInZlcnNpb24iOiJ2MSIsInN1YnNjcmlwdGlvblRpZXIiOiI1MFBlck1pbiJ9LHsic3Vic2NyaWJlclRlbmFudERvbWFpbiI6ImNhcmJvbi5zdXBlciIsIm5hbWUiOiJEb25uZWVzUHVibGlxdWVzQ2xpbWF0b2xvZ2llIiwiY29udGV4dCI6IlwvcHVibGljXC9EUENsaW1cL3YxIiwicHVibGlzaGVyIjoiYWRtaW5fbWYiLCJ2ZXJzaW9uIjoidjEiLCJzdWJzY3JpcHRpb25UaWVyIjoiNTBQZXJNaW4ifV0sInRva2VuX3R5cGUiOiJhcGlLZXkiLCJpYXQiOjE3MTM4NjM2MjAsImp0aSI6IjMyMjliZTAxLTU5YWQtNDBmNi1hYWViLWY4YzQ1YzY1MDIyZSJ9.BqODnmumpJ0HoAwtPsiUNYbsocj7YEusnE7lY_5pCxAHXCmMJ9GMKaA7E3_x7hfACSJx05m5Ekm_Fs2zHs4RmAmLO258jdvGWnRcf_3wjl-fO_Rm1I1atsmW4gLGkk0krZRhdbnVwml6S-pyvMmoO9vjy-lpr64bFndCLA2xqmfrhjJhwAh5RSx7PFF-MVikUpyb4pIw0emQ9T3vSP8aOYBruKs9l4jrsfphHBxleSVX-UM6nExueAAY15uIVUefOq3eaGncstERODHZpalW59nD-BZApHF1UuEJbZeEPB_dRhEE0IfLF8cTwiuupGapPQrFebwFyZDgCFiF8gSu_g==" token='eyJ4NXQiOiJZV0kxTTJZNE1qWTNOemsyTkRZeU5XTTRPV014TXpjek1UVmhNbU14T1RSa09ETXlOVEE0Tnc9PSIsImtpZCI6ImdhdGV3YXlfY2VydGlmaWNhdGVfYWxpYXMiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJzaW1vbkNhcnJpZ25vbkBjYXJib24uc3VwZXIiLCJhcHBsaWNhdGlvbiI6eyJvd25lciI6InNpbW9uQ2Fycmlnbm9uIiwidGllclF1b3RhVHlwZSI6bnVsbCwidGllciI6IlVubGltaXRlZCIsIm5hbWUiOiJEZWZhdWx0QXBwbGljYXRpb24iLCJpZCI6MTIxODksInV1aWQiOiI1NGE5MTcyMy1iMzMwLTQ0MmMtODI0Ni1jNTc1MzMzZTMwZWQifSwiaXNzIjoiaHR0cHM6XC9cL3BvcnRhaWwtYXBpLm1ldGVvZnJhbmNlLmZyOjQ0M1wvb2F1dGgyXC90b2tlbiIsInRpZXJJbmZvIjp7IjUwUGVyTWluIjp7InRpZXJRdW90YVR5cGUiOiJyZXF1ZXN0Q291bnQiLCJncmFwaFFMTWF4Q29tcGxleGl0eSI6MCwiZ3JhcGhRTE1heERlcHRoIjowLCJzdG9wT25RdW90YVJlYWNoIjp0cnVlLCJzcGlrZUFycmVzdExpbWl0IjowLCJzcGlrZUFycmVzdFVuaXQiOiJzZWMifX0sImtleXR5cGUiOiJQUk9EVUNUSU9OIiwic3Vic2NyaWJlZEFQSXMiOlt7InN1YnNjcmliZXJUZW5hbnREb21haW4iOiJjYXJib24uc3VwZXIiLCJuYW1lIjoiRG9ubmVlc1B1YmxpcXVlc09ic2VydmF0aW9uIiwiY29udGV4dCI6IlwvcHVibGljXC9EUE9ic1wvdjEiLCJwdWJsaXNoZXIiOiJiYXN0aWVuZyIsInZlcnNpb24iOiJ2MSIsInN1YnNjcmlwdGlvblRpZXIiOiI1MFBlck1pbiJ9XSwiZXhwIjoxNzE0MTEwNjgxLCJ0b2tlbl90eXBlIjoiYXBpS2V5IiwiaWF0IjoxNzEzODYwNjgxLCJqdGkiOiI2NzczMjNjMy1hN2Q5LTQ0MDctOGZhOC1hOTg0MTY2ZjljZGUifQ==.WMSDZ7_oK3OjsA_1LV2goF0Gs6tybLO26MeiskuUKtPoxG-1pikWdPbT1GvsWLuu3CoAx_1IWNKbGIEXFB9l_ZIiqLCYkSEnjOlOj_ipDj3Ic4kmzBkk-FZO5SEe-de9kOPVPSWvrMuznR9BCeyOWNep-HhP0XB-gW4JsFcSo5n0rDGd_t2CWCxZos4nZwFubo1ReFxVceLOsSfE4q06qQFEcY8WucDO9nGIk_xM4n85ma8HuNXM7iJ4YOYgcWnqgEDjWSatDr-xeQFltceStzUjv9YofyEDsNmVU5f3LyuYJtSl7TIf4PeoW_RURpgfbzpT-gsxUpT1BxfF5HTYgA==' yearTokenPaquer = "eyJ4NXQiOiJZV0kxTTJZNE1qWTNOemsyTkRZeU5XTTRPV014TXpjek1UVmhNbU14T1RSa09ETXlOVEE0Tnc9PSIsImtpZCI6ImdhdGV3YXlfY2VydGlmaWNhdGVfYWxpYXMiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJzaW1vbkNhcnJpZ25vbkBjYXJib24uc3VwZXIiLCJhcHBsaWNhdGlvbiI6eyJvd25lciI6InNpbW9uQ2Fycmlnbm9uIiwidGllclF1b3RhVHlwZSI6bnVsbCwidGllciI6IlVubGltaXRlZCIsIm5hbWUiOiJEZWZhdWx0QXBwbGljYXRpb24iLCJpZCI6MTIxODksInV1aWQiOiI1NGE5MTcyMy1iMzMwLTQ0MmMtODI0Ni1jNTc1MzMzZTMwZWQifSwiaXNzIjoiaHR0cHM6XC9cL3BvcnRhaWwtYXBpLm1ldGVvZnJhbmNlLmZyOjQ0M1wvb2F1dGgyXC90b2tlbiIsInRpZXJJbmZvIjp7IjUwUGVyTWluIjp7InRpZXJRdW90YVR5cGUiOiJyZXF1ZXN0Q291bnQiLCJncmFwaFFMTWF4Q29tcGxleGl0eSI6MCwiZ3JhcGhRTE1heERlcHRoIjowLCJzdG9wT25RdW90YVJlYWNoIjp0cnVlLCJzcGlrZUFycmVzdExpbWl0IjowLCJzcGlrZUFycmVzdFVuaXQiOiJzZWMifX0sImtleXR5cGUiOiJQUk9EVUNUSU9OIiwic3Vic2NyaWJlZEFQSXMiOlt7InN1YnNjcmliZXJUZW5hbnREb21haW4iOiJjYXJib24uc3VwZXIiLCJuYW1lIjoiRG9ubmVlc1B1YmxpcXVlc09ic2VydmF0aW9uIiwiY29udGV4dCI6IlwvcHVibGljXC9EUE9ic1wvdjEiLCJwdWJsaXNoZXIiOiJiYXN0aWVuZyIsInZlcnNpb24iOiJ2MSIsInN1YnNjcmlwdGlvblRpZXIiOiI1MFBlck1pbiJ9LHsic3Vic2NyaWJlclRlbmFudERvbWFpbiI6ImNhcmJvbi5zdXBlciIsIm5hbWUiOiJEb25uZWVzUHVibGlxdWVzQ2xpbWF0b2xvZ2llIiwiY29udGV4dCI6IlwvcHVibGljXC9EUENsaW1cL3YxIiwicHVibGlzaGVyIjoiYWRtaW5fbWYiLCJ2ZXJzaW9uIjoidjEiLCJzdWJzY3JpcHRpb25UaWVyIjoiNTBQZXJNaW4ifSx7InN1YnNjcmliZXJUZW5hbnREb21haW4iOiJjYXJib24uc3VwZXIiLCJuYW1lIjoiRG9ubmVlc1B1YmxpcXVlc1BhcXVldE9ic2VydmF0aW9uIiwiY29udGV4dCI6IlwvcHVibGljXC9EUFBhcXVldE9ic1wvdjEiLCJwdWJsaXNoZXIiOiJiYXN0aWVuZyIsInZlcnNpb24iOiJ2MSIsInN1YnNjcmlwdGlvblRpZXIiOiI1MFBlck1pbiJ9XSwiZXhwIjoxNzQ1NDA1MzkyLCJ0b2tlbl90eXBlIjoiYXBpS2V5IiwiaWF0IjoxNzEzODY5MzkyLCJqdGkiOiIyMzQ1NTMyOS0xMTM1LTQ4NmQtOTk5Zi0yYWNlOTYwZWQ0ZGQifQ==.Ia61uXDUbxouhP-wRhJJkIsIBq38Ju3fxFbiirlzR_dQY-LzWhyY_WpCvdOadVFDIeEoPzhav469tcP2HlWCtEmrRa_cms8dZYFqdOCkjRr_vuJc-q7VvQfe29dpZWh347utQR8qg9C-yMU_N6M94h0RhF_KuEMuzfBXaL4vvTeVc7zfRt75gewOS8pOJtJabpzOefZ9GlCtfiYWWRjaQM-3U5PmEj6_Dl-CwbiNEpage8ieYBinx54Z8Wq1i0sVsFv4IA9ukFZyagexq1L0xNs0l3zjY5tc3E8GSF--IGf5hoIhI73K5On3WQq8nmyaa1QiyhP0UqhpXgkCSYKevg==" headersPaquet <- add_headers( accept = "*/*", apikey = yearTokenPaquer ) getStations <- function(headers=headers){ url <- modify_url(base,path = paste0(dpobs,"liste-stations")) response <- GET(url, headers) # Check if the request was successful if (http_status(response)$category == "Success") { # Get the content of the response data <- as.data.frame(content(response, as = "text"),delim=";") } else print("Failed to retrieve data from the API") read.csv(text=data[[1]], sep=";", header=TRUE) } getStationInfo <- function(station,headers=headers){ url <- modify_url(base,path = paste0(dpclim,infostat),query=list("id-station"=station)) response <- GET(url, headersLIM) # Check if the request was successful if (http_status(response)$category == "Success") { # Get the content of the response data <- as.data.frame(content(response, as = "text"),delim=";") print(data) } else print("Failed to retrieve data from the API") } getStationData <- function(start_date, end_date, station_id, headers = headers) { url <- modify_url(base, path = paste0(dpclim, "commande-station/infrahoraire-6m"), query = list("id-station" = station_id, "date-deb-periode" = format(as.Date(start_date), "%Y-%m-%dT00:00:00Z", tz = "GMT"), "date-fin-periode" = format(as.Date(end_date), "%Y-%m-%dT00:00:00Z", tz = "GMT"))) response <- GET(url, add_headers(.headers = headers)) if (response$status_code == 202) { cmd_url <- modify_url(base, path = paste0(dpclim, "commande/fichier"), query = list("id-cmde" = content(response)[[1]][[1]])) repeat { response <- GET(cmd_url, add_headers(.headers = headers)) if (response$status_code == 201) { return(read.csv(text = content(response, "text"), sep = ";", header = TRUE, dec = ",")) } else if (response$status_code == 204) { message("File not finished, retrying in 5 seconds...") Sys.sleep(5) } else { stop(paste("Failed with", http_status(response)$message)) } } } else { stop(paste("Failed to initiate data retrieval with status code:", response$status_code)) } } getStationPaquet <- function(id_station, format = "csv", headers = headersPaquet) { base_url <- modify_url(base, path = paste0(dpPaquetObs, "infrahoraire-6m")) url_with_params <- modify_url(base_url, query = list(id_station = id_station, format = format)) response <- GET(url_with_params, add_headers(.headers = headers)) if (response$status_code == 200) { # Successfully retrieved the data return(read.csv(text = content(response, "text"), sep = ";", header = TRUE)) } else { # If the request failed, it's useful to provide the status code in the error message for debugging stop(sprintf("Failed to retrieve data from the API. Status code: %s", response$status_code)) } } # Test the function with dates and station ID start_date <- as.Date("2024-03-24") end_date <- as.Date("2024-08-14") station_id <- "38269004" allstations=getStations(headersLIM) allstations=read.csv("allstations.csv") #write.csv(file="allstations.csv",allstation,row.names=F) lacouch=c(45.3722971,5.6387118) alldist=dist(rbind(lacouch,cbind(allstations$Latitude,allstations$Longitude))) staupre=allstation$Id_station[which.min(as.matrix(alldist)[1,-1])] lamure=38269004 allmure=getStationData(start_date="2024-06-24",end_date="2024-08-14",station_id=lamure,headers=headersLIM) alllavaldens=getStationData(start_date="2024-06-24",end_date="2024-08-14",station_id=38207001,headers=headersLIM) paquetLamure=getStationPaquet(id_station=lamure) allcouch=getStationData(start_date="2024-06-24",end_date="2024-08-14",station_id=staupre,headers=headersLIM) allal=getStationData(start_date="2024-01-24",end_date="2024-08-13",station_id=staupre,headers=headersLIM) plot(getDate(alllavaldens[,2]),alllavaldens[,3],lwd=3,type="l",col="red") plot(getDate(allmure[,2]),allmure[,3],pch=20,type="o",col="blue",ylab="preciptitation (mm)",main="La Mure/Lavalends",ylim=range(c(alllavaldens[,3],allmure[,3]),na.rm=T),cex=2) points(getDate(alllavaldens[,2]),alllavaldens[,3],pch=20,col="red",cex=2,type="o") points(getDate(allcouch[,2]),allcouch[,3],pch=20,col="green",cex=2,type="o") legend("topleft",col=c("blue","red","green"),legend=c("La Mure","Lavaldens","St Aupre"),cex=2,pch=20) plot(allmure[,3],alllavaldens[,3],col="red") library(httr) # Token to be included in the Authorization header (example token placeholder) df <- getStations() plot(df$Longitude,df$Latitude,xlim=c(-5.1,9.6),ylim=c(41.2,51.1),pch=21) # La Mure coordinates (latitude and longitude) la_mure_latitude <- 44.9167 la_mure_longitude <- 5.8000 # Define the bounding box for the region around La Mure in Isère # Adjust these values as needed to capture the desired area lat_min <- 44.5 lat_max <- 45.5 lon_min <- 5.4 lon_max <- 6.2 # Filter data for the region around La Mure df_la_mure <- df[df$Latitude >= lat_min & df$Latitude <= lat_max & df$Longitude >= lon_min & df$Longitude <= lon_max,] # Plot Latitude and Longitude for the region around La Mure plot(df_la_mure$Longitude, df_la_mure$Latitude, main = "Region around La Mure, Isère, France Plot", xlab = "Longitude", ylab = "Latitude") text(df_la_mure$Longitude, df_la_mure$Latitude,labels=df_la_mure$Nom_usuel,pos=3) text(df_la_mure$Longitude, df_la_mure$Latitude,labels=df_la_mure$Id_station,pos=1) library(ggmap) ggmap::register_google(key="AIzaSyBF0l8LHg5kBQInFgR9sD65H1ek0qvn2Yw") # Geocode La Salle en Beaumont using the Google Maps API location <- "La Salle en Beaumont, France" la_salle_geocode <- geocode(location) # Print the latitude and longitude of La Salle en Beaumont print(la_salle_geocode) library(osmdata) # Geocode La Salle en Beaumont using OpenStreetMap location <- "La Salle en Beaumont, France" la_salle_geocode <- osm_geocode(location) # Print the latitude and longitude of La Salle en Beaumont print(la_salle_geocode) library(tmap) datetime_obj <- as.POSIXlt(as.character(allmure[,2]), format = "%Y%m%d%H%M") datetime_obj <- as.POSIXlt(as.character(alllavaldens[,2]), format = "%Y%m%d%H%M") # Create the date object using the format argument plot(datetime_obj,alllavaldens[,3],lwd=2,type="l",col=2) # Print the date object # Convert temperature from Kelvin to Celsius temperature_celsius <- temperature_kelvin - 273.15 location <- "La Couchonnier, Saint Etienne de Crossey, France" couch <- geocode(location) couch <- osm_geocode(location) # Print the latitude and longitude of La Salle en Beaumont print(la_salle_geocode) 45.3722971,5.6387118