Files
youtube_personal/ETAPE18_4_CHAINES_PERSONNELLES_SPONSORBLOCK.md
T

157 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Étape 18.4 - Chaînes personnelles + chargement vidéos + SponsorBlock
Cette étape corrige les trois points remontés après la capture du menu
Chaînes.
## 1. Les vidéos d'une chaîne se chargent réellement
La page chaîne essaie maintenant en priorité le chemin officiel déjà présent
dans l'application :
```text
Google OAuth youtube.readonly
↓
channels.list -> playlist uploads
↓
playlistItems.list (pagination de 50)
↓
videos.list (durée + vues + date)
↓
affichage progressif
```
Elle ne s'arrête plus aux 30 vidéos de l'ancienne version et suit
`nextPageToken` jusqu'à la fin de la playlist d'uploads.
Si le compte Google n'est pas disponible, elle bascule sur le chemin public
`youtube_explode_dart.getUploadsFromPage()`.
## 2. Le classement Chaînes utilise MES vues
Le classement précédent utilisait les vues publiques YouTube. C'était une
mauvaise interprétation de la demande.
Nouveau classement :
```text
#1 chaîne avec le plus de lectures dans YouTube Personal
#2 ...
#3 ...
```
Chaque ouverture réelle d'une vidéo incrémente un compteur local :
```text
youtube_personal.watch_counts.v1
```
Un changement 1080p -> 4K ne compte PAS comme une nouvelle vue.
Les anciennes entrées de l'historique sont migrées avec au moins 1 vue par
vidéo, car l'application ne peut pas reconstruire les répétitions passées
qu'elle n'enregistrait pas encore.
Carte exemple :
```text
12 de mes vues • 4 vidéos différentes
La plus regardée par moi (5×) : ...
```
## 3. Une chaîne ne m'intéresse pas
Menu `...` d'une chaîne :
```text
Cette chaîne ne m'intéresse pas
```
La chaîne est alors :
```text
- retirée du menu Chaînes
- exclue des prochaines recommandations Radar
- mémorisée localement
```
Un bouton ANNULER apparaît immédiatement après le masquage.
La page complète de la chaîne possède aussi :
```text
Ne plus me proposer cette chaîne
```
L'historique existant n'est pas détruit.
## 4. Sponsors intégrés aux vidéos
Ajout de SponsorBlock, catégorie `sponsor` uniquement.
YouTube Personal récupère les segments connus et, lorsque la lecture entre
dans l'un d'eux :
```text
lecture normale
↓
début sponsor détecté
↓
seek automatique à la fin du sponsor
↓
lecture continue
```
Notification courte :
```text
Sponsor ignoré automatiquement • 34s
```
Le mécanisme fonctionne dans le lecteur Windows/Android et aussi dans le
Player audio Android lorsque l'écran est verrouillé.
### Vie privée SponsorBlock
Le client utilise l'endpoint k-anonymity : il calcule SHA-256(videoId) et
n'envoie au serveur que les 4 premiers caractères du hash. Il filtre ensuite
localement la réponse pour retrouver la vidéo exacte.
Seule la catégorie `sponsor` est ignorée. Les intros, outros, rappels de
s'abonner et autres catégories ne sont pas sautés.
## Test
Extraire le ZIP à la racine puis :
Windows :
```powershell
cd "D:\07-Logiciels\23-youtube_personal"
flutter run -d windows
```
Android :
```powershell
cd "D:\07-Logiciels\23-youtube_personal"
flutter run -d f10778d8
```
Pas besoin de `flutter clean`.
### Vérifications
1. Menu Chaînes : le texte doit afficher `mes vues`, plus les millions de vues
publiques.
2. Ouvrir deux fois une vidéo, revenir dans Chaînes : le compteur augmente.
3. Changer seulement la qualité : le compteur ne doit pas augmenter.
4. Cliquer une chaîne : les vidéos doivent commencer à apparaître.
5. Tester `Plus vues sur YouTube` dans la page de la chaîne.
6. Masquer une chaîne puis vérifier qu'elle disparaît du Radar.
7. Sur une vidéo connue de SponsorBlock, chercher le log :
```text
[SPONSORBLOCK] ... segment(s) sponsor trouvé(s)
[SPONSORBLOCK] skip ...
```