From 2911f96dd0d8f04e5a626f3200c9dab84af47790 Mon Sep 17 00:00:00 2001 From: Simon Date: Tue, 23 Apr 2024 12:01:32 +0100 Subject: [PATCH] first tests --- meteofranceapi.R | 171 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 meteofranceapi.R diff --git a/meteofranceapi.R b/meteofranceapi.R new file mode 100644 index 0000000..c81604b --- /dev/null +++ b/meteofranceapi.R @@ -0,0 +1,171 @@ +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