diff --git a/youtube_transcript_api/_api.py b/youtube_transcript_api/_api.py index ca0dcfb..448642b 100644 --- a/youtube_transcript_api/_api.py +++ b/youtube_transcript_api/_api.py @@ -9,16 +9,11 @@ from xml.etree import ElementTree import re -import logging - import requests from ._html_unescaping import unescape -logger = logging.getLogger(__name__) - - class YouTubeTranscriptApi(): class CouldNotRetrieveTranscript(Exception): """ @@ -57,11 +52,11 @@ class YouTubeTranscriptApi(): :param continue_after_error: if this is set the execution won't be stopped, if an error occurs while retrieving one of the video transcripts :type continue_after_error: bool + :param proxies: a dictionary mapping of http and https proxies to be used for the network requests + :type proxies: {'http': str, 'https': str} - http://docs.python-requests.org/en/master/user/advanced/#proxies :return: a tuple containing a dictionary mapping video ids onto their corresponding transcripts, and a list of video ids, which could not be retrieved :rtype: ({str: [{'text': str, 'start': float, 'end': float}]}, [str]} - :param proxies: a dictionary mapping of http and https proxies to be used for the network requests - :rtype {'http': str, 'https': str} - http://docs.python-requests.org/en/master/user/advanced/#proxies """ data = {} unretrievable_videos = [] @@ -89,19 +84,14 @@ class YouTubeTranscriptApi(): do so. As I can't provide a complete list of all working language codes with full certainty, you may have to play around with the language codes a bit, to find the one which is working for you! :type languages: [str] + :param proxies: a dictionary mapping of http and https proxies to be used for the network requests + :type proxies: {'http': str, 'https': str} - http://docs.python-requests.org/en/master/user/advanced/#proxies :return: a list of dictionaries containing the 'text', 'start' and 'duration' keys :rtype: [{'text': str, 'start': float, 'end': float}] - :param proxies: a dictionary mapping of http and https proxies to be used for the network requests - :rtype {'http': str, 'https': str} - http://docs.python-requests.org/en/master/user/advanced/#proxies """ try: return _TranscriptParser(_TranscriptFetcher(video_id, languages, proxies).fetch()).parse() except Exception: - logger.error( - YouTubeTranscriptApi.CouldNotRetrieveTranscript.ERROR_MESSAGE.format( - video_url=_TranscriptFetcher.WATCH_URL.format(video_id=video_id) - ) - ) raise YouTubeTranscriptApi.CouldNotRetrieveTranscript(video_id) diff --git a/youtube_transcript_api/_cli.py b/youtube_transcript_api/_cli.py index bc35c21..e705aa2 100644 --- a/youtube_transcript_api/_cli.py +++ b/youtube_transcript_api/_cli.py @@ -18,17 +18,17 @@ class YouTubeTranscriptCli(): if parsed_args.http_proxy != '' or parsed_args.https_proxy != '': proxies = {"http": parsed_args.http_proxy, "https": parsed_args.https_proxy} - transcripts, _ = YouTubeTranscriptApi.get_transcripts( + transcripts, unretrievable_videos = YouTubeTranscriptApi.get_transcripts( parsed_args.video_ids, languages=parsed_args.languages, continue_after_error=True, proxies=proxies ) - if parsed_args.json: - return json.dumps(transcripts) - else: - return pprint.pformat(transcripts) + return '\n\n'.join( + [str(YouTubeTranscriptApi.CouldNotRetrieveTranscript(video_id)) for video_id in unretrievable_videos] + + [json.dumps(transcripts) if parsed_args.json else pprint.pformat(transcripts)] + ) def _parse_args(self): parser = argparse.ArgumentParser(