added check if any transcripts are actually available
This commit is contained in:
parent
20612ea7a3
commit
f1e4754ca4
|
@ -1,3 +1,11 @@
|
|||
from ._api import YouTubeTranscriptApi
|
||||
from ._transcripts import TranscriptList, Transcript
|
||||
from ._errors import TranscriptsDisabled, NoTranscriptFound, CouldNotRetrieveTranscript, VideoUnavailable
|
||||
from ._errors import (
|
||||
TranscriptsDisabled,
|
||||
NoTranscriptFound,
|
||||
CouldNotRetrieveTranscript,
|
||||
VideoUnavailable,
|
||||
NotTranslatable,
|
||||
TranslationLanguageNotAvailable,
|
||||
NoTranscriptAvailable,
|
||||
)
|
||||
|
|
|
@ -11,7 +11,7 @@ class CouldNotRetrieveTranscript(Exception):
|
|||
GITHUB_REFERRAL = (
|
||||
'\n\nIf you are sure that the described cause is not responsible for this error '
|
||||
'and that a transcript should be retrievable, please create an issue at '
|
||||
'https://github.com/jdepoix/youtube-transcript-api/issues.'
|
||||
'https://github.com/jdepoix/youtube-transcript-api/issues. '
|
||||
'Please add which version of youtube_transcript_api you are using '
|
||||
'and provide the information needed to replicate the error. '
|
||||
'Also make sure that there are no open issues which already describe your problem!'
|
||||
|
@ -43,6 +43,10 @@ class TranscriptsDisabled(CouldNotRetrieveTranscript):
|
|||
CAUSE_MESSAGE = 'Subtitles are disabled for this video'
|
||||
|
||||
|
||||
class NoTranscriptAvailable(CouldNotRetrieveTranscript):
|
||||
CAUSE_MESSAGE = 'No transcripts are available for this video'
|
||||
|
||||
|
||||
class NotTranslatable(CouldNotRetrieveTranscript):
|
||||
CAUSE_MESSAGE = 'The requested language is not translatable'
|
||||
|
||||
|
|
|
@ -13,7 +13,12 @@ import re
|
|||
|
||||
from ._html_unescaping import unescape
|
||||
from ._errors import (
|
||||
VideoUnavailable, NoTranscriptFound, TranscriptsDisabled, NotTranslatable, TranslationLanguageNotAvailable
|
||||
VideoUnavailable,
|
||||
NoTranscriptFound,
|
||||
TranscriptsDisabled,
|
||||
NotTranslatable,
|
||||
TranslationLanguageNotAvailable,
|
||||
NoTranscriptAvailable,
|
||||
)
|
||||
from ._settings import WATCH_URL
|
||||
|
||||
|
@ -38,9 +43,14 @@ class TranscriptListFetcher():
|
|||
|
||||
raise TranscriptsDisabled(video_id)
|
||||
|
||||
return json.loads(splitted_html[1].split(',"videoDetails')[0].replace('\n', ''))[
|
||||
'playerCaptionsTracklistRenderer'
|
||||
]
|
||||
captions_json = json.loads(
|
||||
splitted_html[1].split(',"videoDetails')[0].replace('\n', '')
|
||||
)['playerCaptionsTracklistRenderer']
|
||||
|
||||
if 'captionTracks' not in captions_json:
|
||||
raise NoTranscriptAvailable(video_id)
|
||||
|
||||
return captions_json
|
||||
|
||||
def _fetch_html(self, video_id):
|
||||
return self._http_client.get(WATCH_URL.format(video_id=video_id)).text.replace(
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -5,7 +5,13 @@ import os
|
|||
|
||||
import httpretty
|
||||
|
||||
from youtube_transcript_api import YouTubeTranscriptApi, VideoUnavailable, NoTranscriptFound, TranscriptsDisabled
|
||||
from youtube_transcript_api import (
|
||||
YouTubeTranscriptApi,
|
||||
TranscriptsDisabled,
|
||||
NoTranscriptFound,
|
||||
VideoUnavailable,
|
||||
NoTranscriptAvailable,
|
||||
)
|
||||
|
||||
|
||||
def load_asset(filename):
|
||||
|
@ -88,6 +94,16 @@ class TestYouTubeTranscriptApi(TestCase):
|
|||
with self.assertRaises(NoTranscriptFound):
|
||||
YouTubeTranscriptApi.get_transcript('GJLlxj_dtq8', languages=['cz'])
|
||||
|
||||
def test_get_transcript__exception_if_no_transcript_available(self):
|
||||
httpretty.register_uri(
|
||||
httpretty.GET,
|
||||
'https://www.youtube.com/watch',
|
||||
body=load_asset('youtube_no_transcript_available.html.static')
|
||||
)
|
||||
|
||||
with self.assertRaises(NoTranscriptAvailable):
|
||||
YouTubeTranscriptApi.get_transcript('MwBPvcYFY2E')
|
||||
|
||||
def test_get_transcripts(self):
|
||||
video_id_1 = 'video_id_1'
|
||||
video_id_2 = 'video_id_2'
|
||||
|
|
Loading…
Reference in New Issue