Как настроить запрос POST для добавления песни в плейлист Spotify с помощью R - PullRequest
0 голосов
/ 16 июня 2020

Сначала скажем, что я действительно новичок в R. Вчера я слушал мою любимую радиостанцию. поскольку между ними было так много рекламы, я решил соскрести музыку c, которую они играют каждый день, со своей веб-страницы. Так что я могу слушать его без рекламы.

Я написал сценарий на R, который берет название и исполнителя каждой песни, которую радио играет с их веб-сайта:

### Radio2 playlist scraper ###

#Loading packages#
install.packages("rvest")
library(rvest)
install.packages("dplyr")
library("dplyr")
install.packages("remotes")
remotes::install_github("charlie86/spotifyr")
library(spotifyr)
install.packages('knitr', dependencies = TRUE)
library(knitr)

#Get playlist url #
url <- "https://www.nporadio2.nl/playlist"

#Read HTML code from pagen#
webpage <- read_html(url)

#Get Artist and Title#
artist <- html_nodes(webpage, '.fn-artist')
title <- html_nodes(webpage, '.fn-song')

#Artist and Title to text#
artist_text <- html_text(artist)
title_text <- html_text(title)

#Artist and Title to dataframe#
artiest <- as.data.frame(artist_text)
titel_text <- as.data.frame(title_text)


#Make one dataframe#
radioplaylist <- cbind(artiest$artist_text, titel_text$title_text)
radioplaylist <- as.data.frame(radioplaylist) 
radioplaylist

#Rename columns#
colnames(radioplaylist)[1] <- "Artiest"
colnames(radioplaylist)[2] <- "Titel"
radioplaylist

#Remove duplicate songs#
radioplaylistuniek <- radioplaylist %>% distinct(Artiest, Titel, .keep_all = TRUE)

#Write to csv#
date <- Sys.Date()
date
write.csv(radioplaylistuniek, paste0("C://Users//Kantoor//Radio2playlists//playlist - ", date, ".csv"))

#Set spotify API#
Sys.setenv(SPOTIFY_CLIENT_ID = 'caxxxxxxxxxxxxxxxxxx')
Sys.setenv(SPOTIFY_CLIENT_SECRET = '7exxxxxxxxxxxxx')
access_token <- get_spotify_access_token()

clientID <- "xxxxxxxxxxxxxxx"
secret <- "xxxxxxxxxxxxxx"

library(httr)
library(magrittr)
library(rvest)
library(ggplot2)

response = POST(
  'https://accounts.spotify.com/api/token',
  accept_json(),
  authenticate(clientID, secret),
  body = list(grant_type = 'client_credentials'),
  encode = 'form',
  verbose()
)

token = content(response)$access_token
authorization.header = paste0("Bearer ", token)

#Get track info#
call1 <- GET(url = paste("https://api.spotify.com/v1/search?q=track:Ready%20To%20Go%20artist:Republica&type=track&limit=1"), config = add_headers(authorization = authorization.header))
call1

# JSON to TXT#
jsonResponseParsed <- content(call1, as="parsed") #JSON response structured into parsed data
jsonResponseParsed

# Extract track uri#
uri <- jsonResponseParsed$tracks$items[[1]]$uri
uri

# Add track to playlist #
POST(url= "https://api.spotify.com/v1/playlists/29fotSbWUGP1NmWbtGRaG6/tracks?uris=spotify%3Atrack%3A5Qt8U8Suu7MFH1VcJr17Td", config = add_headers(c('Accept="application/json"', 'Content-type= "application/JSON"', 'Authorization="Bearer BQDX9jbz99bCt6TXd7OSaaj12CgCh3s5F6KBwb-ATnv7AFkSnjuEASS9FOW0zx-xxxxxxxxxxxxxx"')))

Чего я хочу?

Я хочу автоматически добавлять каждую песню, которую я выбрал, в свой плейлист Spotify

Что у меня есть на данный момент?

Я создал приложение через developer.spotify.com. Для каждой песни я могу получить уникальный uri, который необходим для добавления песни в мой список воспроизведения.

Где я застрял?

Я не могу добавить песню в мой плейлист с ПОЧТОВЫМ ЗАПРОСОМ. Я получаю сообщение «Токен не предоставлен».

Я создал образец POST REQUEST через https://developer.spotify.com/console/post-playlist-tracks/?playlist_id=&position=&uris=, который аккуратно добавляет песню в мой список воспроизведения. Код:

POST https://api.spotify.com/v1/playlists/{playlist_id}/tracks
curl -X "POST" "https://api.spotify.com/v1/playlists/29fotSbWUGP1NmWbtGRaG6/tracks?uris=spotify%3Atrack%3A5Qt8U8Suu7MFH1VcJr17Td" -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer BQDX9jbz99bCt6TXd7OSaaj12CgCh3s5F6KBwb-ATxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Как настроить правильный запрос POST?

Может ли кто-нибудь помочь мне с последней частью, чтобы настроить правильный запрос POST ?

1 Ответ

0 голосов
/ 16 июня 2020

@ webb, спасибо. Сейчас он работает со следующим последним кодом:

# GET user authorization code#
code <- get_spotify_authorization_code(client_id = Sys.getenv("SPOTIFY_CLIENT_ID"),
                               client_secret = Sys.getenv("SPOTIFY_CLIENT_SECRET"),
                               scope = "playlist-modify-public")

#Save code#
code2 = code[["credentials"]][["access_token"]]
usercode <- paste0("Bearer ", code2)

#Add track to playlist#
POST("https://api.spotify.com/v1/playlists/29fotSbWUGP1NmWbtGRaG6/tracks?uris=spotify%3Atrack%3A5Qt8U8Suu7MFH1VcJr17Td", 
     encode="json",
     add_headers(Authorization = usercode),
     body = "{\"texts\":[\"A simple string\"]}")

...