Skip to content

Channels, playlists et kiosques ​

La plupart des extracteurs renvoient une liste, et tous partagent une même base, ListExtractor, et une même forme de résultat, ListInfo. Cette page couvre les types de listes au-delà de la recherche et des commentaires.

Famille des extracteurs de listes

ListInfo : le résultat de liste ​

Chaque *Info de liste étend ListInfo<T extends InfoItem> (qui étend lui-même Info). En plus de l'identité et de la liste d'erreurs d'Info, il ajoute :

java
List<T> getRelatedItems();        // the items of the first page
boolean hasNextPage();  Page getNextPage();
List<FilterItem> getContentFilters();  List<FilterItem> getSortFilter();

En construire un suit toujours la même chorégraphie : getInfo(extractor) appelle fetchPage(), lit getInitialPage(), recopie les éléments et nextPage sur le ListInfo, puis remplit les champs spécifiques au type. Ainsi ChannelInfo, PlaylistInfo, KioskInfo, ChannelTabInfo, FeedInfo et CommentsInfo sont identiques à ce niveau.

Channels et onglets ​

Un ChannelExtractor est un ListExtractor<StreamInfoItem>. Ses champs obligatoires sont getAvatarUrl, getSubscriberCount (ou UNKNOWN_SUBSCRIBER_COUNT) et getDescription ; le reste (bannière, channel parent, vérification, tags) vaut vide par défaut.

Un channel n'est pas une seule liste à plat. getTabs() renvoie une List<ListLinkHandler>, une par onglet, et chaque onglet est son propre ChannelTabExtractor (un ListExtractor<InfoItem>). Le nom de l'onglet est le premier filtre de contenu du handler, tiré des constantes ChannelTabs :

java
VIDEOS, TRACKS, SHORTS, LIVESTREAMS, CHANNELS, PLAYLISTS, PODCASTS, ALBUMS, SEARCH

Ainsi « les vidéos de ce channel » et « les playlists de ce channel » sont deux ChannelTabExtractor construits à partir de deux handlers et récupérés indépendamment.

Playlists ​

Un PlaylistExtractor est un ListExtractor<StreamInfoItem> doté de getUploaderUrl / getUploaderName / getUploaderAvatarUrl, isUploaderVerified et getStreamCount. Son getPlaylistType() indique de quel genre de liste il s'agit :

java
enum PlaylistType { NORMAL, MIX_STREAM, MIX_MUSIC, MIX_CHANNEL, MIX_GENRE }

Une MIX_* est une playlist sans fin générée automatiquement (une radio/un mix) que l'application traite différemment d'une NORMAL : elle continue de s'allonger au fur et à mesure de la lecture. PlaylistInfo.getInfoWithFullItems parcourt chaque page quand vous avez réellement besoin de tous les éléments.

Kiosques ​

Un kiosque est une liste nommée et sans identifiant : tendances, classements, conférences, les fils de la page d'accueil d'un service. Un KioskExtractor<T> étend ListExtractor<T> et porte un identifiant de kiosque.

Un service enregistre ses kiosques sur un KioskList dans getKioskList() :

java
kioskList.addKioskEntry(extractorFactory, listLinkHandlerFactory, id);
kioskList.setDefaultKiosk(id);

Chaque entrée associe une KioskExtractorFactory (qui construit l'extracteur pour une url + un identifiant de kiosque) à une factory de link-handler. C'est ainsi que YouTube expose Tendances, BiliBili ses Recommandés / Top-100, PeerTube ses Tendances / Récents / Local, et media.ccc.de ses conférences, tous derrière un même getKioskList() uniforme.