import csv import re import concurrent.futures import requests """ How to generate token? In order to generate a Spotify API token, you will need Spotify Web API Client ID and Secret. Request to generate token: curl -X POST "https://accounts.spotify.com/api/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials&client_id=&client_secret=" example response: {"access_token":"","token_type":"Bearer","expires_in":3600} """ TOKEN = "" OUTPUT_FILE = "playlist_status.csv" PLAYLIST_IDS = """7uqcQyjXV9w8XdQc8Z5nrm 0QK5znBV0MECGrlcI8bTst 74UlOg9Rw5SZ5WdX0OQWab 0xMqsfITirigaNDQPTvjD6 0rWddKodzhJVc2FchneMG1 3XjO7USLLq3xRraZXzxfmR 3gdGASiFaZr4gq2F3hYly9 6WLNqfdPKfu61YiVOesLm0 6kgmnOCUplEMmF5azg4Mlc 2H619GljF3zWAfwVjd6uqA 0Hf3K1Sn80oOvrpdrMr1jO 0oCKDLtePLzuUodPh6TQ04 6Hvlgnlkd4Y9izQL0b6Ppp 7fkWupTBCH2takmYTNBXYf 6xG8KR9PubFCghNu75h69y 2f102vstmXiV0wJKPpWrIS 6DNUxJGS79ijFD5RuStA2P e0afdb9b6dd343f3a82e8e293e2d195f 1bsXX7EwBVbzIgVQe7hris?si=b22ba6c992e9403e 1PBEsEVBoK1nuaHAhoXjUh 0EPKUuTpUU5fb27isop6z6 37i9dQZF1DWSOb6VfKLO9H?si=02618af73fc44d97&nd=1&dlsi=c0fd2bd923cf43ce 1x6shLVcDvLNhUAxeRe0LH 5o1DqADlOmLuuPvaVPnBhv 3nKS7GCFQKafiGhiZHUtWM 1KMPoyrEfEHlwBDIJizbAc 7B3DxGXcRr0PKh7UxxgGKf 7IJiqr6fjnmSaLXBB78Ttw 4c2abLdt5zaGWOdq07N28t 7eO4j3f1g4KKpk387kozmV 37i9dQZEVXbLZlJY3sJz7R 1fO64E5MDocHIcquk1Ds5P 0gtBsGoVFGC7S7bGPjDxMV 3hVfkkXc1WFRqsyLCNDCeB 6KbpJXPAiXWdJ0MvyxQTA 6T1dZ0SGVtGX0bhRPlH0Ly 1Ule1Gd0HMskQg4yR5lRRE 1ch8O6oCN3mAd4O3K8n6MW 5n3hJKQnTid5se8GCEetXn 3X1eSDfO4PS43pFfRxyuqd 6XsRalacC1JFIIsWLy5wUf 25JTUOlhhGuSkVJcG7XF8f 528Qfjgly9LkSdqQ7BuUGl 0o5cSPnDunRRy4xQFfLzRI 5b2f42KQSNV9WhWgGvyv2F 0e7FbKnMHnPaGS0nRYUzmc 76R3P2iXLOHAYeb3gaHyCO 0l6D3hG1Yen2hENeLczJRV 0x3n8IMD0tdtTTTFbOXGEl 5WOPu7bFLgKIwWOnzdviHW 6NVrkim2XiQBZ2GCWnIzhl 3zuf2xHojXrGpjlXDqD7Sz 009v5NDPwir4sb98ShYYWu 1rY9jfDfGupSRhKam7XoR0 4w6bCtZGQfTLM6M5ScO0Lc 1I40aNZF88mqg2pjVYwp4l 0uVFj1MsoCH3S9EP9o1gFS 3KOAGjbVli1xO79qi6bGlA 3NMti94UWvOmFHc03jV2kY 2m8XbJpLtJd3ZNCB1d8yNv 6ZAf3p3xE2xYqDs9AbOlJ 49c33011f36941dab8262a82adecf10b 5PaQ78Pm1UORe3xpvK4aMJ 0QgdnLfaBmdouwj5GiN2Kq 0HCw2eCf01RHKCGu1S3BwX 6Y3Si9DDkzq330GdpNaSWl 5Z5PD1LgBb9w8dSPKa41Hc 514oDPWSNXxEKuJ6rDfVsC 2xRUY8tpDDXpb0XzATM0eO 2nmO2KNz9wosPU9E41o3ov 4nvfsGcbCo4BNVPjitPzXI 1Mz7L1DG9AjOoWR7txiAY7 004ickjG332fgFOlk6JY1J 3Rgguj0S4TG91df0LH3bX4 5B6QE7UGnq9Zbl_n0wG5RL 5LnoJw4K3EO8RhZiu97xW9 5digTDHABVX6eUTvgo0kFg 6850b63ac5f04ec0a5eb0c7147423d46 4Kyl8YATkG8V3xZXft1Af 5DK9n5edyKF0VxF8v0kVUq 3Z61kJIoFhrgmA0dryTdBA 0z0KchRWey4oGOaROQyhtq 3wNxPvOarReGXLjU3wuQDT 15IwNDmd9ILXRpXnuUDDfR 3R6WaPYTtAmUbzoRQCVYdd 12ljdHLkjFfV1P67oEUaNU 4FU3dRTpGHD37PN6mRiJ4P 5T8Pst9n0NHCCLSzOJap0T 4me1GmkR7swg4cPiuzlQVw 30BmCVPkeik3PXxB4IS1b0 5rNVlZAvwI4Ri3bzwEiyFs 4q5YzTQ6mh2Sbd4fiHiFLT 2tnKiumBl7lM9DUYkHT90u 6TOGUG83OGYbmvMogHMAu 3PLKczgf6MpmbTZf945aQb 25XSkHjTeGCh5rgE3x3OQK 66sRlGwvucOVc7sfe5wqLV 2iV41CrnZon6TYcOuYbtDb 6io5BBPw2RoJ12hIgLeKQh 64u15zViVOYUwB6kLgA2t6 3yYsg2oPKNjWw0wxp6bZk6 3X0D3zEJx6oywnBrlK9lB7 1h9SKQfM8hwk1nCMB737e4 2Z4hVAY3hTuOEVfxPnwzLF 3Mk3qrD44MYq2mx7FHEztf 0UtcpsrpUlZnRwddRGll1f 6pdvspePrl206bC7GjSgud radialbrasil?si=38213aaa92bb4599&nd=1&dlsi=2680b55eba1b4118 477X0MCmfxWIUW2rqZw11V 58y2muQWrUgzEPENxslYw3 1RuqfgXIDguD7083Vax40p 6xtJXJhrD1b1Bn9zojUEQN 7yKiBhRnpFvOnfy5zmlrYM 3YeSUBRuhF0H397SA6MN27 6YB1YKmDM4mLpg9UQ7iPam 4Wc0bnKRaE36iQuZqI3fxV 7Kazgjw0TX1guIe1qJApIK 1uVzyklRKi3U1B0e3yQHMn 3FSqnEtcvXapqSFHWVFrIa 78PWuO0aIC3UgqBcs6saxc 26L74v932SuFMbYtNQGllY 6Nad0480BoIrH8RW7A1WBo 0pf3IAfMotbsddWz3mRPKY 0wow1Vb4FJHgjpAJn6lPIs 5Io16wkNHXDZzTgoJqy5No 7fya0H4AimCfOzIChoI0BO 052lxrcyG0ZGzxzTVeDUvK 1kZ7DWIutuGFp4cIrsYA8k 2xY6jllzRQ9yNLkaU9Hp3H 65sT94LMTdLFv65dOiyS9Y 6dFKdBX6HENK2e5y19StBO 7iGrjpSqBB0RnN9IhCF7au 2dB5tcQsVH9tOeQhvaB3aS 750105a7f46b4a92acdbe64ed1b3cc2e 2izhORVzW3rOmtHwObjR3z 5Tic2oiY6OZpccQAoatYpP 37i9dQZF1DX9pryhDLql25?si=34d9fa7c43864174&nd=1&dlsi=3fa7e7c588b24de3 2mODueK6lDr0pmxBs3rrH1 4vBoEK9rnfeyO4dwoi5x0 0R69td6gk0RvUuNNwA79XC 7s5wSxFZ8Z5jWpmrx93YiZ 0WxTmUQ5aGG90W8ObWkNeN 0LnU8gfGmfmnZk04BEgB7N 7Dk0krE8XTSgZ3ZdLzeeef 6kXskb3CHtMCO7rhjYCRwW 34HfBgJzlkAcx6YAJKTNNf 5yCVszUllsJe4Q6Juvnhm8 5vqJcWfO0Zdhhr26sYyOf3 2C6p536hhilPgwdVxh5ykq 4tmxY3je78eOIu89iKCn7g 2EVhyKaGUQFAe2JjvX3aHW 6R1ePFdD7eLfMu1ejZ6TK7 7A6Ef6Nut80p0q5Oaba9lY 1ePmF1Qy0KyUCTxb99yDle 2uCqMDEO1kHerXX52Z9T3E 0TcBXmfrajcDkW587YWSUD 4ClRKYGXkupDXYYTiZI5Hx 6lbFzfRHFsTWXeL9tRIpTP 5bRGRl6qmXtH5y87U5xFtu 21EaiQzIKjqvOrgb7Iq5Xa 2bMpcDmwQIbIY51CD4Py10 3gZWo4zlYJmLNiZqPgbdqW 7DKjdU47YD4exBuXxJy2TG 0bblRjyBpcehezslHtIGBh 27d4524b541d4eac9c18ad145bb6240f 6gdCJV6wkmh2OnH5jv8zPa 5vcyOj026KotM3vLbwNC9M 6ccVZzVazFteBx2VEe8R9Q 4JIqtL0ufcq8pVPoYDMrP5 7qaxqsXCBNTLCRywvqEgtt 2J1fRPNBrunZOa72bMDlOP 6H4glMzh2RgYJW5OJfDf8o 3tm6Afl3VmJ9MYr4aFrZnQ 00fqH4PdclXPku4o1kz8JT 2sS2vRZl2i93GO6Vwrfd 5vhqsCiwYhG74tGpQXqkDc 4km0So60cs0e8ZRLv3gpAg 6a8OhhIPBqMeUsJTq6ZRnr 45Y4HBDtuUmQwBobrfwKCl 06aH9ZZevSDApKezdabRW8 11vhommklmOUsFtJiuk8XQ 37i9dQZF1DX0aBoGE9ziVU?si=zifsEx1RRJ6TTwoifxqI_g&nd=1&dlsi=1bf132d5d66c4760 7atLY1QracwEVjBBq0aPzS 1gaML29HNIyfEQKnciiqHD 6wAKaZ63UjJr7TadCRGmMY 5UTJuNBzGv7YKaaSO8iN9i 3JUUOH1KWhuBWq83r39xsq 48k667AhGqmqsVKLCLQ1G 7q2QWiwdYSIMJoVGRlV6GH 3Kcqe2P90NCjSzdxfpcxQv 5wUh1S6WcwIkQXPfik2eAc 6UTlodR63FoxNEHWMqUAX 6uebPBlsrni7CVg75A4pvb 79CWMFfNcYLMP5gE4yFL2j 10pJfAuWU9hQhPhhgeV4S0 5X1IaSXZbfk5P2ml5SAYFm 11koRfdF0LjHyF22m1UXIv 4rBCPtqlpaXE9CPJmezg0l 5h4lt3LiWNJgtdqyNIswbz 0Ei7xStK73YxbWvKD3Cr95 0T5eMJa2rHaXVWIpSeErK 7xhoCpEIS8EHmVVahSFoyC 6w6tZoxVElNffj6IURdlyO 1kMfdPIWAhwGu9zwx7xffW?si=7c610b4a6212475c 4aSs5qvIKNaYJpBPnD95fP 5W2rGlblgpGq2ftTgfnFRs 0QL9fUMJs4Ooo9Z9WuFhOE 37i9dQZF1DWVqKlZYKYE4p?si=7103a2777f634b19&nd=1&dlsi=6fa157fadfd34299 37i9dQZF1DX6eyIKoZCdug?si=32fdf511a6954693&nd=1&dlsi=26668c1542ac4e02 37i9dQZF1DXbXD9pMSZomS?si=5d32b989e41e464c&nd=1&dlsi=0a6a5bcd58864ac1 09HTyOkT5zya12zeyoT4Mu 6EKlSXTM1Igokej0GLhDMO 3qnAubUsJ6gPprLIPs3fkr 3d8150e00c724d4e815a2a6fb71cf7a7 0f0ux15QcpwgvxmBnqQzr8 4ri124csz1eTdh2Sn25uzf 37GQdYfOJLjbiHsOQx3J1D 0RRWkKRobj1mhnEPmImW8E 6uqQIkly7NV0cPn40NLtRw 3GfRts0dHEJKtCvo2MX6FL 5NOnjyq95tbWCfF4rK1EHf 2tFuFXpPtrx5a1QDsAUACP 4JBSaGHBhYf7RctqwosUs7 5Nk5UEkWDPFmPzktF8V0TO 05DJmkt8UK2de73sI32gRD 4grIm43OBKIQsKpPw4UOy 1Xo73TBQOmWg3zu4gmoabG 2EHDPpDrOWXIaBLRdECqVL 4ZmPxf8VT60R2YgFVQfTWH 40OIBxn7FaL8y0B49HRN39 6Nmyoh1wSwVAxAS7ehEaLU 16QkmvyCJpfVhquB7GeuDf 0sefarU13XhDWzgBBUiJlu 6OR5QZqw35RjvC0AjEYqBb 0MmqLEHrj3aLpUOgkBZT7e 1wKUT4DSgiRcZx898sbI0i 2YoN3NJVmAomKDZXzEbIHf 4AeNFrATi4AIvcWTtDlp2 3Dd3ORgQvnJ4sUFCY8GZXy 37i9dQZF1DXdPec7aLTmlC?si=4a5a81deae2140b6&nd=1&dlsi=205738fac2f84bc7 0EDzESbIsRL9weBQb3HT2m 5iTPxNHDofcyYPFM6lbHJG 52UpRcEGE4I1yhoD6sFLsZ 3OqVeH3ARH0WP0lxPKb6P2 6dSzs1ZovoF64h8qsa0R5G 4sOUJRxpu6fKNOvOt1QarZ 6JvEiSUeBLUkeDJVhI1bdQ 37i9dQZF1DX07sewTBuMpX?si=hZfPqFuzQ6S_kS0J03lyEQ&nd=1&dlsi=8a657f3e5e6f430a 6ZZ6vXos1mwkbX0wX2Rnfj 1qI59IhhuYILDf1WA3vyM2 5ccoYWwuD6EQPr9yGAubVN 4flRtDQURxL6P5CtLlPLtU 7ieApIL1WKbIrXN3l19Bi3 7tSGE9FGeab4YbBFBl9tIS 0GpDPMrobio3DMn59HYzQ 7qc331D85xEKLfUqyGyJI 0KAv2JxfZXeiNifsDItPl2 1POvSRk0dTgtLNRM2f36wy 5VzI8vUHKNKOKUfKLAncF 7pmzWdRqSLMh33mbsmbIiY 2jir5QlzWTiv2guLfAHsrl 0vNiVG58H3xKjO2L2A81vY 6XGsdlWyjLfLvgikEQrl7Y 485ZpLCE0y3NbtA4nCWCeD 4qBAAPrs4oG38c4eYS6t8l 4RiECvKM6Fk2BIJeJsQSMS 3287OJ3PWfHaFfKfOk1irB 2JTO0gXnXRmeSz44qwhIlZ 658B4uzrbSG3Ji75X4Qq1r 1zsQFkFmPI2MPBPX8jaPCv 53kgJOyu4e9Lm9JDsutwl2 0jssRIYvEyN8cptVFhcWsz 4VQnXK6CEXw0DP8CL9gPdW 6vpj5EmzH0YFpAyusFmW36 09BUs7BuU3uakYWQhcPDmv 0ujHWyx7nJwa67S0RYzAcV 4l2ynsz1KvaBrMgVpVQrvs 2MM68h0Vig7Fg6Bzj3fAhu 5eEh5IHpH9QkjkaCyPL8dM 58w3lGkbIEu61l0NFLDEoF 29GPQlPgbJDORXVAWb0NXv 3nrID2Rpvl9hDCfcRfdu6s 0XwM6F8fCvUJnkKkKJGqFi 5pVLGt5aRM7rGoyr31k6MM 6HIhFW6PsQ6BmdhGSDnSfh 5fxNcjoe4jSevxYeUfd1NB 0KmGJD66RieWAJKFsuiEw 2J2HHEk2C5ww2IVlcRbadg 1AqZi0OcQILMpqwAzEw5Kk 4QMuO9rYbG5RqJYCE8hKt5 1mVXPH49SFUfiGO4Lc1EHU 79O1kyNzKgBZQB71HNdxas 7pYUeMmQKqNqBJGKpQWOUU 1rQVrNUPocsv8ZsmijSFn4 6ZZxqjB8G0jV7eq307KC6o 6CrkJeyP28fhZUzRqT5Dy2 2GDfkdkkJdFEsJNeyLvAf 1te9YgfVJXOrGagLJuNWU8 0pnRlRZBziXl6mZd0d5sB8 5ZYdEY5kFPmJExOjNRordQ 4FQ34p1iaeDF7ZEYieCU8L 4w3ls0zhu0UzhJYKw3UDBr 1jgcLyCQOQbmXEWvS5lnGC 7JwfpswuiVGJEJ1CUZYDBJ 5KY8VXnW0YWDgba0oI4wWL 6OjgXvOYvVtbu9EgkTjAql 37i9dQZF1DX8d6nUbucouc?si=C9SIfCt6S0Gb-7ZC1IK-4g&nd=1&dlsi=5dc30fff82144ee0 7ywjMVhbq2cBogVXxEskeY 2ViBLD5ViZHtKj8ruW3hM5 4AkUBYGYLxqhHlUXUhRrvI 4g4X8RcMyurKqrQ9uswJpW 3GaQZJdPp6HSzmTH2daPuf 5MmWi4RxtJEYz1Pd5h7KsW 3Gi4D40ClyT9LEWtJsVEAY 0vzqUe1uvIdUAVRGY8rQ5H 12kefy4FLvHveNwTveLMWQ 37i9dQZF1DXa6nwj9J2RnE?si=19ea4a42ee604609&nd=1&dlsi=1df9a410b4bc47a3 3Ci6TSxEygZY6EwRndw9Np 45GM9sjHdaIF3repbZUJo5 6Co20twJBYdHOmXLXSRu4o 6bTLeNpRkluv2nm1iASQkv 5iDQJoHiSHjbNaXxxgCRd2 1DPqnhiDVR1SrECmjzzeH7 4DychELKvkkPreNC0Z9njH 0C0RugHfjvQnsD7NnZ9iDJ 3YF5NQSIorqPcIvRlIJary 37i9dQZF1DX4WYpdgoIcn6?si=62eb2786bb754e21&nd=1&dlsi=6761835ae8c747c5 1kNLc1il6WcxyS8ionD1Wh 22sr8Y1rbcPBLDl3pRqiOZ 6n48BGpjaNFhiraXdPiL0V 37i9dQZF1DWY5JdEx8J763?si=bf413a08009243d0&nd=1&dlsi=961d1540b511486e 6PgzlxMhSYywRrR23oXLKb 6lrA0AVREmHt4toLWI4vT9 4zwPCEBWN51xVRBKsrqDwR 23ZqEmNqQ9foJ6Y3trEHZb 0AfX3ssL07cQ8V8oSAdBkS 5CbVwXQaZqcDeBS5IomS5D 37i9dQZF1DX8EyMj5jl6Tz?si=vw24Q04bRz-tAcA2Hp1G5w&nd=1&dlsi=e5791bafc0f24c86 2QUSzeqUmAD1worb8I8NXR 07HQxTZiE8g0WE9RsYdg4Q 5o1oY1FBbXZjvgKpVUYyOs 14ZlrJv9io51yAU75cAg82 4ZH7y3RAPpBNLyyjH9fUbH 4tdNVnr3ojGVuxb8BG2M2G 5vVf15OyWRvWgoJCyaTxqy 4HU3h7qO2Ph7kGqlcE6tc 143Uk4ByreCgV5DDSuO9tX 0N8U31hs8kPCWU9yCcyOdq 5f143z3zXd8Llo1aIpGr9H 4oITJN7CuEt9n2n4qrkEo5 6IJir7C6ubqIdawaYsFZNE 7JAdS8FOdN4DWoErorAoGp 7KrqIUFSkyXpELpGmXyvX1 0rYsXRJpopjtrGv3wHuV7d 7tQGndrEg1IcJtWYrJldlr 6nambx4JecymRkm8IkqxlR 2Ev8gm9mGSfBn2tnS8HFM1 2RsXeEx5rd9wtKihVWdQyV 5CTCnetrkA1JqAAuWta8vJ 5rJBez5Ff7GstxSYpiDAEa 7bgz9XWuACcLpuVuzE1yA 7fC0ezUaG8fDcvqpAakm1L 7mLLkLo4xQAuTB5Grt3vlM 7a1hmXw5cOuUpbN0CiRCX3 7mv41shi1ODpZNiAoYTbef 50Z5dNDJZBJAQjarJbW3fN 5Ok1gMCbPE5FhVDHjNM6es 2016XjcUuamXQQpn2zgyXA?si=8f12ec65eb9b4a26 2VAgB1SzmVBbdVwzLFwR9Q 7fznKJ1WHpwnPhZrMcYJqT 05wjXr8aGEMOlUskikIZoW 6v9TyKW4dWYNXMKWI4d5mI 088AaTVONZYnSsvy6XkZJJ 0PAgZtvWibhyuIjxaF91zJ 2Vx5jphZXLSKtLhBcZR4Qw 2okDCkrjprSx0TyLnSO5M2 368Sd100eQnZWIIEFvQlQ5 4fJWjYEWLCL40zEjP6k5q5 3ULDi18PTdAxBcGu2mscWY 0f0IDKXYMSEJ26WHpELdq3 61CXyUxZ6n1ykGXdRy7Y5l 5SMUmS6d5rg8p2t5sOlv36 2gglfBuCljGU3kF9UO2z0E 6B1BOqy0PumpDRsgqDV2ML 3k7x2ZLyCRCVAXHSVWJbF8 1CqaBWJQJE0ItX9mTKiQ7s 4ONg9Kruc1XQbf4jNWo89L 1H5udW2Ts4s17pZcO08PVN 54BRUDTZGpURx1iIm6wjDz 2agtCzDiVXVo9WgOprorqN 1ovyTfrftNmiiShs9aJJyG 6JTZ1wJwnBJBUTMa1Dnoa 37i9dQZF1DWZLcGGC0HJbc?si=a8b1edb01a1046a1&nd=1&dlsi=e04f45a994cf4764 23HICmE9d5EydEFtQLk82o 1sIiNlwwEHwXXrr1um0FWx 0mTuuLFQbdI485G3z80dHe 7dKS2TjKim7XzcKBa07HVH 7ENQAOPtZUbUBywMur6mAS 6sl3OB2ghVho88CXXhnTj 2YUtkTHq73PV3u8u6LKqR 2aP7hoU8aNTu6v4WjHHRfh 2KOjM5GltuDUbiXtXwNEqE 0M8EDuSliIfLOHMd6F2VvL?si=50fb2db09a594c90 7dmeKwa8Zuu43OkZCuEqLP 0cpkChksrTEFRcaQZYmbcC 37i9dQZF1DX80aWjQQ2vSC?si=f6d7363bdf8c4f55&nd=1&dlsi=8b76cf6827304084 5rSfqNdAnop0hdvdIAaC4H 7K4jXEmVmeB4cdx2KRsdjr 37i9dQZF1DWUppGmuwT9c7?si=d19d19968f2e4271&nd=1&dlsi=96d13d3000f5479e 2brQoe60nPJJKWd79iUGO 25UwtmUeIEx1O3Z3uOf3hV 6B9KqntT5P5GjtNSTNODeK 3mvYpQd3M5eJdGQyYVWu3r 3KP9ozgBRyZ0rsv4BrJBvZ 13IDfBidHpzBZkkAMIlSNJ 4CuqAZ76OdyzLkj6ysX0tH 3t72aK0XX3fXhSVQlDPTXD 2BBStuhYyPFe4RywBQivEs 5R7AM0AmzrlUrCqrlmKoN5 4zrywfROTZrQklLuYUhnfT 37i9dQZF1DX66m4icL86Ru?si=b62efd875f4e4338&nd=1&dlsi=ee4acb179b524504 4PObnVjQYATBGkKZi2O2Ob 44tdrpmcs6U6yOhmHPVBp2 0iwbnICqyZLfuVn8EKqQpF 37i9dQZF1DX8eMyhtzAuvp?si=889fe3c5a3f849de&nd=1&dlsi=1ebfc764723a4dd2 1d5rv8HAIQ2b9iV2sgj1Sm 5YVYTdC7XC1zXPIMHrGvjy 4d2950NBK7fic9T5DzbtRl 3wEkeNcP4tJRlPZe9SC4DE 4vd5yZ2fYqYHBCOqFokD9P 5I32zWIuwqOoA3jcy6Z4Hj 0pg5dKUfPCauahzgIMBYQa 6xZ5FOWFJQi2WckMl8sRfn 6tKNg9MaIE0NxgQRU0HLb3 37i9dQZF1DWVdxPuMYBuAk?si=10059047ccac47ec&nd=1&dlsi=519c48f49be94f97 3ShX6xjHbGfdJsvzGLsigo 3kK4k4AL4ocqRIH3vbfjs7 3vSNAfstX26I2M1zqWo9To 25T9o5GICRghuGfvMln0O0 1Bhq8Gp5LaTq8tktS5gwdW 1OLWmjWDGpwjVrfKjUOhVQ 7JIDNARCkw9yobSQEkBOye 37i9dQZF1DX9nkam6FKfgM?si=c7a1845790124aa6&nd=1&dlsi=82b73b6ae9e84c93 3nnwy1XLHYGgANPC6fovWe 0HOAYdhN4F4BX4AXvtE9ZI 235m1iwJoIdSCa43jCof5h 1QUHkM3zk4DyU5GRhElqSP 37FQ3JQkkkneQ6pbg55BB6 2L4cZHgGdXFrIW4qwy0mt3 2BHMKoRhTJ8bKRMIhAQ5Yz 6BiDZBHOUFMMee5NCoy3oh 0tvJmDvBPr009NCvoLhqjq 5gOZt8AKAXNBQTulO0d0lI 2a75dddgCTBqua68biyTdp 55ShDyJ6OFXx9i63G7vQeO 471Vx41dJOloXvNV7WLGHW 37i9dQZF1DX68x6hand0cN?si=6432dbfd004a45af&nd=1&dlsi=eec15c8536ff4706 46cx8hU1vpD7MQ8uPm7Umm 0X2E5aG4p6HxsECDQMvnQI 3VBEbraMCJra3h3Es4ILVf 1cBRRmtxJsTlveltCKorWK?si=5c8534c37dc147c7 4E3y6VlRGZhVsvvufzVabJ 7fja6TS0INrHUP7Zr9B7sN 1tBjUjVTRY9gAGPyFLiMgz 3HlOfmyCaFd0ptslI6NU2o 2EAkDalTHnPrN6DYeMXzNb 1N76LT0l4Lm9kXi792qWLh 2wql8rp5ktL52LaBP6li92 4v0UwODeuclrFEuYg8QXuO 2iySu1kzb6RtPcVB1AInYp 4N3pWRc8sqsZFfxKALAKLg 37i9dQZF1DX4je779Ww5L2?si=sT_MAhxDQKKJx3dzcI-BEA&nd=1&dlsi=433fd2eeef44444b 2bGFCE2n6nacGllDNUL7ox 11qVY5S9zXPHJD1sA3fimI 7EdME9JmlWqoXum7XDwgOd 29R4tNcU9wGpnsaPsHcGQK 6AELzBNf6F75mC2kKF6vWi 2MP6N2oDChDH9nxZYsyffb 3ILrOYIE7edaCFudGNaP5e 6YxHeyeYZYlBoLZxIlYbUG 7kxCfAZ0u4objXioC1C6DQ 6fKfxNl3Q6I6xP38FVaFjC 1G658iXRXWyLJJjp4H31hS 6ESv6N2NWeG4F7k2oIPcx6 3fSYRXMNrpdQlli5axvvyB 4Lk7Drz876MQ30cLMi4YGa 5AD7iXNXXVSvnffIMhFxA9 53A1DfffFRwvOzZIslCWhI 37i9dQZF1DXdaeKeYefGeI?si=8907fa8d7ccf488d&nd=1&dlsi=bf99566362db4e1c spotify:playlist:7DzuEBHtwgSasrgVgTa3Eh 3u2sMhofxfj8NNSQHz8Ugk 1KFjkYTSI41Kf26scj9RL2 37i9dQZF1DWYBTcEG5KFeA?si=febf5ebfa8404fa0&nd=1&dlsi=71eac49030614dea fRoxV0WRdB53ExeM3OKSH 5ImqtXGRdIH9JCdkiA5Ry8 0DV9Jk8D6JD5Bv8BfUKfCQ 5z7g4g6wDwJWl4CddvFhRb 5xCiAtovSZelx3Ou2DqgLO 2li43apLfmEiNJ9wzbNNZ9 37i9dQZF1DXbcZUQ66mVM3?si=-ekFT21ZRG2m30CrmBWYkg&nd=1&dlsi=f85dd705a2f7489a 3S9qwI7utRmTOmq9T1EEsF 2hnaQFnmPaw3Pmfsu3uIe2 0GCNhHx9N6HVFYslaLbk 1AjOb2kX3e80QPJWcRpDdE 0Azvp8zAsHZGu8GPbsdQMZ 4gLxKXEJcyZ83Y5rpczNiJ 6p8J2ZljoU7DNGkWjSSTQ8 iSUNRs8sAme2COKY79uq5 0OFnTVrBFgvwHgJwAAtqjt 6H6bY85wMRP7rEGFduDn3Q 08009wbv7qyws6bUh3OkZG 2Wj5Dh4fykDdcxWIGBe7Wo 5uOf1GCBBecls0mD2Avata 07BmvVEmLsL2cNBw2y3n6e 63gQjqMLU5opNJC3bQzpCs 37i9dQZF1DWVqKlZYKYE4p?si=585befa1373a4f0c&nd=1&dlsi=66a8e5a6238846a6 41wR6nYjcUWgsQ96wTfnLq 21yBmSY7pQJVrHT2W3KOax 2kRfqPViCqYdSGhYSM9R0Q 1HJZ5j7lWhD0usqP1TroTO 0zNo8ILqJedBf5gyifhfj9 1ZJPGaaSN6wypF41Sj2KZ9 5iSTQzhNst4WKor9N5c5mQ 6rGieEkq5KborcUU9xE3a7 58SRzGFUjEwfWPXhv8zU16 5gbTdwgu3aFmCQSgjUxAz8 2ynKQBJy532duYQExz1U8t 22mQjVz4xGcgBhgQ5DxGnQ 6tYefQlH7k5ISxMQa73psx 0ib6SS1H2Yc6Ns4SxbjtRy 6wS4Qqmz26edeW1pa3G9OS 3E9qKwA1dlPKMnezAW6hx1 3rnnqEv5k029Rsm5J2oxKe 33JaJxwcATiEb2bbm6oyYC 7gpcUGaavIWt38kvkHSPhK 37i9dQZF1DX8mnKbIkppDf?si=fae28e67f3634562&nd=1&dlsi=b2798525a7b241f5 0TUQ75j9IwtD0dcPCViCeP 5LlQkDWMxUMwK7AodcUIz9 1uhUb7g7TVWAPJV8DNoQR0 6EAAht0hycCkOP8UuMbAql 7gmo0LLpfky38hEXgaTYU5 59SsKse8mF1Gf1IO14E3Lr 6ZpBWxKOytYOkVyNmZNBgT 73sGbt2obRgUF4LNUaTNHd 42cCQ616IRDPs4AxIXoiUX 18eQup29aNTGhC22ZEZPM1 5iVXHXilV3UBQvXrMkTZfG 1piffuHsGFPuYPqK3bUBdW 51DngwPPdRjv5R8Nbmhjz9 6QuiGOPbyCMQ05gFP9apwG 6TA4G1HiVXizRbA9oC4Gvw 5MlW3xZlt86XJC30CP1EDT 6KJUD1L9vELX5IglYl1O5Y 1WbdzgATmYgs0cFdDRF2Lz 3CPqG6QGiV9XYKByLSECPf 3obDCjIHS3HV32rGAkMZ0Z 4Op9Cxu7fdCI4bPC7rKLX3 1GcEQk1xnhHTaUXQSKY8Z2 3JjIz5O4mqYnqXOBHXguVl 4863wB7BDVmCvyFdKgb2p 0iqYNeZ2avTiFjaswouEKS 0gzy7xH9lH1LIxSCF7v1kr 4GKDGoNoh1rIMxt9fXaeN3 2NhRdeIRmWNXYGFPeGRwq 1JyHI56Tpo9P1VVCwULipp 2lrZQd5D8DJgnSQyzEORjy 0ThpXVi2Cr0xuNg6XrjuNS 58HPWxHIiyK7NlirzxTl5q 74rvrCsLebIVFeIYUhdSVr 3I1GoJJ7VKQQkWtPauJWr 6OcjOWmlKQxX30O5ctEAtc 6FjggLVUTMbjqS4lkASVsw 7j29UUKSjQwZJbRimV6TpM 2JiCjLC6KVDy8RMvWSHu16 1sFC5MtULn97OfOqzhp1j9 3Z1JL37UxkfIBKx4qnKMD4 3AH14GIIDOHWlDJcZgC8iQ 8ab9cad71f754d5fa5dd148feb7b7878 5qH0XkJuj3WAPZtCPLK9fp 4kTJmsBJc8uUsqdsncLw7 4AJgijnOVDxSXqvnFKtJeC 62YXH1GA6NKhoFjtugd8m 6Ic4d6Daqk40SplUrMgUV6 35SnAi4QYVNGUfJrEZY2PJ 37i9dQZF1DX7NhGf24haor?si=c0e41110e8f146cb&nd=1&dlsi=55f6d019bd944ea9 6o1LvjEf83h1EeTdQzw89m 2iPeQ0Hmg0VvnqmOJYthSX 6VnMSpk2H0GDm2JVMe0fRB 0gn58lgIACDZEp4w29tM4O 53ks4vNVOxu06YWeL1JlgO 7C2o48d3LLKh0vqNGtksVy 43jrpR1EzZJ9AEhSkPuF0W 2PO2lxXfuOGPOaUYx4hkPS 5U2IE8HZ5BGME5UZ25maz2 2tgESJOjuyuAqQ6kG7y1iS 7DtUyBeJpV5BzFiImHL9OE 0l8oBJIMVaqnWxiakFBPrN 59xUBIYOcK1fEihxqnc7Sd 3QF03lXNxzKFTL4o0CIRh3 7g42MvtElH578ZenBCnbQ2 1aMbGbulOFZH43Gveqk5YM 4NEshfX4ELUSsqe6nTtDea 0mkQGu02zk0zSDqN2XLWM 6cCu15qp28qCwJx9Gt5Yl4 37i9dQZF1DX7qK8ma5wgG1?si=25138ce563fe43d8&nd=1&dlsi=7947d694fa4b4df1 3tDMLK9ZIIjNCZXTM2Db8L 4w906spfVYuhnBQfWXFrZj 6V9rgmOitRFveDaAciBXgY 36GZve2WKel1csOpsKY9ne 7cHPmJ6oFMdSozXZLHmOF2 45oeZ7VyO7iHlSO8wn9PsX 1xsIwE3IFeUzKX9Gd0Fr3q 4tNivibv3Fieh64U2Awao 6f0BltGpvefOW7rDqHYqct 2qGfAfcWQldsNko4xvlrNZ 3ayPTn8OjNZVp65hY240VI 1bBu6D58yKV4Uj8eLPHYFv 3hlxvTb3LhhrWkizOzSAyf 7f9MqNuOURhjD7a4ztlHg3 49J5gFKGBqYQFbQltvtLpO 6dOcFmrfbFM4KfchHBwxkY 4P1z5MrPK38JxS1eCODWp1 0oPEUN8c6cVWVw2jNm12X 1p3aFnSTXFRcXhhXwmyN 1jRZKiYKOo3XZuheKnpQcu 22ajHsu0cfS6hK7nchUk2r 1zpXAJ2N129fV1A9rD6wn 35H4OexxaGJ9RxyhMvPX3h 0IZZ592Dw0IKDxtIV1nyi 37i9dQZF1DX44dZ4p5QLf4?si=f97de7972a1a4e32&nd=1&dlsi=ca3edbc975ff4528 3RR3K7XcWsUBHNKXScLiG4 5KngnmPJfUBcvIQbJcMAWA 3VbTx6d8elBGSB5vIqPrEv 5HJzDewezNejg0qKsg5Yic 0HJimg7hw6o4hoTM6NpxQB 7h2jvUUiautwUL4dkVoRwZ 4CudUv0ZnXJ095ZyC6VqRT 2BGa9uv59kxTVQaIGpDylT 4DLHWkXGqGZdyVWtMDuRoh 5lJCFq3mq39etuDtQSUzJ1 6Q8Wpm8xVhjnFaJbBoE6vY 3RJh5oHPwrsuC10V9eJePd 6A1Q7Zb2FSJSIE3VTSTBsN 1dclBTy24MY91TwnqfPd44 0Q0Y1bgYnArDneJigyZIGC 6tj2hw4WlkRfpLKHub6eWQ 6LAIcniU2OOdlXwonVknWf 4AtKHeI9xA7YCYup1UbDtJ 3qEmRyCNUtnCnZM0A0btDe 5YbKsX2HFeW8VhtNf9ieY /7wTukJxqRAVRsQhtboetYz 3CiIZhNqeu3qYSSocuSrhT 0pPkY3CpIYJcVjO7QTf3tZ 3Fwq3kmUXUqZkqUXE1EhN 7F1T9Kn0jPLatz9WSamu40 3FJRCrwG3jFAfXJePBLjR2 0bjGopumzshXTmJYA2vtnA 3bjpZEyjI6LJ0N559obOSU 1zzffyiA1mP3OnjUQbmVhl 4N6pv9eGpQAG3mg2XR3VQZ 0UIh4C3aYZ7nR5znvwS9Y4 7D6V2u7NyaeYB1eVdilyh5 37i9dQZF1DX1X4eYJIURJC?si=g5X3czr-SIaAUGoMLQuAcg&nd=1&dlsi=f138b7edffef4256 5vP53UpTUaOl8KV5NZOyUy 1V340XpJB2Tn0R8TKqFFYL 6VOwwavfj5KUFeW5xH81yP 6r9ZlXqEmdctWoV6s5eh4L 37i9dQZF1DX2hNQN2Fv6Cy?si=879ab69a0dd64548&nd=1&dlsi=f68543b9319a4eb2 0Ond5q2arNAhlfJoEKlZ4q B0CZYTZ3M2 3gX9bMinxZK0WCg4Z3ZgN7 7m7Ug0c54qiJ75zA82uPTP 27kumFvqWB5ONNJKs6V3J 2YDWozHv0v6PAsh93r2FCV 3vGKP1rCxBenBHYPwY6WW3 5ZyKo57JJ59wZLqFhWqIqt 6yaGOS7uyFWJvRZ60IS4rK 0O33XTV1if92DiL1zZYBWN 0V3eHGpEyX53793fYFdfNF 4R9q5Wj0fIiWbd3XaDiCxD 7oyVByVpj3sFvRpgRvKjEy 5dZ4MMyXZY4X0g6fAleCGi 6stR4Ac65zjVjiGEF3LDoP 3yE3kXEdjHrOwOBmn3B9pv 37i9dQZF1DWYPwGkJoztcR?si=b464cd64f0d949f4&nd=1&dlsi=263db287afcd4a39 37i9dQZF1DWZSdcRHMl2tT?si=0ede2941a71e43e5&nd=1&dlsi=536b11eb8369498c 5LMYwyrLYWY85QLqS4zjZB 0tHGN7dtuhGiPpueejLshZ 3OyEVD7ICr9KKNKCHlRcvL 45S8n8w18oicVWd0AYU1n 7gep2Afm5cEdsWgmCwWsgh 4mNwZEzFYpP7fhHLMSS9RL 4lylVe0BovsPjbEMYOHWoT 3duLeQ0Zx9GdXZNeLlGRNK 3sZi6dBuRvTcFRpuXR7m80 1VR8cln71YI7RXmA0FXpkY 6h6aUwwhXP5m0OkEI14VW9 4FJLmfp7xhXNnbztZjjHyW 2nutYn0UnaLhm2rQPG0Eq4 7GD6SU20oLUqaU1vtXjjC1 0TLCgqESQLz3zkZtvctSSH?si=e6de89b7863f4767 1w07ng0PIERIO2dyS0yX8J 1z2xM3CBn41DlOc8PNDR98 5prHYnJBugamU5k9BNepJe 37i9dQZF1DX73EtbU4jEcn?si=c43bd29e00ca408f&nd=1&dlsi=36bd32fe4e4248d0 5QMBBcr1R15A0joSgHmvOD 37i9dQZF1DWUtgTr0Gkxh2?si=6354f042c01948ba&nd=1&dlsi=fb3d74e61e3f4543 0wyLBxVUyw6ueHSYnDx46R 5ppgyCJH2ZdSy6aIacPFHw 3jcUfdHEiVUPDpMdsMzj8F 1iX0aRvMsjwVt8hkXXsuCA 6owOsGHdxcvbRatA6jb3ay 0Xu5d4ccv2hl0EOsebxSLI 2NwOQeoAlMJv978KOgN2Ss 4e9WspPch0qsbXMVsQ0xTA""" def clean_id(raw: str) -> str: # Handle spotify:playlist: URI raw = raw.strip() if raw.startswith("spotify:playlist:"): raw = raw[len("spotify:playlist:"):] # Strip leading slash raw = raw.lstrip("/") # Strip query params raw = raw.split("?")[0] return raw.strip() def check_playlist(raw_id: str): playlist_id = clean_id(raw_id) if not playlist_id: return raw_id, "INVALID" try: resp = requests.get( f"https://api.spotify.com/v1/playlists/{playlist_id}", params={"fields": "id"}, headers={"Authorization": f"Bearer {TOKEN}"}, timeout=10, ) if resp.status_code == 200: return playlist_id, "AVAILABLE" elif resp.status_code == 404: return playlist_id, "NOT_AVAILABLE" else: return playlist_id, f"STATUS_{resp.status_code}" except Exception as e: return playlist_id, f"ERROR_{e}" def main(): raw_ids = [line.strip() for line in PLAYLIST_IDS.strip().splitlines() if line.strip()] print(f"Checking {len(raw_ids)} playlists with 20 parallel workers...") results = [] with concurrent.futures.ThreadPoolExecutor(max_workers=20) as executor: futures = {executor.submit(check_playlist, rid): rid for rid in raw_ids} for i, future in enumerate(concurrent.futures.as_completed(futures), 1): playlist_id, status = future.result() results.append((playlist_id, status)) print(f"[{i}/{len(raw_ids)}] {playlist_id} -> {status}") with open(OUTPUT_FILE, "w", newline="") as f: writer = csv.writer(f) writer.writerow(["PlaylistID", "Status"]) writer.writerows(results) available = sum(1 for _, s in results if s == "AVAILABLE") not_available = sum(1 for _, s in results if s == "NOT_AVAILABLE") other = len(results) - available - not_available print(f"\nDone! Results saved to {OUTPUT_FILE}") print(f" AVAILABLE: {available}") print(f" NOT_AVAILABLE: {not_available}") print(f" OTHER: {other}") if __name__ == "__main__": main()