From 72f035fa6d3098f3a02530601e0f6e155c88b9a0 Mon Sep 17 00:00:00 2001 From: Jonas Depoix Date: Mon, 15 Mar 2021 10:34:05 +0100 Subject: [PATCH] adjusted CLI to be able to handle masked hyphens --- README.md | 8 +++++++- youtube_transcript_api/_cli.py | 6 +++++- youtube_transcript_api/test/test_cli.py | 6 ++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7328e4e..711019b 100644 --- a/README.md +++ b/README.md @@ -195,7 +195,13 @@ If you are not sure which languages are available for a given video you can call ``` youtube_transcript_api --list-transcripts -``` +``` + +If a video's ID starts with a hyphen you'll have to mask the hyphen using `\` to prevent the CLI from mistaking it for a argument name. For example to get the transcript for the video with the ID `-abc123` run: + +``` +youtube_transcript_api "\-abc123" +``` ## Proxy diff --git a/youtube_transcript_api/_cli.py b/youtube_transcript_api/_cli.py index 405d6e1..e76fb2f 100644 --- a/youtube_transcript_api/_cli.py +++ b/youtube_transcript_api/_cli.py @@ -131,4 +131,8 @@ class YouTubeTranscriptCli(): help='The cookie file that will be used for authorization with youtube.' ) - return parser.parse_args(self._args) + return self._sanitize_video_ids(parser.parse_args(self._args)) + + def _sanitize_video_ids(self, args): + args.video_ids = [video_id.replace('\\', '') for video_id in args.video_ids] + return args diff --git a/youtube_transcript_api/test/test_cli.py b/youtube_transcript_api/test/test_cli.py index 158cd35..aabc5a4 100644 --- a/youtube_transcript_api/test/test_cli.py +++ b/youtube_transcript_api/test/test_cli.py @@ -79,6 +79,12 @@ class TestYouTubeTranscriptCli(TestCase): self.assertEqual(parsed_args.json, False) self.assertEqual(parsed_args.languages, ['en']) + def test_argument_parsing__video_ids_starting_with_dash(self): + parsed_args = YouTubeTranscriptCli('\-v1 \-\-v2 \--v3'.split())._parse_args() + self.assertEqual(parsed_args.video_ids, ['-v1', '--v2', '--v3']) + self.assertEqual(parsed_args.json, False) + self.assertEqual(parsed_args.languages, ['en']) + def test_argument_parsing__fail_without_video_ids(self): with self.assertRaises(SystemExit): YouTubeTranscriptCli('--json'.split())._parse_args()