Erreurs et exceptions
Les échecs d'extraction sont des exceptions vérifiées. Tout ce qui suit dérive de ExtractionException (qui étend Exception), donc le compilateur oblige les appelants à les gérer, et le type lui-même porte le sens.
La hiérarchie
ExtractionException
├─ ParsingException
│ ├─ ContentNotAvailableException
│ │ ├─ GeographicRestrictionException
│ │ ├─ AgeRestrictedContentException
│ │ ├─ PaidContentException
│ │ ├─ PrivateContentException
│ │ ├─ SoundCloudGoPlusContentException
│ │ ├─ YoutubeMusicPremiumContentException
│ │ ├─ AccountTerminatedException (porte un Reason)
│ │ ├─ LiveNotStartException
│ │ └─ VideoNotReleaseException
│ ├─ ContentNotSupportedException
│ ├─ FoundAdException
│ ├─ AntiBotException
│ └─ NeedLoginException
└─ ReCaptchaException (porte l'url du challenge)Quoi lever et quand
ParsingException: la page s'est chargée mais un champ est manquant ou mal formé. Enveloppez-y les échecs IO et JSON.ContentNotAvailableExceptionet ses sous-classes : le contenu existe mais ce client ne peut pas l'obtenir. La sous-classe dit pourquoi, et l'application l'associe à un message précis :GeographicRestrictionException,AgeRestrictedContentException,PaidContentException,PrivateContentException,AccountTerminatedException(avec unReason),LiveNotStartException/VideoNotReleaseExceptionpour les directs pas encore commencés et les premières, plus celles spécifiques à un service (SoundCloudGoPlusContentException,YoutubeMusicPremiumContentException).
ContentNotSupportedException: l'extracteur ne gère pas ce type de contenu, par exemple un channel sans onglet pris en charge.FoundAdException: le lien est une URL publicitaire ; levée directement depuis le link handler.ReCaptchaException: le service exige un captcha ; elle porte l'urlpour que l'application puisse présenter le challenge.
Sites de levée réels
YoutubeStreamExtractor inspecte la raison de l'erreur du player et lève la bonne :
java
if (message.contains("private")) throw new PrivateContentException("This video is private");
if (reason.contains("Premieres in")) throw new VideoNotReleaseException(reason);SoundcloudStreamExtractor transforme une politique "SNIP" en SoundCloudGoPlusContentException ; YoutubeStreamLinkHandlerFactory lève FoundAdException pour les hôtes doubleclick. C'est cette précision sur laquelle s'appuie StreamInfo.getInfo quand il distingue le contenu soumis à une restriction d'âge de celui bloqué par pays (voir Flux d'extraction).
