import requests import re import json from bs4 import BeautifulSoup ISRCFINDER_URL = "https://www.isrcfinder.com/" SONGSTATS_BASE = "https://songstats.com" SPOTIFY_URI = "https://open.spotify.com/track/1CPZ5BxNNd0n0nF4Orb9JS" HEADERS = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Referer": "https://www.isrcfinder.com/", "Origin": "https://www.isrcfinder.com", } def get_csrf_token(session): print("[1] Mengambil CSRF token ...") response = session.get(ISRCFINDER_URL, headers=HEADERS) response.raise_for_status() soup = BeautifulSoup(response.text, "html.parser") csrf_input = soup.find("input", {"name": "csrfmiddlewaretoken"}) if csrf_input: token = csrf_input["value"] print(f" Token : {token}") return token token = session.cookies.get("csrftoken") if token: print(f" Token : {token}") return token raise ValueError("CSRF token tidak ditemukan!") def get_isrc(session, csrf_token): print(f"\n[2] Mencari ISRC untuk: {SPOTIFY_URI}") headers = {**HEADERS, "Content-Type": "application/x-www-form-urlencoded"} payload = {"csrfmiddlewaretoken": csrf_token, "URI": SPOTIFY_URI} response = session.post(ISRCFINDER_URL, headers=headers, data=payload) matches = list(set(re.findall(r'\b([A-Z]{2}[A-Z0-9]{3}\d{7})\b', response.text))) if not matches: raise ValueError("ISRC tidak ditemukan di response.") isrc = matches[0] print(f" ISRC : {isrc}") return isrc def get_platform_links(session, isrc): url = f"{SONGSTATS_BASE}/{isrc}?ref=ISRCFinder" print(f"\n[3] Mengambil link dari songstats.com ...") response = session.get(url, headers={"User-Agent": HEADERS["User-Agent"]}, allow_redirects=True) soup = BeautifulSoup(response.text, "html.parser") tidal_link = None amazon_link = None deezer_link = None for script in soup.find_all("script", {"type": "application/ld+json"}): try: data = json.loads(script.string) graph = data.get("@graph", [data]) for node in graph: if node.get("@type") == "MusicRecording": for link in node.get("sameAs", []): if "listen.tidal.com/track" in link: tidal_link = link elif "music.amazon.com" in link: amazon_link = link elif "deezer.com" in link: deezer_link = link except (json.JSONDecodeError, AttributeError): continue return tidal_link, amazon_link, deezer_link def main(): with requests.Session() as session: csrf_token = get_csrf_token(session) isrc = get_isrc(session, csrf_token) tidal, amazon, deezer = get_platform_links(session, isrc) print(f"\n{'='*50}") print(f" ISRC : {isrc}") print(f" Tidal : {tidal or 'Tidak ditemukan'}") print(f" Amazon Music : {amazon or 'Tidak ditemukan'}") print(f" Deezer : {deezer or 'Tidak ditemukan'}") print(f"{'='*50}") if __name__ == "__main__": main()