import yt_dlp import os import shutil def validate_youtube_url(url): """YouTube URL'sinin geçerliliğini ve video ID'sini kontrol eder.""" if 'youtube.com/watch?v=' not in url and 'music.youtube.com/watch?v=' not in url: return False, None, None try: # URL'den video ID'sini güvenli şekilde çıkar vid = url.split('v=')[1].split('&')[0].split('#')[0] if len(vid) != 11: # YouTube video ID'leri 11 karakterdir return False, None, None except: return False, None, None # Provider tipini belirle provider = 'YTM' if 'music.youtube.com' in url else 'YT' # URL'nin gerçekten erişilebilir olduğunu kontrol et yt_opts = {'quiet': True, 'ignoreerrors': True} with yt_dlp.YoutubeDL(yt_opts) as ydl: info = ydl.extract_info(url, download=False) return bool(info), vid, provider def process_musiclist(): # 1. Orijinal dosyanın yedeğini al shutil.copyfile('musiclist.txt', 'musiclist_backup.txt') # 2. Geçici liste için yeni dosya oluştur temp_lines = [] with open('musiclist.txt', 'r') as f: for line_num, line in enumerate(f, 1): line = line.strip() if not line: temp_lines.append(line) continue try: musicname, old_vid, provider = line.split('---') musicname = musicname.strip() old_vid = old_vid.strip() provider = provider.strip() except: print(f"⚠️ Hatalı satır formatı (satır {line_num}): {line}") temp_lines.append(line) continue # 3. Mevcut URL'yi kontrol et base_url = f'https://{"music." if provider=="YTM" else ""}youtube.com/watch?v={old_vid}' is_valid, _, _ = validate_youtube_url(base_url) if is_valid: temp_lines.append(line) continue # 4. Geçersizse kullanıcıdan yeni URL iste print(f"\n🔴 Geçersiz: {musicname}") print(f"Mevcut URL: {base_url}") while True: new_url = input("Yeni YouTube URL'si girin (iptal için 'x'): ").strip() if new_url.lower() == 'x': temp_lines.append(line) # Orijinal satırı koru print("İptal edildi, orijinal kayıt korundu") break is_valid, vid, detected_provider = validate_youtube_url(new_url) if is_valid: new_line = f"{musicname} --- {vid} --- {detected_provider}" temp_lines.append(new_line) print(f"Güncellendi: {new_line}") break print("❌ Geçersiz URL veya video! Tekrar deneyin.") # 5. Değişiklikleri onayla print("\n" + "═"*50) print(f"Toplam {len(temp_lines)} kayıt işlendi") confirmation = input("Değişiklikleri kaydetmek istiyor musunuz? (E/H): ").strip().lower() if confirmation == 'e': # 6. Orijinal dosyayı güncelle with open('musiclist.txt', 'w') as f: f.write('\n'.join(temp_lines)) print("✔️ Müzik listesi başarıyla güncellendi!") print("Orijinal dosyanın yedeği: musiclist_backup.txt") else: print("❌ Değişiklikler iptal edildi, dosya değişmedi") if __name__ == "__main__": print("Orijinal dosyanızın yedeği otomatik alınacaktır\n") if not os.path.exists('musiclist.txt'): print("Hata: musiclist.txt bulunamadı!") exit() process_musiclist()