{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Ali Akhtari · Notes",
  "home_page_url": "https://aliakhtari.com/",
  "feed_url": "https://aliakhtari.com/feed.json",
  "description": "Technical notes about software systems, automation, open-source maintenance, and practical engineering decisions.",
  "language": "en-us",
  "authors": [
    {
      "name": "Ali Akhtari",
      "url": "https://aliakhtari.com/"
    }
  ],
  "items": [
    {
      "id": "https://aliakhtari.com/notes/download-spotify-cover-art-python/",
      "url": "https://aliakhtari.com/notes/download-spotify-cover-art-python/",
      "title": "Download Spotify cover art in full resolution with Python",
      "summary": "Pull the high-res cover for any track — no API key, no account. A one-liner for one, a small loop for a whole folder, and the option to bake it into a preview.",
      "content_text": "Pull the high-res cover for any track — no API key, no account. A one-liner for one, a small loop for a whole folder, and the option to bake it into a preview.",
      "date_published": "2026-06-20T00:00:00.000Z",
      "tags": [
        "Python",
        "Spotify",
        "Web data"
      ]
    },
    {
      "id": "https://aliakhtari.com/notes/export-spotify-data-csv-python/",
      "url": "https://aliakhtari.com/notes/export-spotify-data-csv-python/",
      "title": "Export Spotify track data to a CSV in Python (no API key)",
      "summary": "Turn a column of Spotify links into a clean spreadsheet — name, artists, preview — with the standard csv module and no OAuth. Or dump the whole record to JSON.",
      "content_text": "Turn a column of Spotify links into a clean spreadsheet — name, artists, preview — with the standard csv module and no OAuth. Or dump the whole record to JSON.",
      "date_published": "2026-06-20T00:00:00.000Z",
      "tags": [
        "Python",
        "Spotify",
        "Web data"
      ]
    },
    {
      "id": "https://aliakhtari.com/notes/search-spotify-without-api-python/",
      "url": "https://aliakhtari.com/notes/search-spotify-without-api-python/",
      "title": "Search Spotify from Python without an API key",
      "summary": "Type a query, get typed results — tracks, artists, albums — straight from the anonymous tier the web player uses. No client ID, no OAuth, no app to register.",
      "content_text": "Type a query, get typed results — tracks, artists, albums — straight from the anonymous tier the web player uses. No client ID, no OAuth, no app to register.",
      "date_published": "2026-06-20T00:00:00.000Z",
      "tags": [
        "Python",
        "Spotify",
        "Web data"
      ]
    },
    {
      "id": "https://aliakhtari.com/notes/spotify-api-rate-limits-python/",
      "url": "https://aliakhtari.com/notes/spotify-api-rate-limits-python/",
      "title": "How to handle Spotify API rate limits in Python (or skip them)",
      "summary": "The official Spotify Web API returns 429s when you push too hard. Here's how to back off correctly — and how to avoid the limit entirely for public data.",
      "content_text": "The official Spotify Web API returns 429s when you push too hard. Here's how to back off correctly — and how to avoid the limit entirely for public data.",
      "date_published": "2026-06-20T00:00:00.000Z",
      "tags": [
        "Python",
        "Spotify",
        "Web data"
      ]
    },
    {
      "id": "https://aliakhtari.com/notes/spotify-lyrics-python/",
      "url": "https://aliakhtari.com/notes/spotify-lyrics-python/",
      "title": "Get Spotify lyrics in Python (with your own cookie)",
      "summary": "Lyrics are the one part that needs a login. Here's how to read time-synced lyrics for any track in Python — authenticating as yourself, with nothing leaving your machine.",
      "content_text": "Lyrics are the one part that needs a login. Here's how to read time-synced lyrics for any track in Python — authenticating as yourself, with nothing leaving your machine.",
      "date_published": "2026-06-20T00:00:00.000Z",
      "tags": [
        "Python",
        "Spotify",
        "Web data"
      ]
    },
    {
      "id": "https://aliakhtari.com/notes/spotify-scraper-vs-spotify-api/",
      "url": "https://aliakhtari.com/notes/spotify-scraper-vs-spotify-api/",
      "title": "spotify_scraper vs the official Spotify Web API — which should you use?",
      "summary": "One needs an app, a client secret, OAuth, and lives inside rate limits. The other reads public pages with no account. An honest comparison, and how to choose.",
      "content_text": "One needs an app, a client secret, OAuth, and lives inside rate limits. The other reads public pages with no account. An honest comparison, and how to choose.",
      "date_published": "2026-06-20T00:00:00.000Z",
      "tags": [
        "Python",
        "Spotify",
        "Open source"
      ]
    },
    {
      "id": "https://aliakhtari.com/notes/spotify-data-in-python-without-the-api/",
      "url": "https://aliakhtari.com/notes/spotify-data-in-python-without-the-api/",
      "title": "Getting Spotify data in Python without the official API",
      "summary": "No app registration, no client ID, no OAuth. How to pull tracks, albums, and playlists — and download a 30-second preview or cover art — straight from Spotify's public web player.",
      "content_text": "No app registration, no client ID, no OAuth. How to pull tracks, albums, and playlists — and download a 30-second preview or cover art — straight from Spotify's public web player.",
      "date_published": "2026-06-17T00:00:00.000Z",
      "tags": [
        "Python",
        "Web data",
        "Open source"
      ]
    },
    {
      "id": "https://aliakhtari.com/notes/verification-is-the-layer-everyone-skips/",
      "url": "https://aliakhtari.com/notes/verification-is-the-layer-everyone-skips/",
      "title": "Verification is the layer everyone skips",
      "summary": "In the agent era, everyone can fetch a page. Almost nobody checks that the data they pulled out of it is actually true.",
      "content_text": "In the agent era, everyone can fetch a page. Almost nobody checks that the data they pulled out of it is actually true.",
      "date_published": "2026-06-05T00:00:00.000Z",
      "tags": [
        "AI",
        "Reliability",
        "Web data"
      ]
    }
  ]
}