Automated-ytdlp-downloader: YouTube için yt-dlp komut satırı arayüzü

Merhaba. Eskiden ruby dilinde yazdığım automated-ytdlp-downloader programını tekrardan go diliyle yazdım. Yavaş yavaş programı geliştiriyorum ve go dilinde yazmaktan keyif alıyorum.

Özellikleri

  • Müzik/Video oynatma listesi desteği
  • Videolar ~/Videolar dizinine kaydedilir.
  • Müzikler ~/Müzikler dizinine kaydedilir.
  • MP3,M4A,WAV,FLAC,OPUS,OGG (Vorbis) indirme
  • MP4 (En iyi) indirme

İsterseniz bir deneyebilirsiniz.

2 Likes

Ellerine sağlık çok güzel olmuş, istersen main fonksiyonundaki hata bildirimi biraz daha iyileştirilebilir :slightly_smiling_face: :

Önceki main fonksiyonu :

func main() {
	ytdlpPath, err := check_ytdlp()
	if err != nil {
		log.Fatal(err)
	}

	check_dir(xdg.UserDirs.Music)
	check_dir(xdg.UserDirs.Videos)

	for {
		isPlaylist, link, err := getLink()
		if err != nil {
			log.Fatal(err)
		}

		if link == "" {
			break
		}

		ytdlpArgs, err := getArgs(isPlaylist)
		if err != nil {
			log.Fatal(err)
		}

		downloadLink(ytdlpPath, ytdlpArgs, link)
	}
}

Düzenleme yaptığım main fonksiyonu :

func main() {
	ytdlpPath, err := check_ytdlp()
	if err != nil {
		log.Fatalf("yt-dlp not found: %v", err)
	}

	if err := check_dir(xdg.UserDirs.Music); err != nil {
		log.Fatalf("Failed to check/create music directory: %v", err)
	}
	if err := check_dir(xdg.UserDirs.Videos); err != nil {
		log.Fatalf("Failed to check/create videos directory: %v", err)
	}

	for {
		isPlaylist, link, err := getLink()
		if err != nil {
			log.Printf("Error getting link: %v", err)
			continue
		}

		if link == "" {
			fmt.Println("No link entered, exiting.")
			break
		}

		ytdlpArgs, err := getArgs(isPlaylist)
		if err != nil {
			log.Printf("Error getting arguments: %v", err)
			continue
		}

		output, err := downloadLink(ytdlpPath, ytdlpArgs, link)
		if err != nil {
			log.Printf("Error downloading link: %v", err)
		} else {
			fmt.Println("Download successful!")
			fmt.Println(output)
		}
	}
}

Yaptığım değişiklikler :

  • Önceki: log.Fatal(err)
  • Şimdi: log.Fatalf("yt-dlp not found: %v", err)

Öncekinde, hata meydana geldiğinde program sadece hatayı yazdırıp çıkarıyordu. Ancak bu, kullanıcıya hatanın nerede ve neden olduğunu açıklamıyor. Bu yüzdrn log.Fatalf kullanarak daha iyi olacağını düşündüm.


  • Önceki: log.Fatal(err)
  • Şimdi: log.Printf("Error getting link: %v", err); continue

Öncekinde hata meydana geldiğinde program hemen sonlanıyordu. Ancak continue kullanarak programın çalışmaya devam etmesi sağlanabilir. Bu, kullanıcın yeni bir giriş alarak hata durumunu aşmayı sağlar.

	for {
		isPlaylist, link, err := getLink()
		if err != nil {
			log.Printf("Error getting link: %v", err)
			continue
		}
		...
	}

  • Önceki: log.Fatal(err)
  • Şimdi: log.Fatalf("Failed to check/create music directory: %v", err)

Bu, kullanıcıya hatanın nerede ve neden olduğunu açıklar.

	if err := check_dir(xdg.UserDirs.Music); err != nil {
		log.Fatalf("Failed to check/create music directory: %v", err)
	}
3 Likes