-
Notifications
You must be signed in to change notification settings - Fork 453
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2431 from jupyter-naas/2421-spotify-get-album-tracks
2421 spotify get album tracks
- Loading branch information
Showing
1 changed file
with
371 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,371 @@ | ||
{ | ||
"cells": [ | ||
{ | ||
"cell_type": "markdown", | ||
"id": "a1bc9b4b-3da9-4d03-b259-5ff1e3bb18bf", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"source": [ | ||
"<img width=\"10%\" alt=\"Naas\" src=\"https://landen.imgix.net/jtci2pxwjczr/assets/5ice39g4.png?w=160\"/>" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "d51a2ac8-dbe4-4a99-8cd1-0e67a2c5396e", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"source": [ | ||
"# Spotify - Get Album Tracks" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "d7ffdc37-5a3f-4292-ab61-c6ba7dd1e2eb", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"source": [ | ||
"**Tags:** #spotify #api #album #tracks #get #web" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "c5b61544-dc7f-4c02-adc3-460d2b52460f", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"source": [ | ||
"**Author:** [Alton Liew](https://www.linkedin.com/in/alton-liew-749944182/)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "a337b9e6-e401-4ccd-93eb-475bc0dbfa17", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"source": [ | ||
"**Last update:** 2023-12-08 (Created: 2023-12-01)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "08a63237-284b-4b61-9212-f8aa5f484911", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"source": [ | ||
"**Description:** This notebook will get Spotify catalog information about an album’s tracks. Optional parameters can be used to limit the number of tracks returned." | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "e31f1464-01ef-4078-b26a-ec2b60a1407a", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"source": [ | ||
"**References:**\n", | ||
"- [Spotify - Get an Album's Tracks](https://developer.spotify.com/documentation/web-api/reference/get-an-albums-tracks)\n", | ||
"- [Spotify - Web API Overview](https://developer.spotify.com/documentation/web-api/)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "e00f1ca2-39e8-4c73-bdc4-d9a758338c68", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"source": [ | ||
"## Input" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "c811dad9-7aa5-4005-b24d-1bfa6fe02c66", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"source": [ | ||
"### Import libraries" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 1, | ||
"id": "067a8d2b-9fcb-491e-975a-1c6f2ccd0a87", | ||
"metadata": { | ||
"execution": { | ||
"iopub.execute_input": "2023-12-03T23:27:25.464664Z", | ||
"iopub.status.busy": "2023-12-03T23:27:25.464454Z", | ||
"iopub.status.idle": "2023-12-03T23:27:27.789060Z", | ||
"shell.execute_reply": "2023-12-03T23:27:27.788332Z", | ||
"shell.execute_reply.started": "2023-12-03T23:27:25.464602Z" | ||
}, | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"try:\n", | ||
" import spotipy\n", | ||
"except:\n", | ||
" !pip install spotipy --user\n", | ||
" import spotipy\n", | ||
"from spotipy.oauth2 import SpotifyClientCredentials\n", | ||
"import naas\n", | ||
"from pprint import pprint\n", | ||
"from IPython.display import Image, display" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "efc67696-83f4-4ee7-9c98-db30aff18dec", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"source": [ | ||
"### Setup variables\n", | ||
"- `client_id`: Your Spotify API client ID. [Get your client ID](https://developer.spotify.com/documentation/general/guides/app-settings/#register-your-app)\n", | ||
"- `client_secret`: Your Spotify API client secret. [Get your client secret](https://developer.spotify.com/documentation/general/guides/app-settings/#register-your-app)\n", | ||
"- `artist_id`: The unique Spotify ID for the album. [Find the album ID](https://developer.spotify.com/console/get-album/)\n", | ||
"- `limit`: The number of results you want to receive. " | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 8, | ||
"id": "b0d03ea7-7900-4306-9f99-2a7d788a76c3", | ||
"metadata": { | ||
"execution": { | ||
"iopub.execute_input": "2023-12-03T23:35:36.561477Z", | ||
"iopub.status.busy": "2023-12-03T23:35:36.561243Z", | ||
"iopub.status.idle": "2023-12-03T23:35:36.710004Z", | ||
"shell.execute_reply": "2023-12-03T23:35:36.709366Z", | ||
"shell.execute_reply.started": "2023-12-03T23:35:36.561453Z" | ||
}, | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"client_id = naas.secret.get(\"SPOTIFY_CLIENT_ID\")\n", | ||
"client_secret = naas.secret.get(\"SPOTIFY_CLIENT_SECRET\")\n", | ||
"album_id = \"1gIC63gC3B7o7FfpPACZQJ\"\n", | ||
"limit = 5" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "d156bce7-fba5-48d5-812f-1fe62f9526b7", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"source": [ | ||
"## Model" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "b5d2685a-6fcf-4c6a-9c31-133a56fe8557", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"source": [ | ||
"### Get album tracks" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "aeaef046-9179-4e13-ba8f-492ae13bf17a", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"source": [ | ||
"This function will get Spotify catalog information about an album’s tracks." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"id": "a4aa966b-a88a-4023-b63a-fe64a1abdf5e", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"outputs": [], | ||
"source": [ | ||
"def get_album_tracks(client_id, client_secret, album_id):\n", | ||
" data = None\n", | ||
" sp = spotipy.Spotify(client_credentials_manager=SpotifyClientCredentials(client_id=client_id, client_secret=client_secret))\n", | ||
" try:\n", | ||
" data = sp.album(album_id)\n", | ||
" except spotipy.SpotifyException as e:\n", | ||
" print(f\"Error retrieving album information: {e}\")\n", | ||
" return data\n", | ||
" \n", | ||
"data = get_album_tracks(client_id, client_secret, album_id)\n", | ||
"# pprint(data)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "b4369aed-7c1c-4954-ade8-4e6e98b7bb64", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"source": [ | ||
"## Output" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "104b4fa0-9d31-4701-b8b5-5fa2b1c102bb", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"source": [ | ||
"### Display result" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "19debebf-8c64-4f86-b55b-36bb66c6223e", | ||
"metadata": {}, | ||
"source": [ | ||
"If data is present, print out the album information and tracks with their relevant ID." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 19, | ||
"id": "d379078d-cc22-4c6e-aba1-365008049bb3", | ||
"metadata": { | ||
"execution": { | ||
"iopub.execute_input": "2023-12-03T23:52:56.196554Z", | ||
"iopub.status.busy": "2023-12-03T23:52:56.196325Z", | ||
"iopub.status.idle": "2023-12-03T23:52:56.204437Z", | ||
"shell.execute_reply": "2023-12-03T23:52:56.203725Z", | ||
"shell.execute_reply.started": "2023-12-03T23:52:56.196530Z" | ||
}, | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"Album Information:\n", | ||
"Name: 4\n", | ||
"Artist: Beyoncé\n" | ||
] | ||
}, | ||
{ | ||
"data": { | ||
"text/html": [ | ||
"<img src=\"https://i.scdn.co/image/ab67616d0000b273ff5429125128b43572dbdccd\"/>" | ||
], | ||
"text/plain": [ | ||
"<IPython.core.display.Image object>" | ||
] | ||
}, | ||
"metadata": {}, | ||
"output_type": "display_data" | ||
}, | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"\n", | ||
"Tracks:\n", | ||
"1. Love On Top | ID: 1z6WtY7X4HQJvzxC4UgkSf\n", | ||
"2. Party (feat. André 3000) | ID: 42qh86p7TLXyumxSHn65kc\n", | ||
"3. Schoolin' Life | ID: 6JoIs4XLvBgjZOkKnyuPPv\n", | ||
"4. Countdown | ID: 3axkNosdVQLZiq1HakuGhc\n", | ||
"5. I Miss You | ID: 6Vv9wMxIc6OKRluQefy441\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"if data:\n", | ||
" album_info = {\n", | ||
" \"Name\": data['name'],\n", | ||
" \"Artist\": data['artists'][0]['name'],\n", | ||
" \"Image\": data['images'][0].get(\"url\"),\n", | ||
" \"Tracks\": [(track['name'], track['id']) for track in data['tracks']['items'][:limit]]\n", | ||
" }\n", | ||
" \n", | ||
" print(\"Album Information:\")\n", | ||
" for key, value in album_info.items():\n", | ||
" if key == \"Image\":\n", | ||
" display(Image(url=value))\n", | ||
" elif key == \"Tracks\":\n", | ||
" print(f\"\\n{key}:\")\n", | ||
" for i, (track_name, track_id) in enumerate(value, start=1):\n", | ||
" print(f\"{i}. {track_name} | ID: {track_id}\")\n", | ||
" else:\n", | ||
" print(f\"{key}: {value}\")\n", | ||
"\n", | ||
"else:\n", | ||
" print(\"Failed to retrieve album information.\")" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "3e43a89f-1eaf-438a-928b-b99a13dadc25", | ||
"metadata": { | ||
"papermill": {}, | ||
"tags": [] | ||
}, | ||
"source": [ | ||
" " | ||
] | ||
} | ||
], | ||
"metadata": { | ||
"kernelspec": { | ||
"display_name": "Python 3", | ||
"language": "python", | ||
"name": "python3" | ||
}, | ||
"language_info": { | ||
"codemirror_mode": { | ||
"name": "ipython", | ||
"version": 3 | ||
}, | ||
"file_extension": ".py", | ||
"mimetype": "text/x-python", | ||
"name": "python", | ||
"nbconvert_exporter": "python", | ||
"pygments_lexer": "ipython3", | ||
"version": "3.9.6" | ||
}, | ||
"widgets": { | ||
"application/vnd.jupyter.widget-state+json": { | ||
"state": {}, | ||
"version_major": 2, | ||
"version_minor": 0 | ||
} | ||
} | ||
}, | ||
"nbformat": 4, | ||
"nbformat_minor": 5 | ||
} |