{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import json\n",
    "\n",
    "from yt_dlp import YoutubeDL\n",
    "\n",
    "def download_audio(url, output_path=None):\n",
    "    \"\"\"\n",
    "    Download audio from a YouTube video.\n",
    "    \n",
    "    Args:\n",
    "        url (str): YouTube video URL\n",
    "        output_path (str, optional): Path where audio should be saved. \n",
    "                                   If None, saves in current directory.\n",
    "    \n",
    "    Returns:\n",
    "        dict: Information about the downloaded file\n",
    "    \"\"\"\n",
    "    # Configure yt-dlp options\n",
    "    ydl_opts = {\n",
    "        'format': 'bestaudio/best',  # Get best quality audio\n",
    "        'postprocessors': [{\n",
    "            'key': 'FFmpegExtractAudio',\n",
    "            'preferredcodec': 'mp3',  # Convert to MP3\n",
    "            'preferredquality': '192'  # Audio quality (bitrate)\n",
    "        }],\n",
    "        'outtmpl': '%(title)s.%(ext)s'  # Output template\n",
    "    }\n",
    "    \n",
    "    # If output path is specified, update the template\n",
    "    if output_path:\n",
    "        ydl_opts['outtmpl'] = f'{output_path}/%(title)s.%(ext)s'\n",
    "    \n",
    "    try:\n",
    "        # Create YouTube downloader object\n",
    "        with YoutubeDL(ydl_opts) as ydl:\n",
    "            # Download the audio\n",
    "            result = ydl.extract_info(url, download=True)\n",
    "            return result\n",
    "    except Exception as e:\n",
    "        print(f\"An error occurred: {str(e)}\")\n",
    "        return None\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# genre songs\n",
    "songs = [\n",
    "  {\n",
    "    \"genre\": \"Classical & Orchestral\",\n",
    "    \"song\": \"Ludwig van Beethoven - Symphony No. 9, 'Ode to Joy'\",\n",
    "    \"url\": \"https://youtube.com/watch?v=-kcOpyM9cBg\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Baroque\",\n",
    "    \"song\": \"Johann Sebastian Bach - Brandenburg Concerto No. 3\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=Czsd13Mmcg0\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Jazz\",\n",
    "    \"song\": \"Miles Davis - Freddie Freeloader\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=ZZcuSBouhVA\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Blues\",\n",
    "    \"song\": \"Muddy Waters - Hoochie Coochie Man\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=sSnxwnPkgas\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Classic Rock\",\n",
    "    \"song\": \"The Rolling Stones - Gimme Shelter\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=QeglgSWKSIY\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Progressive Rock\",\n",
    "    \"song\": \"Pink Floyd - Money\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=-0kcet4aPpQ\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Punk Rock\",\n",
    "    \"song\": \"The Clash - London Calling\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=LC2WpBcdM_A\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Grunge\",\n",
    "    \"song\": \"Pearl Jam - Alive\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=qM0zINtulhM\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Heavy Metal\",\n",
    "    \"song\": \"Black Sabbath - Paranoid\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=BOTIIw76qiE\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Thrash Metal\",\n",
    "    \"song\": \"Metallica - Master of Puppets\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=E0ozmU9cJDg\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Alternative Rock\",\n",
    "    \"song\": \"Radiohead - Paranoid Android\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=Lt8AfIeJOxw\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Indie Rock\",\n",
    "    \"song\": \"Arctic Monkeys - Do I Wanna Know?\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=bpOSxM0rNPM\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Pop\",\n",
    "    \"song\": \"ABBA - Dancing Queen\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=xFrGuyw1V8s\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Synth-Pop\",\n",
    "    \"song\": \"Depeche Mode - Enjoy the Silence\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=aGSKrC7dGcY\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"R&B\",\n",
    "    \"song\": \"Erykah Badu - On & On\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=-CPCs7vVz6s\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Soul\",\n",
    "    \"song\": \"Otis Redding - (Sitting’ On) The Dock of the Bay\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=rTVjnBo96Ug\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Hip-Hop\",\n",
    "    \"song\": \"A Tribe Called Quest - Electric Relaxation\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=WHRnvjCkTsw\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Trap\",\n",
    "    \"song\": \"Future - Mask Off\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=xvZqHgFz51I\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Funk\",\n",
    "    \"song\": \"Parliament - Give Up the Funk (Tear the Roof Off the Sucker)\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=gBWH3OWfT2Y\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Disco\",\n",
    "    \"song\": \"Donna Summer - I Feel Love\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=yEbaeLv-aOo\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"House\",\n",
    "    \"song\": \"Frankie Knuckles - Your Love\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=LOLE1YE_oFQ\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Techno\",\n",
    "    \"song\": \"Jeff Mills - The Bells\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=DwpedKWwS3w\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Dubstep\",\n",
    "    \"song\": \"Skrillex - First Of The Year\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=2cXDgFwE13g\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Ambient\",\n",
    "    \"song\": \"Brian Eno - An Ending (Ascent)\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=OlaTeXX3uH8\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Reggae\",\n",
    "    \"song\": \"Peter Tosh - Legalize It\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=6cIePqdz03A\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Ska\",\n",
    "    \"song\": \"The Specials - A Message to You Rudy\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=D6ONesFHXWE\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Country\",\n",
    "    \"song\": \"Hank Williams - Your Cheatin’ Heart\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=2tiGG45ge9g\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Bluegrass\",\n",
    "    \"song\": \"Bill Monroe - Blue Moon of Kentucky\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=OSRlegwWnoc\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Folk\",\n",
    "    \"song\": \"Joan Baez - Diamonds and Rust\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=IrVD0bP_ybg\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Singer-Songwriter\",\n",
    "    \"song\": \"Leonard Cohen - Hallelujah\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=ttEMYvpoR-k\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Gospel\",\n",
    "    \"song\": \"Mahalia Jackson - Take My Hand, Precious Lord\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=uYUwO6_lysw\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"World Music\",\n",
    "    \"song\": \"Nusrat Fateh Ali Khan - Allah Hoo\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=wjynrRhztU8\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Afrobeat\",\n",
    "    \"song\": \"Fela Kuti - Zombie\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=Qj5x6pbJMyU\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Samba\",\n",
    "    \"song\": \"Antônio Carlos Jobim - The Girl from Ipanema\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=w7OHMCunm-w\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Flamenco\",\n",
    "    \"song\": \"Paco de Lucía - Entre Dos Aguas\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=sQFEG84gOqo\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Klezmer\",\n",
    "    \"song\": \"Itzhak Perlman - Traditional Klezmer Medley\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=5kFFfUaBGXM\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Classical Indian\",\n",
    "    \"song\": \"Ravi Shankar - Sitar Concerto No. 2\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=cf-yD9TWsxo\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Bhangra\",\n",
    "    \"song\": \"Panjabi MC - Mundian To Bach Ke\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=x9WO2ieJMYk\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"K-Pop\",\n",
    "    \"song\": \"BTS - Dynamite\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=gdZLi9oWNZg\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"J-Pop\",\n",
    "    \"song\": \"Hikaru Utada - First Love\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=jhrhHtFfIgs\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Latin Pop\",\n",
    "    \"song\": \"Shakira - Hips Don’t Lie\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=DUT5rEU6pqM\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Tango\",\n",
    "    \"song\": \"Astor Piazzolla - Libertango\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=QCwvnyh03Ss\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Opera\",\n",
    "    \"song\": \"Maria Callas - Casta Diva (from Bellini's Norma)\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=718vx_927lU\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Musical Theater\",\n",
    "    \"song\": \"Hamilton Cast - My Shot\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=LzS6g8FybKE\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Experimental\",\n",
    "    \"song\": \"Laurie Anderson - O Superman\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=Vkfpi2H8tOE\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Avant-Garde\",\n",
    "    \"song\": \"John Cage - Sonatas and Interludes: Sonata V\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=jRHoKZRYBlY\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Chiptune\",\n",
    "    \"song\": \"Anamanaguchi - Airbrushed\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=2iV_DjBu3JM\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Lo-Fi Hip-Hop\",\n",
    "    \"song\": \"Nujabes - Feather\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=hQ5x8pHoIPA\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Industrial\",\n",
    "    \"song\": \"Nine Inch Nails - Closer\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=PTFwQP86BRs\"\n",
    "  },\n",
    "  {\n",
    "    \"genre\": \"Shoegaze\",\n",
    "    \"song\": \"My Bloody Valentine - Only Shallow\",\n",
    "    \"url\": \"https://www.youtube.com/watch?v=wdXGll5sc6Y\"\n",
    "  }\n",
    "]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'genre': 'Classical & Orchestral', 'song': \"Ludwig van Beethoven - Symphony No. 9, 'Ode to Joy'\", 'url': 'https://youtube.com/watch?v=-kcOpyM9cBg'}\n",
      "[youtube] Extracting URL: https://youtube.com/watch?v=-kcOpyM9cBg\n",
      "[youtube] -kcOpyM9cBg: Downloading webpage\n",
      "[youtube] -kcOpyM9cBg: Downloading ios player API JSON\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ERROR: [youtube] -kcOpyM9cBg: Sign in to confirm you’re not a bot. This helps protect our community. Learn more\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "An error occurred: ERROR: [youtube] -kcOpyM9cBg: Sign in to confirm you’re not a bot. This helps protect our community. Learn more\n",
      "{'genre': 'Baroque', 'song': 'Johann Sebastian Bach - Brandenburg Concerto No. 3', 'url': 'https://www.youtube.com/watch?v=Czsd13Mmcg0'}\n",
      "[youtube] Extracting URL: https://www.youtube.com/watch?v=Czsd13Mmcg0\n",
      "[youtube] Czsd13Mmcg0: Downloading webpage\n",
      "[youtube] Czsd13Mmcg0: Downloading ios player API JSON\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ERROR: [youtube] Czsd13Mmcg0: Sign in to confirm you’re not a bot. This helps protect our community. Learn more\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "An error occurred: ERROR: [youtube] Czsd13Mmcg0: Sign in to confirm you’re not a bot. This helps protect our community. Learn more\n",
      "{'genre': 'Jazz', 'song': 'Miles Davis - Freddie Freeloader', 'url': 'https://www.youtube.com/watch?v=ZZcuSBouhVA'}\n",
      "[youtube] Extracting URL: https://www.youtube.com/watch?v=ZZcuSBouhVA\n",
      "[youtube] ZZcuSBouhVA: Downloading webpage\n",
      "[youtube] ZZcuSBouhVA: Downloading ios player API JSON\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ERROR: [youtube] ZZcuSBouhVA: Sign in to confirm you’re not a bot. This helps protect our community. Learn more\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "An error occurred: ERROR: [youtube] ZZcuSBouhVA: Sign in to confirm you’re not a bot. This helps protect our community. Learn more\n",
      "{'genre': 'Blues', 'song': 'Muddy Waters - Hoochie Coochie Man', 'url': 'https://www.youtube.com/watch?v=sSnxwnPkgas'}\n",
      "[youtube] Extracting URL: https://www.youtube.com/watch?v=sSnxwnPkgas\n",
      "[youtube] sSnxwnPkgas: Downloading webpage\n",
      "[youtube] sSnxwnPkgas: Downloading ios player API JSON\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ERROR: [youtube] sSnxwnPkgas: Sign in to confirm you’re not a bot. This helps protect our community. Learn more\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "An error occurred: ERROR: [youtube] sSnxwnPkgas: Sign in to confirm you’re not a bot. This helps protect our community. Learn more\n",
      "{'genre': 'Classic Rock', 'song': 'The Rolling Stones - Gimme Shelter', 'url': 'https://www.youtube.com/watch?v=QeglgSWKSIY'}\n",
      "[youtube] Extracting URL: https://www.youtube.com/watch?v=QeglgSWKSIY\n",
      "[youtube] QeglgSWKSIY: Downloading webpage\n",
      "[youtube] QeglgSWKSIY: Downloading ios player API JSON\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ERROR: [youtube] QeglgSWKSIY: Sign in to confirm you’re not a bot. This helps protect our community. Learn more\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "An error occurred: ERROR: [youtube] QeglgSWKSIY: Sign in to confirm you’re not a bot. This helps protect our community. Learn more\n",
      "{'genre': 'Progressive Rock', 'song': 'Pink Floyd - Money', 'url': 'https://www.youtube.com/watch?v=-0kcet4aPpQ'}\n",
      "[youtube] Extracting URL: https://www.youtube.com/watch?v=-0kcet4aPpQ\n",
      "[youtube] -0kcet4aPpQ: Downloading webpage\n",
      "[youtube] -0kcet4aPpQ: Downloading ios player API JSON\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ERROR: [youtube] -0kcet4aPpQ: Sign in to confirm you’re not a bot. This helps protect our community. Learn more\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "An error occurred: ERROR: [youtube] -0kcet4aPpQ: Sign in to confirm you’re not a bot. This helps protect our community. Learn more\n",
      "{'genre': 'Punk Rock', 'song': 'The Clash - London Calling', 'url': 'https://www.youtube.com/watch?v=LC2WpBcdM_A'}\n",
      "[youtube] Extracting URL: https://www.youtube.com/watch?v=LC2WpBcdM_A\n",
      "[youtube] LC2WpBcdM_A: Downloading webpage\n",
      "[youtube] LC2WpBcdM_A: Downloading ios player API JSON\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ERROR: [youtube] LC2WpBcdM_A: Sign in to confirm you’re not a bot. This helps protect our community. Learn more\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "An error occurred: ERROR: [youtube] LC2WpBcdM_A: Sign in to confirm you’re not a bot. This helps protect our community. Learn more\n",
      "{'genre': 'Grunge', 'song': 'Pearl Jam - Alive', 'url': 'https://www.youtube.com/watch?v=qM0zINtulhM'}\n",
      "[youtube] Extracting URL: https://www.youtube.com/watch?v=qM0zINtulhM\n",
      "[youtube] qM0zINtulhM: Downloading webpage\n",
      "[youtube] qM0zINtulhM: Downloading ios player API JSON\n"
     ]
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[5], line 4\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[38;5;28mprint\u001b[39m(song)\n\u001b[1;32m      3\u001b[0m \u001b[38;5;66;03m# download high quality audio from youtube \u001b[39;00m\n\u001b[0;32m----> 4\u001b[0m \u001b[43mdownload_audio\u001b[49m\u001b[43m(\u001b[49m\u001b[43msong\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43murl\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moutput_path\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m/home/christian/audio/50_genres\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n",
      "Cell \u001b[0;32mIn[3], line 37\u001b[0m, in \u001b[0;36mdownload_audio\u001b[0;34m(url, output_path)\u001b[0m\n\u001b[1;32m     33\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m     34\u001b[0m     \u001b[38;5;66;03m# Create YouTube downloader object\u001b[39;00m\n\u001b[1;32m     35\u001b[0m     \u001b[38;5;28;01mwith\u001b[39;00m YoutubeDL(ydl_opts) \u001b[38;5;28;01mas\u001b[39;00m ydl:\n\u001b[1;32m     36\u001b[0m         \u001b[38;5;66;03m# Download the audio\u001b[39;00m\n\u001b[0;32m---> 37\u001b[0m         result \u001b[38;5;241m=\u001b[39m \u001b[43mydl\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mextract_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownload\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m     38\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m result\n\u001b[1;32m     39\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/YoutubeDL.py:1615\u001b[0m, in \u001b[0;36mYoutubeDL.extract_info\u001b[0;34m(self, url, download, ie_key, extra_info, process, force_generic_extractor)\u001b[0m\n\u001b[1;32m   1613\u001b[0m             \u001b[38;5;28;01mraise\u001b[39;00m ExistingVideoReached\n\u001b[1;32m   1614\u001b[0m         \u001b[38;5;28;01mbreak\u001b[39;00m\n\u001b[0;32m-> 1615\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__extract_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_info_extractor\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownload\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_info\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprocess\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1616\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m   1617\u001b[0m     extractors_restricted \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mparams\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mallowed_extractors\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m (\u001b[38;5;28;01mNone\u001b[39;00m, [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdefault\u001b[39m\u001b[38;5;124m'\u001b[39m])\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/YoutubeDL.py:1626\u001b[0m, in \u001b[0;36mYoutubeDL._handle_extraction_exceptions.<locals>.wrapper\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m   1624\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m   1625\u001b[0m     \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1626\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1627\u001b[0m     \u001b[38;5;28;01mexcept\u001b[39;00m (DownloadCancelled, LazyList\u001b[38;5;241m.\u001b[39mIndexError, PagedList\u001b[38;5;241m.\u001b[39mIndexError):\n\u001b[1;32m   1628\u001b[0m         \u001b[38;5;28;01mraise\u001b[39;00m\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/YoutubeDL.py:1761\u001b[0m, in \u001b[0;36mYoutubeDL.__extract_info\u001b[0;34m(self, url, ie, download, extra_info, process)\u001b[0m\n\u001b[1;32m   1758\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_apply_header_cookies(url)\n\u001b[1;32m   1760\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1761\u001b[0m     ie_result \u001b[38;5;241m=\u001b[39m \u001b[43mie\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mextract\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1762\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m UserNotLive \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m   1763\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m process:\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/extractor/common.py:740\u001b[0m, in \u001b[0;36mInfoExtractor.extract\u001b[0;34m(self, url)\u001b[0m\n\u001b[1;32m    737\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minitialize()\n\u001b[1;32m    738\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mto_screen(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mExtracting URL: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m (\n\u001b[1;32m    739\u001b[0m     url \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_param(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mverbose\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01melse\u001b[39;00m truncate_string(url, \u001b[38;5;241m100\u001b[39m, \u001b[38;5;241m20\u001b[39m)))\n\u001b[0;32m--> 740\u001b[0m ie_result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_real_extract\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    741\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ie_result \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m    742\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/extractor/youtube.py:4171\u001b[0m, in \u001b[0;36mYoutubeIE._real_extract\u001b[0;34m(self, url)\u001b[0m\n\u001b[1;32m   4168\u001b[0m base_url \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhttp_scheme() \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m//www.youtube.com/\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m   4169\u001b[0m webpage_url \u001b[38;5;241m=\u001b[39m base_url \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mwatch?v=\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m+\u001b[39m video_id\n\u001b[0;32m-> 4171\u001b[0m webpage, master_ytcfg, player_responses, player_url \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_download_player_responses\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msmuggled_data\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvideo_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mwebpage_url\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   4173\u001b[0m playability_statuses \u001b[38;5;241m=\u001b[39m traverse_obj(\n\u001b[1;32m   4174\u001b[0m     player_responses, (\u001b[38;5;241m.\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;241m.\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mplayabilityStatus\u001b[39m\u001b[38;5;124m'\u001b[39m), expected_type\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mdict\u001b[39m)\n\u001b[1;32m   4176\u001b[0m trailer_video_id \u001b[38;5;241m=\u001b[39m get_first(\n\u001b[1;32m   4177\u001b[0m     playability_statuses,\n\u001b[1;32m   4178\u001b[0m     (\u001b[38;5;124m'\u001b[39m\u001b[38;5;124merrorScreen\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mplayerLegacyDesktopYpcTrailerRenderer\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtrailerVideoId\u001b[39m\u001b[38;5;124m'\u001b[39m),\n\u001b[1;32m   4179\u001b[0m     expected_type\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m)\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/extractor/youtube.py:4135\u001b[0m, in \u001b[0;36mYoutubeIE._download_player_responses\u001b[0;34m(self, url, smuggled_data, video_id, webpage_url)\u001b[0m\n\u001b[1;32m   4130\u001b[0m     webpage \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_download_webpage(\n\u001b[1;32m   4131\u001b[0m         webpage_url, video_id, fatal\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, query\u001b[38;5;241m=\u001b[39mquery)\n\u001b[1;32m   4133\u001b[0m master_ytcfg \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mextract_ytcfg(video_id, webpage) \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_default_ytcfg()\n\u001b[0;32m-> 4135\u001b[0m player_responses, player_url \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_extract_player_responses\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m   4136\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_requested_clients\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msmuggled_data\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   4137\u001b[0m \u001b[43m    \u001b[49m\u001b[43mvideo_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mwebpage\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmaster_ytcfg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msmuggled_data\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   4139\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m webpage, master_ytcfg, player_responses, player_url\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/extractor/youtube.py:3769\u001b[0m, in \u001b[0;36mYoutubeIE._extract_player_responses\u001b[0;34m(self, clients, video_id, webpage, master_ytcfg, smuggled_data)\u001b[0m\n\u001b[1;32m   3767\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m retry \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mRetryManager(fatal\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[1;32m   3768\u001b[0m     \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3769\u001b[0m         pr \u001b[38;5;241m=\u001b[39m pr \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_extract_player_response\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m   3770\u001b[0m \u001b[43m            \u001b[49m\u001b[43mclient\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvideo_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mplayer_ytcfg\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mmaster_ytcfg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mplayer_ytcfg\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   3771\u001b[0m \u001b[43m            \u001b[49m\u001b[43mplayer_url\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mrequire_js_player\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minitial_pr\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msmuggled_data\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   3772\u001b[0m     \u001b[38;5;28;01mexcept\u001b[39;00m ExtractorError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m   3773\u001b[0m         \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mreport_warning(e)\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/extractor/youtube.py:3669\u001b[0m, in \u001b[0;36mYoutubeIE._extract_player_response\u001b[0;34m(self, client, video_id, master_ytcfg, player_ytcfg, player_url, initial_pr, smuggled_data)\u001b[0m\n\u001b[1;32m   3666\u001b[0m     yt_query[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mparams\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m pp_arg\n\u001b[1;32m   3668\u001b[0m yt_query\u001b[38;5;241m.\u001b[39mupdate(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_generate_player_context(sts))\n\u001b[0;32m-> 3669\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_extract_response\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m   3670\u001b[0m \u001b[43m    \u001b[49m\u001b[43mitem_id\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvideo_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mep\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mplayer\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mquery\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43myt_query\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   3671\u001b[0m \u001b[43m    \u001b[49m\u001b[43mytcfg\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mplayer_ytcfg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfatal\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m   3672\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdefault_client\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mclient\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   3673\u001b[0m \u001b[43m    \u001b[49m\u001b[43mnote\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mDownloading \u001b[39;49m\u001b[38;5;132;43;01m{}\u001b[39;49;00m\u001b[38;5;124;43m player API JSON\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mformat\u001b[49m\u001b[43m(\u001b[49m\u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreplace\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m_\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m \u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstrip\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   3674\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/extractor/youtube.py:971\u001b[0m, in \u001b[0;36mYoutubeBaseInfoExtractor._extract_response\u001b[0;34m(self, item_id, query, note, headers, ytcfg, check_get_keys, ep, fatal, api_hostname, default_client)\u001b[0m\n\u001b[1;32m    969\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m    970\u001b[0m     \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 971\u001b[0m         response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_api\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    972\u001b[0m \u001b[43m            \u001b[49m\u001b[43mep\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfatal\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    973\u001b[0m \u001b[43m            \u001b[49m\u001b[43mvideo_id\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mitem_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mquery\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mquery\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnote\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnote\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    974\u001b[0m \u001b[43m            \u001b[49m\u001b[43mcontext\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_extract_context\u001b[49m\u001b[43m(\u001b[49m\u001b[43mytcfg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdefault_client\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    975\u001b[0m \u001b[43m            \u001b[49m\u001b[43mapi_key\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_extract_api_key\u001b[49m\u001b[43m(\u001b[49m\u001b[43mytcfg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdefault_client\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    976\u001b[0m \u001b[43m            \u001b[49m\u001b[43mapi_hostname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mapi_hostname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdefault_client\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdefault_client\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    977\u001b[0m     \u001b[38;5;28;01mexcept\u001b[39;00m ExtractorError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m    978\u001b[0m         \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e\u001b[38;5;241m.\u001b[39mcause, network_exceptions):\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/extractor/youtube.py:619\u001b[0m, in \u001b[0;36mYoutubeBaseInfoExtractor._call_api\u001b[0;34m(self, ep, query, video_id, fatal, headers, note, errnote, context, api_key, api_hostname, default_client)\u001b[0m\n\u001b[1;32m    616\u001b[0m     real_headers\u001b[38;5;241m.\u001b[39mupdate(headers)\n\u001b[1;32m    617\u001b[0m api_key \u001b[38;5;241m=\u001b[39m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_configuration_arg(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124minnertube_key\u001b[39m\u001b[38;5;124m'\u001b[39m, [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m'\u001b[39m], ie_key\u001b[38;5;241m=\u001b[39mYoutubeIE\u001b[38;5;241m.\u001b[39mie_key(), casesense\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)[\u001b[38;5;241m0\u001b[39m]\n\u001b[1;32m    618\u001b[0m            \u001b[38;5;129;01mor\u001b[39;00m api_key \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_extract_api_key(default_client\u001b[38;5;241m=\u001b[39mdefault_client))\n\u001b[0;32m--> 619\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_download_json\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    620\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;124;43mf\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mhttps://\u001b[39;49m\u001b[38;5;132;43;01m{\u001b[39;49;00m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_select_api_hostname\u001b[49m\u001b[43m(\u001b[49m\u001b[43mapi_hostname\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;250;43m \u001b[39;49m\u001b[43mdefault_client\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;132;43;01m}\u001b[39;49;00m\u001b[38;5;124;43m/youtubei/v1/\u001b[39;49m\u001b[38;5;132;43;01m{\u001b[39;49;00m\u001b[43mep\u001b[49m\u001b[38;5;132;43;01m}\u001b[39;49;00m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    621\u001b[0m \u001b[43m    \u001b[49m\u001b[43mvideo_id\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvideo_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfatal\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfatal\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnote\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnote\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrnote\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrnote\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    622\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mjson\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdumps\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mencode\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mutf8\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mreal_headers\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    623\u001b[0m \u001b[43m    \u001b[49m\u001b[43mquery\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mkey\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mapi_key\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mprettyPrint\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mfalse\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/extractor/common.py:1139\u001b[0m, in \u001b[0;36mInfoExtractor.__create_download_methods.<locals>.download_content\u001b[0;34m(self, url_or_request, video_id, note, errnote, transform_source, fatal, encoding, data, headers, query, expected_status, impersonate, require_impersonation)\u001b[0m\n\u001b[1;32m   1137\u001b[0m     kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtransform_source\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m   1138\u001b[0m \u001b[38;5;66;03m# The method is fetched by name so subclasses can override _download_..._handle\u001b[39;00m\n\u001b[0;32m-> 1139\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mgetattr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownload_handle\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;18;43m__name__\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl_or_request\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvideo_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1140\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m res \u001b[38;5;28;01mif\u001b[39;00m res \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m res[\u001b[38;5;241m0\u001b[39m]\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/extractor/common.py:1099\u001b[0m, in \u001b[0;36mInfoExtractor.__create_download_methods.<locals>.download_handle\u001b[0;34m(self, url_or_request, video_id, note, errnote, transform_source, fatal, encoding, data, headers, query, expected_status, impersonate, require_impersonation)\u001b[0m\n\u001b[1;32m   1096\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdownload_handle\u001b[39m(\u001b[38;5;28mself\u001b[39m, url_or_request, video_id, note\u001b[38;5;241m=\u001b[39mnote, errnote\u001b[38;5;241m=\u001b[39merrnote, transform_source\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m   1097\u001b[0m                     fatal\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, encoding\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, data\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, headers\u001b[38;5;241m=\u001b[39m{}, query\u001b[38;5;241m=\u001b[39m{}, expected_status\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m   1098\u001b[0m                     impersonate\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, require_impersonation\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[0;32m-> 1099\u001b[0m     res \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_download_webpage_handle\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m   1100\u001b[0m \u001b[43m        \u001b[49m\u001b[43murl_or_request\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvideo_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnote\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnote\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrnote\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrnote\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfatal\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfatal\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mencoding\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   1101\u001b[0m \u001b[43m        \u001b[49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mquery\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mquery\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexpected_status\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexpected_status\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   1102\u001b[0m \u001b[43m        \u001b[49m\u001b[43mimpersonate\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mimpersonate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrequire_impersonation\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequire_impersonation\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1103\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m res \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m:\n\u001b[1;32m   1104\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m res\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/extractor/common.py:960\u001b[0m, in \u001b[0;36mInfoExtractor._download_webpage_handle\u001b[0;34m(self, url_or_request, video_id, note, errnote, fatal, encoding, data, headers, query, expected_status, impersonate, require_impersonation)\u001b[0m\n\u001b[1;32m    957\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(url_or_request, \u001b[38;5;28mstr\u001b[39m):\n\u001b[1;32m    958\u001b[0m     url_or_request \u001b[38;5;241m=\u001b[39m url_or_request\u001b[38;5;241m.\u001b[39mpartition(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m#\u001b[39m\u001b[38;5;124m'\u001b[39m)[\u001b[38;5;241m0\u001b[39m]\n\u001b[0;32m--> 960\u001b[0m urlh \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_request_webpage\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl_or_request\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvideo_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnote\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrnote\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfatal\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    961\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mquery\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mquery\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexpected_status\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexpected_status\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    962\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mimpersonate\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mimpersonate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrequire_impersonation\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequire_impersonation\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    963\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m urlh \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m:\n\u001b[1;32m    964\u001b[0m     \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m fatal\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/extractor/common.py:896\u001b[0m, in \u001b[0;36mInfoExtractor._request_webpage\u001b[0;34m(self, url_or_request, video_id, note, errnote, fatal, data, headers, query, expected_status, impersonate, require_impersonation)\u001b[0m\n\u001b[1;32m    893\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mreport_warning(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmessage\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m; if you encounter errors, then \u001b[39m\u001b[38;5;132;01m{\u001b[39;00minfo_msg\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m, only_once\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m    895\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 896\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_downloader\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_create_request\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl_or_request\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mquery\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextensions\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    897\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m network_exceptions \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[1;32m    898\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(err, HTTPError):\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/YoutubeDL.py:4165\u001b[0m, in \u001b[0;36mYoutubeDL.urlopen\u001b[0;34m(self, req)\u001b[0m\n\u001b[1;32m   4162\u001b[0m clean_headers(req\u001b[38;5;241m.\u001b[39mheaders)\n\u001b[1;32m   4164\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 4165\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_request_director\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mreq\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   4166\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m NoSupportingHandlers \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m   4167\u001b[0m     \u001b[38;5;28;01mfor\u001b[39;00m ue \u001b[38;5;129;01min\u001b[39;00m e\u001b[38;5;241m.\u001b[39munsupported_errors:\n\u001b[1;32m   4168\u001b[0m         \u001b[38;5;66;03m# FIXME: This depends on the order of errors.\u001b[39;00m\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/networking/common.py:117\u001b[0m, in \u001b[0;36mRequestDirector.send\u001b[0;34m(self, request)\u001b[0m\n\u001b[1;32m    115\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_print_verbose(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mSending request via \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mhandler\u001b[38;5;241m.\u001b[39mRH_NAME\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m    116\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 117\u001b[0m     response \u001b[38;5;241m=\u001b[39m \u001b[43mhandler\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    118\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m RequestError:\n\u001b[1;32m    119\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/networking/_helper.py:208\u001b[0m, in \u001b[0;36mwrap_request_errors.<locals>.wrapper\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m    205\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m    206\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m    207\u001b[0m     \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 208\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    209\u001b[0m     \u001b[38;5;28;01mexcept\u001b[39;00m UnsupportedRequest \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m    210\u001b[0m         \u001b[38;5;28;01mif\u001b[39;00m e\u001b[38;5;241m.\u001b[39mhandler \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/networking/common.py:340\u001b[0m, in \u001b[0;36mRequestHandler.send\u001b[0;34m(self, request)\u001b[0m\n\u001b[1;32m    338\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(request, Request):\n\u001b[1;32m    339\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mExpected an instance of Request\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m--> 340\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_send\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/yt_dlp/networking/_requests.py:328\u001b[0m, in \u001b[0;36mRequestsRH._send\u001b[0;34m(self, request)\u001b[0m\n\u001b[1;32m    322\u001b[0m session \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_instance(\n\u001b[1;32m    323\u001b[0m     cookiejar\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_cookiejar(request),\n\u001b[1;32m    324\u001b[0m     legacy_ssl_support\u001b[38;5;241m=\u001b[39mrequest\u001b[38;5;241m.\u001b[39mextensions\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlegacy_ssl\u001b[39m\u001b[38;5;124m'\u001b[39m),\n\u001b[1;32m    325\u001b[0m )\n\u001b[1;32m    327\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 328\u001b[0m     requests_res \u001b[38;5;241m=\u001b[39m \u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    329\u001b[0m \u001b[43m        \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    330\u001b[0m \u001b[43m        \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    331\u001b[0m \u001b[43m        \u001b[49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    332\u001b[0m \u001b[43m        \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    333\u001b[0m \u001b[43m        \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_calculate_timeout\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    334\u001b[0m \u001b[43m        \u001b[49m\u001b[43mproxies\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_proxies\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    335\u001b[0m \u001b[43m        \u001b[49m\u001b[43mallow_redirects\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m    336\u001b[0m \u001b[43m        \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m    337\u001b[0m \u001b[43m    \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    339\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m requests\u001b[38;5;241m.\u001b[39mexceptions\u001b[38;5;241m.\u001b[39mTooManyRedirects \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m    340\u001b[0m     max_redirects_exceeded \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/requests/sessions.py:589\u001b[0m, in \u001b[0;36mSession.request\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m    584\u001b[0m send_kwargs \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m    585\u001b[0m     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: timeout,\n\u001b[1;32m    586\u001b[0m     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mallow_redirects\u001b[39m\u001b[38;5;124m\"\u001b[39m: allow_redirects,\n\u001b[1;32m    587\u001b[0m }\n\u001b[1;32m    588\u001b[0m send_kwargs\u001b[38;5;241m.\u001b[39mupdate(settings)\n\u001b[0;32m--> 589\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msend_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    591\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m resp\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/requests/sessions.py:703\u001b[0m, in \u001b[0;36mSession.send\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m    700\u001b[0m start \u001b[38;5;241m=\u001b[39m preferred_clock()\n\u001b[1;32m    702\u001b[0m \u001b[38;5;66;03m# Send the request\u001b[39;00m\n\u001b[0;32m--> 703\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43madapter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    705\u001b[0m \u001b[38;5;66;03m# Total elapsed time of the request (approximately)\u001b[39;00m\n\u001b[1;32m    706\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m preferred_clock() \u001b[38;5;241m-\u001b[39m start\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/requests/adapters.py:667\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m    664\u001b[0m     timeout \u001b[38;5;241m=\u001b[39m TimeoutSauce(connect\u001b[38;5;241m=\u001b[39mtimeout, read\u001b[38;5;241m=\u001b[39mtimeout)\n\u001b[1;32m    666\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 667\u001b[0m     resp \u001b[38;5;241m=\u001b[39m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    668\u001b[0m \u001b[43m        \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    669\u001b[0m \u001b[43m        \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    670\u001b[0m \u001b[43m        \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    671\u001b[0m \u001b[43m        \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    672\u001b[0m \u001b[43m        \u001b[49m\u001b[43mredirect\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m    673\u001b[0m \u001b[43m        \u001b[49m\u001b[43massert_same_host\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m    674\u001b[0m \u001b[43m        \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m    675\u001b[0m \u001b[43m        \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m    676\u001b[0m \u001b[43m        \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_retries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    677\u001b[0m \u001b[43m        \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    678\u001b[0m \u001b[43m        \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    679\u001b[0m \u001b[43m    \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    681\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (ProtocolError, \u001b[38;5;167;01mOSError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[1;32m    682\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(err, request\u001b[38;5;241m=\u001b[39mrequest)\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/urllib3/connectionpool.py:789\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m    786\u001b[0m response_conn \u001b[38;5;241m=\u001b[39m conn \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m release_conn \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m    788\u001b[0m \u001b[38;5;66;03m# Make the request on the HTTPConnection object\u001b[39;00m\n\u001b[0;32m--> 789\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    790\u001b[0m \u001b[43m    \u001b[49m\u001b[43mconn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    791\u001b[0m \u001b[43m    \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    792\u001b[0m \u001b[43m    \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    793\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    794\u001b[0m \u001b[43m    \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    795\u001b[0m \u001b[43m    \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    796\u001b[0m \u001b[43m    \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    797\u001b[0m \u001b[43m    \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    798\u001b[0m \u001b[43m    \u001b[49m\u001b[43mresponse_conn\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mresponse_conn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    799\u001b[0m \u001b[43m    \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpreload_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    800\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdecode_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    801\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mresponse_kw\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    802\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    804\u001b[0m \u001b[38;5;66;03m# Everything went great!\u001b[39;00m\n\u001b[1;32m    805\u001b[0m clean_exit \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/urllib3/connectionpool.py:536\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m    534\u001b[0m \u001b[38;5;66;03m# Receive the response from the server\u001b[39;00m\n\u001b[1;32m    535\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 536\u001b[0m     response \u001b[38;5;241m=\u001b[39m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetresponse\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    537\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (BaseSSLError, \u001b[38;5;167;01mOSError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m    538\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_raise_timeout(err\u001b[38;5;241m=\u001b[39me, url\u001b[38;5;241m=\u001b[39murl, timeout_value\u001b[38;5;241m=\u001b[39mread_timeout)\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/site-packages/urllib3/connection.py:464\u001b[0m, in \u001b[0;36mHTTPConnection.getresponse\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    461\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mresponse\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m HTTPResponse\n\u001b[1;32m    463\u001b[0m \u001b[38;5;66;03m# Get the response from http.client.HTTPConnection\u001b[39;00m\n\u001b[0;32m--> 464\u001b[0m httplib_response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetresponse\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    466\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m    467\u001b[0m     assert_header_parsing(httplib_response\u001b[38;5;241m.\u001b[39mmsg)\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/http/client.py:1374\u001b[0m, in \u001b[0;36mHTTPConnection.getresponse\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m   1372\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m   1373\u001b[0m     \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1374\u001b[0m         \u001b[43mresponse\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbegin\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1375\u001b[0m     \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m:\n\u001b[1;32m   1376\u001b[0m         \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclose()\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/http/client.py:318\u001b[0m, in \u001b[0;36mHTTPResponse.begin\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    316\u001b[0m \u001b[38;5;66;03m# read until we get a non-100 response\u001b[39;00m\n\u001b[1;32m    317\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m--> 318\u001b[0m     version, status, reason \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_read_status\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    319\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m status \u001b[38;5;241m!=\u001b[39m CONTINUE:\n\u001b[1;32m    320\u001b[0m         \u001b[38;5;28;01mbreak\u001b[39;00m\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/http/client.py:279\u001b[0m, in \u001b[0;36mHTTPResponse._read_status\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    278\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_read_status\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[0;32m--> 279\u001b[0m     line \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mstr\u001b[39m(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreadline\u001b[49m\u001b[43m(\u001b[49m\u001b[43m_MAXLINE\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124miso-8859-1\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m    280\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(line) \u001b[38;5;241m>\u001b[39m _MAXLINE:\n\u001b[1;32m    281\u001b[0m         \u001b[38;5;28;01mraise\u001b[39;00m LineTooLong(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstatus line\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/socket.py:705\u001b[0m, in \u001b[0;36mSocketIO.readinto\u001b[0;34m(self, b)\u001b[0m\n\u001b[1;32m    703\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m    704\u001b[0m     \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 705\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_sock\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv_into\u001b[49m\u001b[43m(\u001b[49m\u001b[43mb\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    706\u001b[0m     \u001b[38;5;28;01mexcept\u001b[39;00m timeout:\n\u001b[1;32m    707\u001b[0m         \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_timeout_occurred \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/ssl.py:1274\u001b[0m, in \u001b[0;36mSSLSocket.recv_into\u001b[0;34m(self, buffer, nbytes, flags)\u001b[0m\n\u001b[1;32m   1270\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m flags \u001b[38;5;241m!=\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m   1271\u001b[0m         \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m   1272\u001b[0m           \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnon-zero flags not allowed in calls to recv_into() on \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m\n\u001b[1;32m   1273\u001b[0m           \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m)\n\u001b[0;32m-> 1274\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnbytes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbuffer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1275\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m   1276\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39mrecv_into(buffer, nbytes, flags)\n",
      "File \u001b[0;32m~/miniconda3/envs/suno_env/lib/python3.10/ssl.py:1130\u001b[0m, in \u001b[0;36mSSLSocket.read\u001b[0;34m(self, len, buffer)\u001b[0m\n\u001b[1;32m   1128\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m   1129\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m buffer \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m-> 1130\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_sslobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbuffer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1131\u001b[0m     \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m   1132\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sslobj\u001b[38;5;241m.\u001b[39mread(\u001b[38;5;28mlen\u001b[39m)\n",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "for song in songs:\n",
    "    print(song)\n",
    "    # download high quality audio from youtube \n",
    "    download_audio(song[\"url\"], output_path='/home/christian/audio/50_genres')\n",
    "    break\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "suno_env",
   "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.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
