diff --git a/Spotify/Spotify_Get_Album_Tracks.ipynb b/Spotify/Spotify_Get_Album_Tracks.ipynb new file mode 100644 index 0000000000..fb6e46d1dc --- /dev/null +++ b/Spotify/Spotify_Get_Album_Tracks.ipynb @@ -0,0 +1,371 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a1bc9b4b-3da9-4d03-b259-5ff1e3bb18bf", + "metadata": { + "papermill": {}, + "tags": [] + }, + "source": [ + "\"Naas\"" + ] + }, + { + "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": [ + "" + ], + "text/plain": [ + "" + ] + }, + "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 +}