my-music-list/checkstillexist.py

96 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()