library(httr); library(jsonlite); library(dplyr); library(readr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# Top 100 Songs - United States
url <- "https://rss.applemarketingtools.com/api/v2/us/music/most-played/100/songs.json"
res <- GET(url); stop_for_status(res)
j <- fromJSON(content(res, as="text", encoding="UTF-8"), flatten=TRUE)

charts <- as_tibble(j$feed$results) %>%
  transmute(rank = row_number(), title = name, artist = artistName, id)

write_csv(charts, "apple_music_charts_api.csv")
print(head(charts, 100))
## # A tibble: 100 × 4
##     rank title                           artist                            id   
##    <int> <chr>                           <chr>                             <chr>
##  1     1 Safe (feat. Kehlani)            Cardi B                           1821…
##  2     2 Golden                          HUNTR/X, EJAE, AUDREY NUNA, REI … 1820…
##  3     3 Magnet                          Cardi B                           1821…
##  4     4 Pretty & Petty                  Cardi B                           1821…
##  5     5 Dead (feat. Summer Walker)      Cardi B                           1821…
##  6     6 Hello                           Cardi B                           1821…
##  7     7 Pick It Up (feat. Selena Gomez) Cardi B                           1821…
##  8     8 Soda Pop                        Saja Boys, Andrew Choi, Neckwav,… 1820…
##  9     9 Folded                          Kehlani                           1818…
## 10    10 Bodega Baddie                   Cardi B                           1821…
## # ℹ 90 more rows