library(jsonlite) 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) { start_date <- as.Date(start_date) end_date <- as.Date(end_date) url <- modify_url(base,path = paste0(dpclim,"commande-station/infrahoraire-6m")) # Format dates in ISO8601 format formatted_start_date <- format(start_date, "%Y-%m-%dT00:00:00Z", tz = "GMT") formatted_end_date <- format(end_date, "%Y-%m-%dT00:00:00Z", tz = "GMT") parameters <- list("id-station" = station_id, "date-deb-periode" = formatted_start_date, "date-fin-periode" = formatted_end_date) # Create the complete URL with parameters url_with_params <- modify_url(url, query = parameters) # Add headers # Make the GET request response <- GET(url_with_params, headersLIM) if(response$status_code == 202){ url <- modify_url(base,path = paste0(dpclim,"commande/fichier")) parameters <- list("id-cmde" = content(response)[[1]][[1]] ) # Create the complete URL with parameters url_with_params <- modify_url(url, query = parameters) response <- GET(url_with_params, headersLIM) while(response$status_code == 204){ response <- GET(url_with_params, headersLIM) print("file not finisehed") Sys.sleep(5) } if(response$status_code == 201){ return(read.csv(text=content(response,as="text")[[1]],sep=";",header=T,dec = ",")) } } else print(paste("Failed with",content(response))) } getStationPaquet <- function(headers=headersPaquet,id_station,format="csv"){ url <- modify_url(base,path = paste0(dpPaquetObs,"infrahoraire-6m")) url_with_params <- modify_url(url, query = list("id_station" = id_station ,"format"=format )) response <- GET(url_with_params, headersPaquet) # Check if the request was successful if (response$status_code == 200) { # Get the content of the response return( read.csv(text=content(response, as = "text"),sep=";",header=T)) } else print("Failed to retrieve data from the API") } # Test the function with dates and station ID start_date <- as.Date("2024-03-24") end_date <- as.Date("2024-04-23") station_id <- "38269004" allstation=getStations(headers) lamure=38269004 allmure=getStationData(start_date="2024-01-24",end_date="2024-04-23",station_id=lamure,headers=headersLIM) alllavaldens=getStationData(start_date="2024-01-24",end_date="2024-04-23",station_id=38207001,headers=headersLIM) paquetLamure=getStationPaquet(id_station=lamure) plot(getDate(alllavaldens[,2]),alllavaldens[,3],lwd=3,type="l",col="red") plot( plot(getDate(allmure[,2]),allmure[,3],lwd=3,type="l",col="blue",ylab="preciptitation (mm)") 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