diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8bb8c5d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +__pycache__ +transcript_*.txt \ No newline at end of file diff --git a/__pycache__/youtube_transcript_downloader.cpython-312.pyc b/__pycache__/youtube_transcript_downloader.cpython-312.pyc new file mode 100644 index 0000000..38dc070 Binary files /dev/null and b/__pycache__/youtube_transcript_downloader.cpython-312.pyc differ diff --git a/youtube_transcript_downloader.py b/youtube_transcript_downloader.py index 020ea95..258e0a6 100644 --- a/youtube_transcript_downloader.py +++ b/youtube_transcript_downloader.py @@ -7,9 +7,11 @@ This program downloads a YouTube video transcript and translates it to English. import sys import re +import json from youtube_transcript_api import YouTubeTranscriptApi from youtube_transcript_api.formatters import TextFormatter from deep_translator import GoogleTranslator +import language_codes def extract_video_id(url): @@ -150,9 +152,9 @@ def main(): if needs_translation: print("\nNote: The transcript appears to be in a non-English language.") - print("Would you like to translate it to English?") - response = input("Enter 'y' for yes or 'n' for no: ").strip().lower() - + #print("Would you like to translate it to English?") + #response = input("Enter 'y' for yes or 'n' for no: ").strip().lower() + response = 'y' if response == 'y': print("\nTranslating to English...") translated = translate_text(original_text, 'en') @@ -243,22 +245,10 @@ def download_captions(video_id): Dictionary with 'transcript', 'language', and 'success' keys, or None if no transcript is available """ - try: - # First, try to get English transcript (preferably en, en-US, en-GB) - english_languages = ['en', 'en-US', 'en-GB'] - transcript = YouTubeTranscriptApi().fetch(video_id, languages=english_languages) - - if transcript: - return { - 'transcript': transcript, - 'language': transcript.language, - 'success': True - } - except Exception as e: + for languages in language_codes.ENGLISH_LANGUAGES, language_codes.COMMON_FALLBACK_LANGUAGES, language_codes.YOUTUBE_LANGUAGE_CODES: try: - # If no English transcript is available, try any language - print("No English transcript found. Trying to get transcript in original language...") - transcript = YouTubeTranscriptApi().fetch(video_id, languages=['de','fa']) + # First, try to get English transcript (preferably en, en-US, en-GB) + transcript = YouTubeTranscriptApi().fetch(video_id, languages=languages) if transcript: return { @@ -266,20 +256,14 @@ def download_captions(video_id): 'language': transcript.language, 'success': True } - - return { - 'transcript': None, - 'language': None, - 'success': False - } - except Exception as e: - print(f"Error downloading captions: {e}") - return { - 'transcript': None, - 'language': None, - 'success': False - } + print("failed to fetch transcript in the following languages: "+json.dumps(languages,indent=2)) + print(f"Error downloading captions: {e}") + return { + 'transcript': None, + 'language': None, + 'success': False + } if __name__ == "__main__":