Анализ наиболее посещаемых страниц портала

Материал из Поле цифровой дидактики

Код

library(httr)
library(jsonlite)
library(dplyr)
library(lubridate)
library(tidyr)
library(ggplot2)
library(patchwork)

# Корректный URL API
api_url <- "https://digida.mgpu.ru/api.php"

# Безопасное определение функции (если ещё не существует)
if (!exists("get_mw_data")) {
  get_mw_data <- function(action, params) {
    query_params <- c(action = action, format = "json", params)
    response <- GET(api_url, query = query_params)
    
    # Дополнительная проверка типа ответа
    if (http_type(response) != "application/json") {
      warning("Ответ не в формате JSON")
    }
    
    stop_for_status(response)
    fromJSON(content(response, "text"))
  }
}

# === ДИАГНОСТИКА API ===
print("=== ДИАГНОСТИКА API DIGIDA ===")
print("Проверяем доступность API...")


# Шаг 1: базовый запрос для проверки API
data_loaded <- FALSE
page_views <- NULL

tryCatch({
  test_response <- get_mw_data("query", list(
    meta = "siteinfo",
    siprop = "general"
  ))
  print("✓ API доступно!")
  print(paste("Название сайта:", test_response$query$general$sitename))
}, error = function(e) {
  stop(paste("❌ API недоступно:", e$message, "\nПроверьте URL:", api_url))
})

# Шаг 2: пробуем получить данные через recentchanges (косвенный показатель активности)
tryCatch({
  print("Пробуем получить данные о недавних изменениях...")
  page_views <- get_mw_data("query", list(
    list = "recentchanges",
    rclimit = "1000",
    rcprop = "title|timestamp|user|comment",
    rcshow = "!bot",
    rcend = format(Sys.Date() - 365, "%Y%m%d%H%M%S")
  ))
  
  if (!is.null(page_views$query$recentchanges)) {
    print("✓ Данные получены через recentchanges")
    data_loaded <- TRUE
  } else {
    warning("В ответе API нет данных recentchanges")
  }
}, error = function(e) {
  print(paste("Ошибка при запросе recentchanges:"