import os import re from enum import Enum from pprint import pprint from urllib.parse import urlparse import pandas as pd import spotipy from spotipy.oauth2 import SpotifyOAuth from config import * class MusicSource(Enum): SPOTIFY = 'spotify' YOUTUBE = 'youtube' SOUNDCLOUD = 'soundcloud' BANDCAMP = 'bandcamp' OTHER = 'other' os.environ['SPOTIPY_CLIENT_ID'] = SPOTIPY_CLIENT_ID os.environ['SPOTIPY_CLIENT_SECRET'] = SPOTIPY_CLIENT_SECRET SERVICES = { 'open.spotify.com': MusicSource.SPOTIFY, 'youtu.be': MusicSource.YOUTUBE, 'www.youtube.com': MusicSource.YOUTUBE, 'soundcloud.app.goo.gl': MusicSource.SOUNDCLOUD, 'on.soundcloud.com': MusicSource.SOUNDCLOUD, 'm.soundcloud.com': MusicSource.SOUNDCLOUD, 'soundcloud.com': MusicSource.SOUNDCLOUD } def echo(link): o = urlparse(link) if re.match(r'([A-Za-z0-9\-]*\.)?bandcamp.com', o.hostname): return {'source': MusicSource.BANDCAMP, 'link': link} return {'source': SERVICES.get(o.hostname, MusicSource.OTHER), 'link': link} def update_spotify_from_export(): df = pd.read_json("ChatExport_2022-09-18/result.json") df1 = pd.json_normalize(df.messages) reduced = df1[df1['type'] == 'message'][['id', 'type', 'text', 'from', 'from_id']] get_links = pd.json_normalize(reduced.explode('text').text) links = get_links[get_links['type'] == 'link']['text'].to_list() links_w_source = [echo(l) for l in links] pprint(links_w_source) spotify_links = [] yt_links = [] soundcloud_links = [] bandcamp = [] other_links = [] for i in links_w_source: if i['source'] == MusicSource.SPOTIFY: spotify_links.append(i['link']) elif i['source'] == MusicSource.YOUTUBE: yt_links.append(i['link']) elif i['source'] == MusicSource.SOUNDCLOUD: soundcloud_links.append(i['link']) elif i['source'] == MusicSource.BANDCAMP: bandcamp.append(i['link']) else: other_links.append(i['link']) print(spotify_links) print(yt_links) print(soundcloud_links) print(bandcamp) print(other_links) scope = "playlist-modify-private" os.environ['SPOTIPY_REDIRECT_URI'] = 'https://example.com/callback' sp = spotipy.Spotify(auth_manager=SpotifyOAuth(scope=scope)) sp.playlist(SPOTIFY_PLAYLIST_ID) print(sp.playlist_replace_items(SPOTIFY_PLAYLIST_ID, spotify_links)) if __name__ == '__main__': update_spotify_from_export()