Se você me conhece, já deve saber que usei como exemplo o Raça Negra só pra usar o meme do garotinho e a planta no título. Sim, esse é o senso de humor desse que vos escreve. Mas dando continuidade a editoria de tutoriais dessa vez vou apresentar um tutorial do RSpotify, que me foi apresentado pelo brasileiro Tiago Dantas.
Eu acabei tendo que desenvolver algumas expertises com esse pacote por estar envolvido em uma campanha envolvendo cantores e precisar encontrar outros artistas com a mesma pegada dos que estou analisando( e digo que foi de grande ajuda) para segmentação de interesse/mídia. 🥤
Como dito no início do texto, esse tutorial usa os dados da banda Raça Negra, grupo de pagode que teve início nos anos 80 e foi responsável por marcar gerações com músicas como ‘Cheia de manias‘, ‘Cigana‘ e ‘É tarde demais‘.
Indo direto pro código:
# Eliminando dados anterior/salvo.
rm(list = ls())
# alterando o diretório de trabalho
setwd("INSERIR SEU DIRETÓRIO")
##########################
# Checando se os pacotes estão instalados, instalando os faltantes e executando todos os pacotes necessários
if(!require(devtools)){
install.packages("devtools")
library(devtools)
}
if(!require(Rspotify)){
install_github("tiagomendesdantas/Rspotify")
library(Rspotify)
}
Para fazer a requisição dos dados será necessário criar um app dentro da plataforma de desenvolvedores do Spotify (bastar ir em My Apps e criar o seu aplicativo). Gerado o seu app_id (na plataforma está como ‘Application Name’), client_id e client_secret podemos seguir para o pedido de autenticação.
# Acessando a API do Spotify
app_id <- "API_Toth" # aqui entra o nome que você deu para a aplicação
client_id <- "SEU CLIENT_ID" # Inserrir client_id
client_secret <- "SEU CLIENT_SECRET" #Inserir Client_secret
# Aglutinando as chaves de acesso
keys <- spotifyOAuth(app_id,client_id,client_secret)
# Ele abrirá como resposta o seu navegador para autenticação
# Waiting for authentication in browser...
# Press Esc/Ctrl + C to abort
# Authentication complete.
Como primeira busca vamos começar com algo mais simples: buscar por dados de um usuário.
# Buscando por um usuário
usuario <- getUser("12161883573",token=keys)
# display_name id followers
# Pedro Meirelles 12161883573 79
# Buscando por um usuário
usuario <- getUser("marinalalves",token=keys)
# display_name id followers
# Marina Alves marinalalves 163
# Buscando por um usuário
usuario <- getUser("12161883573",token=keys)
#display_name id followers
# Alves Fefê 12142930547 135
O RSpotify, e o Spotify em si, são bem didáticos e permitem uma busca de artistas:
procurando_artista <-searchArtist("Raca+negra",token=keys)
# Para nomes compostos é só usar o +. Ex: "Móveis+coloniais+de+Acaju".
# Lembre-se de não usar cedilha, acentos ou qualquer outro carácter que dê problema com o UTF-8
Como resultado dessa busca a API me retornou a seguinte tabela:
display_name | Id | popularity | followers | genres | type |
---|---|---|---|---|---|
Raça Negra | 1RnHJ07H3jcpay9PrUPjnt | 67 | 181793 | axe,pagode,sertanejo,sertanejo | |
universitario | artist | ||||
Banda Raça Negra | |||||
(luiz Carlos | 0DU3aBTptTJiqrQEvUu9m8 | 46 | 3006 | pagode | artist |
Luiz Carlos (Grupo | |||||
Raça Negra) | 094w4geWkyQs5n49nN7IhQ | 3 | 503 | artist |
Dessa tabela iremos usar o Id da primeira linha (‘Raça Negra’), que representa o perfil oficial da banda na plataforma, para buscar apenas pelos dados da banda.
artista_info <- getArtistinfo("1RnHJ07H3jcpay9PrUPjnt",token=keys)
# id name popularity followers genres
# 1RnHJ07H3jcpay9PrUPjnt Raça Negra 67 181797 axe,pagode,sertanejo,sertanejo universitario
Usando o mesmo id iremos buscar todos os álbuns que estão disponibilizados na plataforma:
artista_albums <-getAlbums("1RnHJ07H3jcpay9PrUPjnt",token=keys)
Como resultado temos:
id | name | album_type | available_markets | |
---|---|---|---|---|
1 | 0hSUBFqEpxTYTXyYfVncOw | Raça Negra e | ||
Amigos II (Ao Vivo) | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; | ||
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
2 | 7oEbEk1KjiSx4VyYeCZXum | Grandes Sucessos | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; |
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
3 | 64lYVfx8NrXctVRKwGbPWB | Rei do Baile | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; |
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
4 | 5F29W95AYHMYmuAQfKnbX8 | Raça Negra & | ||
Amigos | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; | ||
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
5 | 5zHbW1Cl8DgvIolJZfTrdG | Boa Sorte | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; |
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
6 | 5rblxoTmh8yAzjyzK4gpUq | Canta Jovem Guarda | ||
Vol. 02 | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; | ||
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
7 | 4eh31GDcQe9dTsx4rcBh93 | Raça Negra 25 Anos | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; |
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
8 | 1UJJ419eEbx3iyFABhgEWE | Raça Negra as 20 + | ||
(Acústico) | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; | ||
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
9 | 3mUJ13LTs1hM5K8hlLzy5o | Raça Negra Vol. 23 | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; |
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
10 | 4AP8HI1sOQvX90OO8eNpWW | Raça Negra Ao Vivo | album | |
11 | 1YZh5Huo7eN4QERA51SAQD | A Vida Por Um | ||
Beijo | album | |||
12 | 6smzTn08XxXLIHbAkff0EW | Vem Pra Ficar | album | |
13 | 64UsYiPOiVX2mFURxtLe8Y | Raça Negra Ao Vivo | album | |
14 | 4RkZlSsx550sBAs176taJE | Raça Negra – Vol. | ||
9 | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; | ||
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
15 | 6syFuuqkNCeGBkoMXkex0x | Raça Negra – Vol. | ||
8 | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; | ||
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
16 | 4qBS8sfDa0EQSa6OXCFNP5 | Raça Negra – Vol. | ||
7 | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; | ||
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
17 | 29V84LmnwpPioQeVpnFII6 | Raça Negra – Ao | ||
Vivo – Vol. 1 | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; | ||
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
18 | 51BAZ90Bb9cCJTb58rC0al | Raça Negra – Ao | ||
Vivo – Vol. 2 | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; | ||
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
19 | 7mIvanqTeinJuA2dkZ9fcw | Raça Negra – Vol. | ||
6 | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; | ||
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
20 | 2KBcXYnW4XavPt5X57OeMY | Raça Negra – Vol. | ||
5 | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; | ||
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
21 | 07ydHtUxf2zSG8z0I6nQhV | Raça Negra – Vol. | ||
4 | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; | ||
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
22 | 4KFRAngmHqBN685O1JCAhK | Raça Negra – Vol. | ||
2 | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; | ||
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
23 | 57v2s5PkNuYDYvVB0cSZg3 | Raça Negra – Vol. | ||
3 | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; | ||
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN | ||||
24 | 6GbhqV8RmmGsehuxNGLAjA | Raça Negra – Vol. | ||
1 | album | AD;AR;AT;AU;BE;BG;BO;BR;CA;CH; | ||
CL;CO;CR;CY;CZ;DE;DK;DO;EC;EE;ES; | ||||
FI;FR;GB;GR;GT;HK;HN;HU;ID;IE;IS; | ||||
IT;JP;LI;LT;LU;LV;MC;MT;MX;MY;NI; | ||||
NL;NO;NZ;PA;PE;PH;PL;PT;PY;SE; | ||||
SG;SK;SV;TH;TR;TW;US;UY;VN |
Pesquisando o álbum teremos a relação de todas as músicas que o compõem e mais algumas informações estruturais. No exemplo abaixo usei o álbum Raça Negra & Amigos II:
album_rn_amigos2 <-getAlbum("0hSUBFqEpxTYTXyYfVncOw",token=keys)
id | name | duration_ms | track_number | disc_number | |
---|---|---|---|---|---|
1 | 1iwv4D5EHcKtJqPprNf8vT | Pot-Pourri: | |||
Sozinho / Estou Mal / Volta – Ao Vivo | 299565 | 1 | 1 | ||
2 | 51ff111hRyNU6PIZqYuVen | Te Quero Comigo – | |||
Ao Vivo | 181450 | 2 | 1 | ||
3 | 4vTI1wFRtzrk4GQNHjG8fx | Cigana – Ao Vivo | 195875 | 3 | 1 |
4 | 3cXOJdXrVHieyQYgqFoVjq | Vai Curtir, Vai | |||
Dançar – Ao Vivo | 190200 | 4 | 1 | ||
5 | 1MtoOMAoiR4LJ02iKG9fYd | Me Leva Junto Com | |||
Você – Ao Vivo | 201000 | 5 | 1 | ||
6 | 1evGz6jhUfj0YHuSRMKh00 | Dou a Vida por um | |||
Beijo – Ao Vivo | 185875 | 6 | 1 | ||
7 | 6QhGxxXyNL45IbxxiFqRKC | Pensando Em Você – | |||
Ao Vivo | 142495 | 7 | 1 | ||
8 | 5dBSzL9HhM4Ozly6QYKF7b | Extrapolei – Ao | |||
Vivo | 180500 | 8 | 1 | ||
9 | 6ZgPpnXKJ46ikXpU7qcxiZ | Dono do Seu Beijo |
Para melhor visualização, foi ocultado a coluna ‘available_markets’ e ‘preview_url’.
Começamos a entrar na parte que eu considero mais interessante, talvez pela quantidade de dados ou pela oportunidade de combinações que podemos fazer, não sei dizer ao certo. Antes de continuar no tutorial é imprescindível ler essa página do Spotify, na qual é explicado cada uma das métricas atribuídas aos áudios disponíveis na plataforma.
O código abaixo faz a requisição dos dados por música. Usei como exemplo a música “Cigana“.
musica_info <- getFeatures("4vTI1wFRtzrk4GQNHjG8fx",token=keys)
Como retorno temos as seguintes métricas:
id | 4vTI1wFRtzrk4GQNHjG8fx |
---|---|
danceability | 0.655 |
energy | 0.63 |
key | 0 |
loudness | -6.717 |
mode | 1 |
speechiness | 0.0353 |
acousticness | 0.47 |
instrumentalness | 0 |
liveness | 0.589 |
valence | 0.352 |
tempo | 141.981 |
duration_ms | 195875 |
time_signature | 4 |
uri | spotify:track:4vTI1wFRtzrk4GQNHjG8fx |
analysis_url | https://api.spotify.com/v1/audio-analysis/4vTI1wFRtzrk4GQNHjG8fx |
O próximo recurso apresentado é a base para a extração dos dados utilizada na visualização que está no fim desse post e consiste na busca pelas playlists que o usuário criou ou esta seguindo. Usei como exemplo novamente o Pedro Meirelles – que sempre uso em todos os meus testes (Pedro <3) :
# Verificando as playlist de um usuário
wh.playlist <- getPlaylist("12161883573",token=keys)
id | name | ownerid | tracks |
---|---|---|---|
3Xplz55ngFyezx6ljo4zzl | R&BALLADS | 12161883573 | 22 |
39VPSVNmiCkKnuvuWBBIor | FORÇA | 12161883573 | 28 |
6ZUsHUrxSjLbm2Ay5iTGbT | AXÉCALMO | 12161883573 | 25 |
5jHR4tew3cIWNGhJjSvZr6 | DISNEY CHANNEL | 12161883573 | 36 |
0u3Qnl9IzwtvBY1V5MAc8X | rihanna eu te | ||
venero | 12161883573 | 19 | |
0yiJafsuPtRIgnyybsUWwO | Ivete no Rock In | ||
Rio 2017 | 12161883573 | 20 | |
1W5VKeeEMkRAhlzajWPf9t | Baile Charme – BRT | ||
Expresso | vinieloy | 283 | |
37i9dQZEVXbMXbN3EUUhlg | Brazil Top 50 | spotifycharts | 50 |
3xwDn2RT5l4GvhRrylV6aM | NA VOZ DE IVETE | 12161883573 | 27 |
37i9dQZF1DWTkIwO2HDifB | Funk 25 | spotify | 25 |
1gCpl2yIhpUj8Z3wCPHteM | This Is: Nicki | ||
Minaj | xuxudobigode | 151 | |
37i9dQZF1DWVtNGBlJrHWR | This Is: Jennifer | ||
Lopez | spotify | 41 | |
0r1G4J8wOFJO2IqraCrf9z | FRITA BAHIA | 12161883573 | 38 |
37i9dQZF1DWU8quswnFt3c | Feminist Friday | spotify | 31 |
37i9dQZF1DX1wNY9tfWQsS | Women of R&B | spotify | 80 |
37i9dQZF1DX9zF9ZmsyHKt | Mulheres do Brasil | spotify | 50 |
37i9dQZF1DWVYnVJd3Z0Wp | This Is: Pitty | spotify | 21 |
37i9dQZF1DX4Kia09Psr0A | This Is: Marisa | ||
Monte | spotify | 30 | |
37i9dQZF1DWZylNQMXNhNe | Lacradorxs | spotify | 28 |
37i9dQZF1DWZ2DWnNKZTXs | Brasil Anos 2000 | spotify | 51 |
2dI270WZlz9BiGQKQywg0f | AxéForte | pedrotourinho | 84 |
6eujIvDFjtT2viczX9y55e | SUPERA VIADO | 12161883573 | 22 |
7szwm81dhjPufr4AWLj8wd | carnaval baiano no | ||
rio | 12161883573 | 85 | |
3WGn43UYq8lBo23vnIwBuf | Axé, O Filme | chicoksz | 44 |
5mxrh5mML97dqaqV4KR2gk | The XOlist | felipebarcellos | 28 |
5IqHJjfPlvjYjAFIjPPdk7 | CARNAVAL2017 | 12161883573 | 36 |
7KdBHdJ7L88v0XPgGVupRe | Bieber 2.0 | 12161883573 | 26 |
4Z4KbP3KOrB29VvHHENmo6 | 🔱$Funk 💯% Putaria 2.0$🔱 | 222a2endbw45g7eueixhxkzvy | 120 |
622JI34dT1qwNoK0YwMydF | ME FAZ BEM | 12161883573 | 7 |
7oGJKUvJ4Bypcau9kG2uUO | funk gostosinho | 12142160910 | 104 |
7EQu3DtjLnba6JwDdN4Tgj | THE BOSS | 12161883573 | 51 |
293Pm6k7ENqvOcjxoxNx65 | PAREDÃO | 12161883573 | 76 |
4OSKhZug4TUqnxqa8PeUPv | PENSA PORRA | 12161883573 | 49 |
0iqIYqSWs2W1JUFriWpoad | GOSTOSINHO | 12161883573 | 22 |
0SaWYfaYWySa8gdpLWv9se | FERVO | 12161883573 | 16 |
6zsQoR0WDmBmwUrIV6jhuS | EXPLODE | 12161883573 | 29 |
0UQUStd8PULBWi3VblxfpT | FUNK PRO ASFALTO | 12161883573 | 79 |
4Te7ei4VhJJVgRcaUcc9iY | BAHIA | 12161883573 | 75 |
4f2yTC1B9M6h0lGNknLND1 | RIO | 12161883573 | 100 |
45jlFYz4rxtvk4gyT6PeiH | RELAXA | 12161883573 | 43 |
70ropFRwKmWU1iSNAqsUQ6 | Pérolas de Ivete | 12161883573 | 19 |
2kbuzyPwRd35FAszZFKuzY | NIGHT OUT | 12161883573 | 90 |
3gYiXHHgYTALH1LmLNlYTX | #nowplaying | 12161883573 | 141 |
A próxima requisição tem como retorno a lista das musicas presentes em uma playlist, dado o name do usuário e o Id da playlist. Como exemplo estou usando o spotifycharts , esse é o usuário que o Spotify colocou como dono das listas de músicas mais tocadas:
playlist_info <- getPlaylistSongs("spotifycharts","37i9dQZEVXbMXbN3EUUhlg",token=keys)
# Como retorno temos as seguintes colunas:
#[1] "tracks" "id" "popularity" "artist" "artistId" "album"
#[7] "albumId"
tracks | id | popularity | artist | artistId | album | albumId | |
---|---|---|---|---|---|---|---|
1 | New Rules | 2ekn2ttSfGqwhhate0LSR0 | 97 | Dua Lipa | 6M2wZ9GZgrQXHCFfjv46we | Dua Lipa (Deluxe) | 01sfgrNbnnPUEyz6GZYlt9 |
2 | Deixe Me Ir – | ||||||
Acústico | 2srL4DYBekshpbprS6H0mO | 82 | 1Kilo | 6E2st8OqIaS7PU5gj95FSE | Deixe Me Ir | ||
(Acústico) | 1eFFmE91zTBJQCz8YtFctr | ||||||
3 | Agora Vai Sentar | 0pDaqgIForVNO4jrtTxcWT | 78 | MC Jhowzinho e MC | |||
Kadinho | 2Q4r4Epfaaho06ONTHx7OS | Agora Vai Sentar – | |||||
Single | 39HSKuqaxE7NH3ZeJoKqdh | ||||||
4 | Corpo Sensual | 4kkQGhScJDzNIIGavQE9SN | 80 | Pabllo Vittar | 6tzRZ39aZlNqlUzQlkuhDV | Vai Passar Mal | 2HTrcsRAZAfD28QdqNc2jT |
5 | Is That For Me | 2KwojFDebQV4J2b0JMRR5Q | 82 | Alesso | 4AVFqumd2ogHFlRbKIjp1t | Is That For Me | 1LtTYrAjvMjXTAo8U70eWL |
6 | Havana | 0ofbQMrRDsUaVKq2mGLEAb | 100 | Camila Cabello | 4nDoRrQiYLoBzwC5BhVJzF | Havana | 5chBPOVY2I0bG5V3igb5QL |
7 | Big Jet Plane | 1xd3OqTbx17HutN7RfJOTj | 80 | Alok | 0NGAZxHanS9e0iNHpR8f2W | Big Jet Plane | 35i6JrOJDOFIUuyQDtMjbA |
8 | Sua Cara (feat. | ||||||
Anitta & Pabllo Vittar) | 3ibRxEv4KkcU9e259eyNJA | 83 | Major Lazer | 738wLrAtLtCtFOLvQBXOXp | Know No Better | 3aM83lEPSXKv5RnM43e8T9 | |
9 | Fazer Falta | 6pSYjx66rlqRmGGTHhnjCo | 81 | Mc Livinho | 7me0S5Z40qVWj3gzyK8aC3 | Fazer Falta | 12SX4VJ6rdQQpMGHVBl1oe |
10 | Raspão – Ao Vivo | 6gquljDBW7rE6mCBzmTRxo | 79 | Henrique & | |||
Diego | 1D6vAeVUcgMbSx80IA3Zun | De Braços Abertos | |||||
(Ao Vivo) | 6plZQVlgm6HDExDtMcb4iC | ||||||
11 | Encaixa | 7yYOMPwpV5CsK0cxoAZT6B | 81 | MC Kevinho | 1mXAhKnZEdF6rotyyd4GBi | Encaixa | 1VpAtphzREZCxdmXBdmuCn |
12 | Ar-Condicionado No | ||||||
15 – Ao Vivo | 5ac0YTpOaDX9wEYYyGCglL | 77 | Wesley Safadão | 1AL2GKpmRrKXkYIcASuRFa | In Miami Beach (Ao | ||
Vivo) | 508PwdK7nipXn6CL20PWkb | ||||||
13 | Wolves | 7EmGUiUaOSGDnUUQUDrOXC | 84 | Selena Gomez | 0C8ZW7ezQVs4URX5aX7Kqx | Wolves | 2pABD3sfXVajKVXw83WMvT |
14 | rockstar | 7wGoVu4Dady5GV0Sv4UIsx | 98 | Post Malone | 246dkjvS1zLTtiykXe5h60 | rockstar | 4AabsQ6plH3OmdE6BWI04j |
15 | Regime Fechado – | ||||||
Ao Vivo | 6UZJOc2HBrTp9DYfir9N8n | 79 | Simone & | ||||
Simaria | 0MInKJqZscEeNc5K3K0mkE | Simone & | |||||
Simaria (Ao Vivo) | 4qszY7uzcewzMAbr9HRUJN | ||||||
16 | K.O. | 5zSiXA70xM4kuSt6qim6jl | 79 | Pabllo Vittar | 6tzRZ39aZlNqlUzQlkuhDV | Vai Passar Mal | 2HTrcsRAZAfD28QdqNc2jT |
17 | Vidinha de Balada |
A requisição getRelated nos retorna os 20 artistas que o Spotify coloca como relacionado, ou com maior aproximação, a um artista analisado. Ela aparece na lateral inferior direita na página do artista quando se olha pela versão web ou desktop da plataforma. Essa funcionalidade foi uma das que achei mais interessante e a que mais usei.
# Busca por artistas relacionados dentro da plataforma
artista_related <-getRelated("raca+negra",token=keys)
name | id | popularity | type | followers | |
---|---|---|---|---|---|
1 | Só Pra Contrariar | 2B8HcBRTizIsSPryM46Sb1 | 61 | artist | 104693 |
2 | Art Popular | 6YMWV5AeYoZymMMDonMfsA | 55 | artist | 57651 |
3 | Exaltasamba | 6VPRGmbZ0dupZrbwwEDRRw | 67 | artist | 186889 |
4 | Bokaloka | 6XgJ4LQHTOtveWKH5V7X56 | 52 | artist | 52903 |
5 | Molejo | 7yl05GUXqcUA3mfpowr1fe | 56 | artist | 53408 |
6 | Grupo Revelação | 7yQrcdkLdBAkV7yY9fF2Hw | 67 | artist | 170081 |
7 | Belo | 7hLjkyL9Pz9xtQNahzJZki | 63 | artist | 150666 |
8 | Katinguelê | 3gdaj3L0OqxdaVoxnI7ZGu | 47 | artist | 34760 |
9 | Pixote | 0ciLF0bOuu2BhqzCEZgHoB | 61 | artist | 133231 |
10 | Soweto | 3QYmec82Yj7fjTMvrt49E4 | 51 | artist | 42030 |
11 | Os Travessos | 3RpJ23sQA3B70ZgSnT2Vxr | 58 | artist | 80163 |
12 | Bom Gosto | 4SaxUo7mfdHBowU0llwxFd | 62 | artist | 109817 |
13 | Sorriso Maroto | 1fUSLFr4WUBx7joEcGwpvG | 71 | artist | 331146 |
14 | Grupo Fundo De | ||||
Quintal | 1WkZvxuA4zCcFF9GChK6Vr | 59 | artist | 80584 | |
15 | Karametade | 2zUi8eGWcojkvBwCysFOyC | 44 | artist | 18191 |
16 | Inimigos Da HP | 5IEFDMhrxPABOkcu6Vx93O | 54 | artist | 52476 |
17 | Fábio Jr. | 60iOwdF3A0p4pAwgUXMaWU | 55 | artist | 112053 |
18 | Jeito Moleque | 3V7U1x0TRBn7spzHDQiZhi | 58 | artist | 83725 |
19 | Agepê | 5T2UOU9fV8RcUgLH3b6TTN | 43 | artist | 29557 |
20 | Swing & | ||||
Simpatia | 07o97MiFEobUUwiIYcspmj | 45 | artist | 34664 |
Como exemplo prático, usei algumas requisições que já tinha obtido acima para criar um exemplo de como encontrar os artistas relacionados dos artistas mais tocados no Brasil.
# Requisição usando como exemplo a lista de 50 músicas mais tocadas do Brasil
playlist_info <- getPlaylistSongs("spotifycharts","37i9dQZEVXbMXbN3EUUhlg",token=keys)
# Esta função tem por objetivo pegar o nome do artista disponibilizado em playlist_info, fazer
# a busca pelos artistas relacionados e alocar num data frame por linha. O Rhenan Bartels me ajudou nessa função.
get_all_related <- function(artistas){
related_frame <- c()
for(artista in artistas){
related_frame = rbind(related_frame, getRelated(artista, token=keys))
}
return(related_frame)
}
# Removendo caracteres estranhos para a busca do Spotify, como ç, ã, ô... (Obrigado pela ajuda, Eduardo Leoni)
playlist_info$artist <- stringi::stri_trans_general(playlist_info$artist,"Latin-ASCII")
# Aplicando a função criada acima e buscando os dados na API:
artistas_rel <- get_all_related(playlist_info[,4])
# Com o objetivo de gerar um csv para importar no Gephi foi criado uma repetição
# de 20 vezes cada linha( para bater que os artistas relacionados):
artistas_prin <- rep(playlist_info[,4],each=20)
# Criando um data frame com os dados para serem usados no Gephi
grafo_artistas_related <- cbind(artistas_prin,artistas_rel = as.character(artistas_rel$name))
# Exportando esses dados:
write.csv(grafo_artistas_related,"grafo_artistas_related.csv", row.names = FALSE)
O grafo abaixo é o resultado do csv importado no Gephi. O tamanho dos nós varia de acordo com o grau de entrada que, no caso apresentado, é a quantidade de vezes que são colocados como artistas relacionados no Spotify. Vale lembrar que infelizmente o Spotify só retorna o primeiro artista listado como cantor.
Clique na imagem para abrir o site!
https://trifenol.github.io/rede_rspotify/
Esse foi apenas um pequeno exemplo do uso do pacote RSpotify. Na semana que vem trarei ( e dou update aqui) uma análise completa da carreira de uma certa cantora, as mudanças da sua fase funk até a fase pop/internacional, utilizando os dados da requisição getFeatures.
Deixe um comentário