Этот скрипт представляет собой приложение Shiny, которое позволяет пользователю выбрать муниципалитет в Латвии из выпадающего меню и просмотреть текущий прогноз погоды и температуры для этого муниципалитета.

library(shiny)
library(jsonlite)
library(httr)
library(plotly)

# Create a vector of municipalities in Latvia
municipalities <- c("Aglona", "Aizkraukle", "Aizpute", "Akniste", "Aloja",
                    "Alsunga", "Aluksne", "Amata", "Ape", "Auce", "Babite",
                    "Baldone", "Baltinava", "Balvi", "Bauska", "Broceni", 
                    "Carnikava", "Cesvaine", "Ciblas", "Daugavpils", "Dobele", 
                    "Dundaga", "Durbes", "Engure", "Ergli", "Garkalne",
                    "Grobinas", "Gulbene", "Iecava", "Ikskile", "Ilukste", 
                    "Incukalns", "Jaunjelgava", "Jaunpiebalga", "Jaunpils", 
                    "Jekabpils", "Jelgava", "Jurmala", "Kandava", "Karsava", 
                    "Kegums", "Kekava", "Koceni", "Koknese", "Kraslava", 
                    "Krimulda", "Krustpils", "Kuldiga", "Kumene", "Lielvarde",
                    "Ligatne", "Limbazi", "Livani", "Lizums", "Ludza", "Madona",
                    "Mazsalaca", "Naukseni", "Nereta", "Nica", "Ogre", "Olaine",
                    "Ozolnieki", "Pargauja", "Pasvalys", "Pelcku", "Plavinas",
                    "Preili", "Priekuli", " Priekule", "Rauna", "Rezekne",
                    "Riebi", "Riga", "Rujiena", "Sabile", "Salacgriva", 
                    "Salaspils", "Saldus", "Saulkrasti", "Seda", "Sigulda", 
                    "Skriveri", "Skrunda", "Smiltene", "Stopini", "Strenci", 
                    "Talsi", "Tukums", "Valka", "Valmiera", "Vandzene", 
                    "Vecpiebalga", "Vecumnieki", "Ventspils", "Viesite",
                    "Vilaka", "Vilani", "Zilupe")

# Create a Shiny UI
ui <- fluidPage(
  titlePanel("Weather App"),
  selectInput("municipality", "Select municipality", municipalities),
  mainPanel(
    tabsetPanel(
      tabPanel("Current Weather", tableOutput("current_weather")),
      tabPanel("Temperature Forecast", plotlyOutput("forecast_plot"))
    )
  )
)


# Define the function to get current weather data
get_weather_data <- function(municipality) {
  api_key <- "c85d8912939742411f4756c70790238e" # your valid API key
  url <- paste0("http://api.openweathermap.org/data/2.5/weather?q=",municipality,",lv&appid=",api_key,"&units=metric")
  data <- httr::GET(url)
  data <- httr::content(data)
  return(data)
}

# Define the function to get forecast weather data
get_forecast_data <- function(municipality) {
  api_key <- "44a8b47e94fd6388904950fd39d5b07d" # your valid API key
  url <- paste0("http://api.openweathermap.org/data/2.5/forecast?q=",municipality,",lv&appid=",api_key,"&units=metric")
  data <- httr::GET(url)
  data <- httr::content(data)
  return(data)
}

server <- function(input, output) {
  
  weather_data <- reactive({
    if (!is.null(input$municipality)) {
      get_weather_data(input$municipality)
    }
  })
  
  forecast_data <- reactive({
    if (!is.null(input$municipality)) {
      get_forecast_data(input$municipality)
    }
  })
  
  #render current weather information
  output$current_weather <- renderTable({
    weather_data()
  })
  
  output$forecast_plot <- renderPlotly({
    #Retrieve forecast data
    forecast_data <- get_forecast_data(input$municipality)
    
    # extract temperature and date-time data
    forecast_temp <- forecast_data$list$main$temp
    forecast_time <- as.POSIXct(forecast_data$list$dt, origin="1970-01-01", tz="UTC")
    
    #create plot
    plot_ly(x = forecast_time, y = forecast_temp, type = 'scatter', mode = 'lines+markers') %>%
      layout(title = 'Temperature Forecast')
  })
}

ui <- fluidPage(
  titlePanel("Weather App"),
  selectInput("municipality", "Select municipality", municipalities),
  mainPanel(
    tabsetPanel(
      tabPanel("Current Weather", tableOutput("current_weather")),
      tabPanel("Forecast Weather", plotlyOutput("forecast_plot"))
    )
  )
)

#server
server <- function(input, output) {
  output$current_weather <- renderTable({
    get_weather_data(input$municipality)
  })
  output$forecast_plot <- renderPlotly({
    #Retrieve forecast data
    forecast_data <- get_forecast_data(input$municipality)
    
    
    
    # extract temperature and date-time data
    forecast_temp <- forecast_data$list$main$temp
    forecast_time <- as.POSIXct(forecast_data$list$dt, origin="1970-01-01", tz="UTC")
    
    #create plot
    plot_ly(x = forecast_time, y = forecast_temp, type = 'scatter', mode = 'lines+markers') %>%
      layout(title = 'Temperature Forecast')
  })
}



shinyApp(ui = ui, server = server)

Скрипт начинается с загрузки нескольких библиотек: shining, jsonlite, httr и plotly. Эти библиотеки используются для создания приложения Shiny, работы с данными JSON, выполнения HTTP-запросов и создания интерактивных графиков соответственно.

Далее скрипт определяет вектор самоуправлений в Латвии. Этот вектор используется для заполнения параметров в раскрывающемся меню в пользовательском интерфейсе приложения.

Затем сценарий определяет пользовательский интерфейс (UI) для приложения с помощью функции Shiny fluidPage(). Пользовательский интерфейс включает панель заголовка, раскрывающееся меню для выбора муниципалитета и главную панель с двумя вкладками: одна для отображения текущей погоды, а другая для отображения прогноза температуры.

Затем сценарий определяет две функции для получения текущих данных прогноза погоды и температуры для данного муниципалитета. Эти функции используют библиотеку httr для выполнения HTTP-запросов к API OpenWeatherMap и возврата данных в виде объекта JSON.

Наконец, сценарий определяет серверную функцию, которая управляет поведением приложения. Внутри серверной функции скрипт использует функцию reactive() для создания реактивных объектов для текущих данных прогноза погоды и температуры. Эти реактивные объекты затем используются для обновления вывода в пользовательском интерфейсе, когда пользователь выбирает муниципалитет из раскрывающегося меню. В частности, функция tableOutput() используется для отображения текущих данных о погоде в табличном формате, а функция plotlyOutput() используется для создания интерактивного графика данных прогноза температуры.