(Acest articol a fost publicat pentru prima dată pe R.IRESMI.NETși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.
Am explorat deja cum să vă obțineți activitățile de la Strava. Poate folosiți în schimb Roayze? În acest caz, puteți face unele răzuitoare web pentru a vă exporta datele.
library(httr) library(rvest) library(glue) library(readr) library(dplyr) library(stringr) library(tidyr) library(lubridate) library(hms) library(janitor) library(ggplot2) library(forcats) library(tibble) library(purrr)
RUNALYZE vă permite să descărcați datele tabulare ca CSV (deci fără piese). Singura parte complicată este autentificarea: trebuie să obțineți un jeton.
token <- GET("https://runalyze.com/login") |> content() |> html_elements("input(name=_csrf_token)") |> html_attr("value") POST("https://runalyze.com/login", body = list( "_username" = Sys.getenv("RUNALYZE_U"), "_password" = Sys.getenv("RUNALYZE_P"), "_remember_me" = "on", "_csrf_token" = token)) GET("https://runalyze.com/_internal/data/activities/all", write_disk(glue("{tempdir()}/runalyze.csv"), overwrite = TRUE))
Destul de ușor. Apoi, îți primești toate activitățile.
Există, de asemenea, o API pentru alte utilizări, dar nu am încercat -o. Nici nu am încercat să obțin datele GPS (pare mai puțin simplu).
# to build from : distinct(activites, sportid) sports <- tribble( ~sportid, ~sport, ~colour, 400452, "running", "yellow", 400454, "cycling", "orange", 422335, "nordic skiing", "lightblue", 422336, "mountain skiing", "blue", 453960, "alpinism", "darkgreen", 400453, "swimming", "deepskyblue", 400455, "stretching", "pink", 1304290, "walking and others", "grey", # hiking 400456, "walking and others", "grey", # crossfit 400457, "walking and others", "grey") |> # hiking mutate(sport = fct_rev(as_factor(sport))) activities <- read_csv(glue("{tempdir()}/runalyze.csv"), guess_max = 1e4) |> clean_names() |> mutate(across(c(time, created, edited), as_datetime), across(c(s, elapsed_time), hms), vdate = ymd(paste("2024", month(time), day(time), sep = "-"))) |> left_join(sports, join_by(sportid))
activities |> group_by(ym = format(time, "%Y-%m"), sport) |> summarise(time_s = sum(s, na.rm = TRUE), distance = sum(distance, na.rm = TRUE), .groups = "drop") |> mutate(hours = as.numeric(time_s, "hours")) |> ggplot(aes(ym, hours, fill = sport)) + geom_col(just = 0) + scale_x_discrete( breaks = (x) keep(x, substr(x, 6, 7) == "01"), labels = (x) ifelse(substr(x, 6, 7) == "01", substr(x, 1, 4), "")) + scale_fill_manual(values = sports |> select(sport, colour) |> deframe()) + labs(title = "Activities", subtitle = "Monthly time", x = "month", y = "h", fill = "activities") + theme(axis.title.y = element_text(angle = 0, vjust = 0.5))


Figura 1: Datele mele de la Runayze