Skip to content

Commit e9ba7bd

Browse files
authored
Merge pull request mouredev#6169 from miguelex/main
mouredev#37 - php
2 parents c08e355 + c70d383 commit e9ba7bd

File tree

10 files changed

+813
-0
lines changed

10 files changed

+813
-0
lines changed
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
import java.io.BufferedReader;
2+
import java.io.InputStreamReader;
3+
import java.net.HttpURLConnection;
4+
import java.net.URL;
5+
import java.util.Base64;
6+
import java.util.Scanner;
7+
import org.json.JSONArray;
8+
import org.json.JSONObject;
9+
10+
public class SpotifyComparison {
11+
12+
private static final String CLIENT_ID = "YOUR_CLIENT_ID";
13+
private static final String CLIENT_SECRET = "YOUR_CLIENT_SECRET";
14+
15+
public static void main(String[] args) throws Exception {
16+
Scanner scanner = new Scanner(System.in);
17+
18+
System.out.print("Introduce el nombre del primer grupo: ");
19+
String band1 = scanner.nextLine();
20+
System.out.print("Introduce el nombre del segundo grupo: ");
21+
String band2 = scanner.nextLine();
22+
23+
String token = getAccessToken();
24+
25+
JSONObject band1Data = getArtistData(token, band1);
26+
JSONObject band2Data = getArtistData(token, band2);
27+
28+
JSONObject band1Stats = getArtistStats(band1Data.getString("id"), token);
29+
JSONObject band2Stats = getArtistStats(band2Data.getString("id"), token);
30+
31+
JSONObject band1TopTrack = getArtistTopTrack(band1Data.getString("id"), token);
32+
JSONObject band2TopTrack = getArtistTopTrack(band2Data.getString("id"), token);
33+
34+
System.out.println("\n" + band1 + " Stats: " + band1Stats);
35+
System.out.println("Canción más popular de " + band1 + ": " + band1TopTrack);
36+
37+
System.out.println("\n" + band2 + " Stats: " + band2Stats);
38+
System.out.println("Canción más popular de " + band2 + ": " + band2TopTrack);
39+
40+
String moreFollowers = band1Stats.getInt("followers") > band2Stats.getInt("followers") ? band1 : band2;
41+
String morePopularTrack = band1TopTrack.getInt("playCount") > band2TopTrack.getInt("playCount") ? band1 : band2;
42+
43+
System.out.println("\nLa banda con más seguidores es: " + moreFollowers);
44+
System.out.println("La banda con la canción más popular es: " + morePopularTrack);
45+
}
46+
47+
private static String getAccessToken() throws Exception {
48+
String auth = CLIENT_ID + ":" + CLIENT_SECRET;
49+
String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes());
50+
51+
URL url = new URL("https://accounts.spotify.com/api/token");
52+
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
53+
conn.setRequestMethod("POST");
54+
conn.setRequestProperty("Authorization", "Basic " + encodedAuth);
55+
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
56+
conn.setDoOutput(true);
57+
58+
String data = "grant_type=client_credentials";
59+
conn.getOutputStream().write(data.getBytes());
60+
61+
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
62+
String inputLine;
63+
StringBuilder response = new StringBuilder();
64+
65+
while ((inputLine = in.readLine()) != null) {
66+
response.append(inputLine);
67+
}
68+
in.close();
69+
70+
JSONObject json = new JSONObject(response.toString());
71+
return json.getString("access_token");
72+
}
73+
74+
private static JSONObject getArtistData(String token, String artistName) throws Exception {
75+
URL url = new URL("https://api.spotify.com/v1/search?q=" + artistName + "&type=artist");
76+
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
77+
conn.setRequestMethod("GET");
78+
conn.setRequestProperty("Authorization", "Bearer " + token);
79+
80+
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
81+
String inputLine;
82+
StringBuilder response = new StringBuilder();
83+
84+
while ((inputLine = in.readLine()) != null) {
85+
response.append(inputLine);
86+
}
87+
in.close();
88+
89+
JSONObject json = new JSONObject(response.toString());
90+
JSONArray items = json.getJSONObject("artists").getJSONArray("items");
91+
return items.getJSONObject(0);
92+
}
93+
94+
private static JSONObject getArtistStats(String artistId, String token) throws Exception {
95+
URL url = new URL("https://api.spotify.com/v1/artists/" + artistId);
96+
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
97+
conn.setRequestMethod("GET");
98+
conn.setRequestProperty("Authorization", "Bearer " + token);
99+
100+
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
101+
String inputLine;
102+
StringBuilder response = new StringBuilder();
103+
104+
while ((inputLine = in.readLine()) != null) {
105+
response.append(inputLine);
106+
}
107+
in.close();
108+
109+
return new JSONObject(response.toString());
110+
}
111+
112+
private static JSONObject getArtistTopTrack(String artistId, String token) throws Exception {
113+
URL url = new URL("https://api.spotify.com/v1/artists/" + artistId + "/top-tracks?market=US");
114+
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
115+
conn.setRequestMethod("GET");
116+
conn.setRequestProperty("Authorization", "Bearer " + token);
117+
118+
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
119+
String inputLine;
120+
StringBuilder response = new StringBuilder();
121+
122+
while ((inputLine = in.readLine()) != null) {
123+
response.append(inputLine);
124+
}
125+
in.close();
126+
127+
JSONObject json = new JSONObject(response.toString());
128+
JSONArray tracks = json.getJSONArray("tracks");
129+
return tracks.getJSONObject(0);
130+
}
131+
}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
const readline = require('readline');
2+
3+
const rl = readline.createInterface({
4+
input: process.stdin,
5+
output: process.stdout
6+
});
7+
8+
const clientId = '4cc0a0d989f54e4f8e44da158cf646b0';
9+
const clientSecret = '05fa3d3be3c54a4d941d648c980ca228';
10+
11+
async function getAccessToken() {
12+
const response = await fetch('https://accounts.spotify.com/api/token', {
13+
method: 'POST',
14+
headers: {
15+
'Content-Type': 'application/x-www-form-urlencoded',
16+
'Authorization': 'Basic ' + btoa(clientId + ':' + clientSecret),
17+
},
18+
body: 'grant_type=client_credentials'
19+
});
20+
const data = await response.json();
21+
return data.access_token;
22+
}
23+
24+
async function getArtistData(token, artistName) {
25+
const response = await fetch(`https://api.spotify.com/v1/search?q=${artistName}&type=artist`, {
26+
method: 'GET',
27+
headers: {
28+
'Authorization': `Bearer ${token}`
29+
}
30+
});
31+
const data = await response.json();
32+
return data.artists.items[0];
33+
}
34+
35+
async function getArtistStats(artistId, token) {
36+
const response = await fetch(`https://api.spotify.com/v1/artists/${artistId}`, {
37+
method: 'GET',
38+
headers: {
39+
'Authorization': `Bearer ${token}`
40+
}
41+
});
42+
const data = await response.json();
43+
return {
44+
name: data.name,
45+
followers: data.followers.total,
46+
popularity: data.popularity,
47+
genres: data.genres,
48+
};
49+
}
50+
51+
async function getArtistTopTracks(artistId, token) {
52+
const response = await fetch(`https://api.spotify.com/v1/artists/${artistId}/top-tracks?market=US`, {
53+
method: 'GET',
54+
headers: {
55+
'Authorization': `Bearer ${token}`
56+
}
57+
});
58+
const data = await response.json();
59+
const mostPopularTrack = data.tracks[0];
60+
return {
61+
name: mostPopularTrack.name,
62+
playCount: mostPopularTrack.popularity,
63+
album: mostPopularTrack.album.name
64+
};
65+
}
66+
67+
async function compareBands(band1, band2) {
68+
const token = await getAccessToken();
69+
70+
const band1Data = await getArtistData(token, band1);
71+
const band2Data = await getArtistData(token, band2);
72+
73+
const band1Stats = await getArtistStats(band1Data.id, token);
74+
const band2Stats = await getArtistStats(band2Data.id, token);
75+
76+
const band1TopTrack = await getArtistTopTracks(band1Data.id, token);
77+
const band2TopTrack = await getArtistTopTracks(band2Data.id, token);
78+
79+
console.log(`\n${band1} Stats:`, band1Stats);
80+
console.log(`Canción más popular de ${band1}:`, band1TopTrack);
81+
82+
console.log(`\n${band2} Stats:`, band2Stats);
83+
console.log(`Canción más popular de ${band2}:`, band2TopTrack);
84+
85+
const moreFollowers = (band1Stats.followers > band2Stats.followers)
86+
? band1
87+
: band2;
88+
89+
const morePopularTrack = (band1TopTrack.playCount > band2TopTrack.playCount)
90+
? band1
91+
: band2;
92+
93+
console.log(`\nLa banda con más seguidores es: ${moreFollowers}`);
94+
console.log(`La banda con la canción más popular es: ${morePopularTrack}`);
95+
}
96+
97+
rl.question('Introduce el nombre del primer grupo: ', (band1) => {
98+
rl.question('Introduce el nombre del segundo grupo: ', (band2) => {
99+
compareBands(band1, band2).then(() => {
100+
rl.close();
101+
}).catch(err => {
102+
console.error('Error al comparar las bandas:', err);
103+
rl.close();
104+
});
105+
});
106+
});
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
<?php
2+
3+
$clientId = '';
4+
$clientSecret = '';
5+
6+
function getAccessToken() {
7+
global $clientId, $clientSecret;
8+
9+
$auth = base64_encode($clientId . ':' . $clientSecret);
10+
$options = [
11+
'http' => [
12+
'header' => "Content-Type: application/x-www-form-urlencoded\r\n" .
13+
"Authorization: Basic " . $auth . "\r\n",
14+
'method' => 'POST',
15+
'content' => http_build_query(['grant_type' => 'client_credentials']),
16+
]
17+
];
18+
19+
$context = stream_context_create($options);
20+
$result = file_get_contents('https://accounts.spotify.com/api/token', false, $context);
21+
22+
if ($result === FALSE) {
23+
die('Error getting access token.');
24+
}
25+
26+
$data = json_decode($result, true);
27+
return $data['access_token'];
28+
}
29+
30+
function getArtistData($token, $artistName) {
31+
$artistName = urlencode($artistName);
32+
$options = [
33+
'http' => [
34+
'header' => "Authorization: Bearer " . $token . "\r\n",
35+
'method' => 'GET',
36+
]
37+
];
38+
39+
$context = stream_context_create($options);
40+
$result = file_get_contents("https://api.spotify.com/v1/search?q=$artistName&type=artist", false, $context);
41+
42+
if ($result === FALSE) {
43+
die('Error getting artist data.');
44+
}
45+
46+
$data = json_decode($result, true);
47+
return $data['artists']['items'][0];
48+
}
49+
50+
function getArtistStats($artistId, $token) {
51+
$options = [
52+
'http' => [
53+
'header' => "Authorization: Bearer " . $token . "\r\n",
54+
'method' => 'GET',
55+
]
56+
];
57+
58+
$context = stream_context_create($options);
59+
$result = file_get_contents("https://api.spotify.com/v1/artists/$artistId", false, $context);
60+
61+
if ($result === FALSE) {
62+
die('Error getting artist stats.');
63+
}
64+
65+
$data = json_decode($result, true);
66+
return [
67+
'name' => $data['name'],
68+
'followers' => $data['followers']['total'],
69+
'popularity' => $data['popularity'],
70+
'genres' => $data['genres'],
71+
];
72+
}
73+
74+
function getArtistTopTracks($artistId, $token) {
75+
$options = [
76+
'http' => [
77+
'header' => "Authorization: Bearer " . $token . "\r\n",
78+
'method' => 'GET',
79+
]
80+
];
81+
82+
$context = stream_context_create($options);
83+
$result = file_get_contents("https://api.spotify.com/v1/artists/$artistId/top-tracks?market=US", false, $context);
84+
85+
if ($result === FALSE) {
86+
die('Error getting top tracks.');
87+
}
88+
89+
$data = json_decode($result, true);
90+
$mostPopularTrack = $data['tracks'][0];
91+
return [
92+
'name' => $mostPopularTrack['name'],
93+
'playCount' => $mostPopularTrack['popularity'],
94+
'album' => $mostPopularTrack['album']['name']
95+
];
96+
}
97+
98+
function compareBands($band1, $band2) {
99+
$token = getAccessToken();
100+
101+
$band1Data = getArtistData($token, $band1);
102+
$band2Data = getArtistData($token, $band2);
103+
104+
$band1Stats = getArtistStats($band1Data['id'], $token);
105+
$band2Stats = getArtistStats($band2Data['id'], $token);
106+
107+
$band1TopTrack = getArtistTopTracks($band1Data['id'], $token);
108+
$band2TopTrack = getArtistTopTracks($band2Data['id'], $token);
109+
110+
echo "\n{$band1} Stats:\n";
111+
print_r($band1Stats);
112+
echo "Canción más popular de {$band1}: ";
113+
print_r($band1TopTrack);
114+
115+
echo "\n{$band2} Stats:\n";
116+
print_r($band2Stats);
117+
echo "Canción más popular de {$band2}: ";
118+
print_r($band2TopTrack);
119+
120+
$moreFollowers = ($band1Stats['followers'] > $band2Stats['followers'])
121+
? $band1
122+
: $band2;
123+
124+
$morePopularTrack = ($band1TopTrack['playCount'] > $band2TopTrack['playCount'])
125+
? $band1
126+
: $band2;
127+
128+
echo "\nLa banda con más seguidores es: {$moreFollowers}\n";
129+
echo "La banda con la canción más popular es: {$morePopularTrack}\n";
130+
}
131+
132+
echo "Introduce el nombre del primer grupo: ";
133+
$band1 = trim(fgets(STDIN));
134+
135+
echo "Introduce el nombre del segundo grupo: ";
136+
$band2 = trim(fgets(STDIN));
137+
138+
compareBands($band1, $band2);

0 commit comments

Comments
 (0)