166 lines
11 KiB
R
166 lines
11 KiB
R
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) {
|
|
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-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
|