Convert Spotify Library to Markdown
When my Spotify account glitched and my libary showed up empty, I became very aware of the fact my 'music collection' was vendor locked.
To lose the 1200 (!) albums I've saved over the years, was frightening to say the least.
Luckily, under some regulations, Spotify is forced to have your information exportable. Grab it under the Download your data heading in your Spotify privacy settings.
After a few days, you'll receive a couple of .json files with your streaming history, playlists–and most interesting to me–a list of everything in your Spotify library.
I (or rather, ChatGPT and I) then wrote this Python script that can take in this YourLibrary.json and spit out individual Markdown files for every album in the list. With the artist name, album name and Spotify URI in the frontmatter.
import json
import os
import re
# create front matter and content for Markdown file
def create_markdown_content(artist, album, uri):
front_matter = f"""---
artist: "{artist.replace('"', "'")}"
album: "{album.replace('"', "'")}"
uri: "{uri}"
---
"""
return front_matter
# sanitize album names for use as filenames
def sanitize_album_name(album_name):
# Replace periods at the start with an underscore, thanks Slipknot.
if album_name.startswith('.'):
album_name = '_' + album_name[1:]
# Replace special characters with an underscore, for all normal album names
album_name = re.sub(r'[\\/*?:"<>|,]', '_', album_name)
return album_name
# export each album to an individual Markdown file
def export_albums_to_markdown(albums, folder):
for album in albums:
artist = album['artist']
album_name = album['album']
uri = album['uri']
# Sanitize album name to be used as a filename
safe_album_name = sanitize_album_name(album_name)
# Create Markdown content
content = create_markdown_content(artist, album_name, uri)
file_name = os.path.join(folder, f"{safe_album_name}.md")
# Write the markdown file
with open(file_name, 'w', encoding='utf-8') as f:
f.write(content)
print(f"Exported: {file_name}")
if __name__ == '__main__':
# Ask for the JSON file location
json_file_path = input("Enter the path to YourLibrary.json: ")
# Check if the 'albums' folder exists, create if not
folder = 'albums'
if not os.path.exists(folder):
os.makedirs(folder)
# Load and parse the JSON file
try:
with open(json_file_path, 'r', encoding='utf-8') as file:
data = json.load(file)
# Export albums to markdown in the 'albums' folder
export_albums_to_markdown(data['albums'], folder)
except FileNotFoundError:
print(f"No file found at {json_file_path}. Please check the path and try again.")
except json.JSONDecodeError:
print(f"Error decoding JSON from file {json_file_path}. Please ensure it's a valid JSON file.")
except Exception as e:
print(f"An unexpected error occurred: {e}")
To download the coverart of each album, I have a script that is a bit more involved. It uses the Spotify API. Use the form in my site's footer to reach out and I can help you with that, if you like.
- Exporting Tasks from Things 3 Database to Plain Text technology
- Prevent Browser from Hijacking the Media Keys technology
- LinearMouse–the remedy to Logitech their dumb choices technology
- Today's Lack of Music with an Inherent Value musicology
- External files in Obsidian without duplicating obsidian
- How we value music as an art form musicology
- Controlling Boox Network Traffic technology
- Lay out all Obsidian notes in a grid obsidian
- Highlight callouts in Obsidian obsidian
- AI-assisted music is not the problem musicology
- Mela to Markdown (Python script) scripts
- Display Airplay Now-Playing on old Android Tablet with MQTT smarthome
- Understanding Streaming Music Royalty Payments technology
- My Rating System and Review Criteria musicology
- Display recent files in Obsidian Vault obsidian
- Things3 Overview in Obsidian obsidian
- List unlinked notes in Obsidian obsidian
- My Zotero research paper template obsidian