4 min

8

Des collections Plex à partir des tops SensCritique

Je choisis mes films sur SensCritique, et je voulais retrouver ses classements directement sur l’accueil de mon serveur Plex. Avec Claude, c’est devenu un script Python qui alimente Kometa chaque nuit : 8 collections, dans l’ordre exact du classement, mises à jour toutes seules.

Le problème

Kometa sait créer des collections à partir de listes IMDb, Trakt ou TMDb, mais pas de SensCritique. Or ce sont les tops SensCritique qui m’intéressent : meilleurs films de 2026, meilleurs films français de l’année, meilleurs films des années 90, 2000, 2010 et 2020.

Ce que Claude a construit

Un script de 150 lignes, lancé chaque nuit à 3 h juste avant Kometa :

  1. Lire le classement de chaque top SensCritique.
  2. Retrouver chaque film sur TMDb à partir de son titre original et de son année.
  3. Écrire le fichier de collections que Kometa lit ensuite : 15 films par top, en mode sync (un film qui sort du top sort de la collection).
  4. Remettre l’ordre dans Plex, avec un second script lancé après Kometa.

Les films du top que je n’ai pas encore sont demandés via Overseerr. Ils s’insèrent à leur rang dès leur sortie en vidéo.

Ce qui a cassé

La page s’arrête à 15 films. La page web d’un top n’affiche que les 15 premiers, ce qui ne laisse aucune marge quand on écarte des films. Claude est passé par l’API GraphQL qu’utilise le site lui-même, qui renvoie le classement complet.

Les homonymes. « The Brutalist » renvoyait sur TMDb vers un film récent du même nom. Le script ne garde donc que les titres identiques à un an près, et parmi eux le plus connu. Les titres en plusieurs parties (« De Gaulle – Partie 2 : J’écris ton nom ») sont réécrits avant la recherche.

L’ordre. Kometa refuse d’imposer un ordre personnalisé quand une collection est définie par une liste d’identifiants. Et Plex applique mal les déplacements « après tel film » : il crée des positions en double. En revanche, « en tête de liste » marche toujours. Le second script place donc chaque film en tête, du dernier au premier. Le résultat est dans l’ordre du classement.

Les films d’animation. Ils vivent dans une bibliothèque à part, pour les enfants. Une liste d’exclusion les retire des tops Films, et le 16e du classement prend leur place.

Le nettoyage automatique. Maintainerr supprime les films non vus depuis 90 jours. Sans précaution, il aurait vidé les tops. Un troisième script exclut de Maintainerr tous les films présents dans une collection SensCritique.

Les années terminées

Pour 2025, le classement ne bougera plus beaucoup. Ces tops sont figés dans le script sous forme de liste d’identifiants TMDb : plus besoin d’interroger SensCritique, et j’ai pu retirer à la main les films en double entre deux tops.

Récupérer les scripts

Je partage les scripts en libre accès, sous licence MIT. Ils réutilisent les clés Plex et TMDb déjà présentes dans le config.yml de votre Kometa : il vous reste seulement à choisir vos tops.

Mise en place :

  1. Copiez les fichiers dans le dossier de Kometa, puis installez les dépendances :pip install requests ruamel.yaml.
  2. En haut desenscritique_top.py, renseignez le nom de votre bibliothèque de films et vos tops. L’adresse d’un top se trouve sur SensCritique, onglet « Résultats » : c’est le nombre à la fin qui compte.
  3. Testez sans rien écrire :python senscritique_top.py --dry-run. Le script affiche chaque film et sa correspondance TMDb : vérifiez qu’aucun n’est « INTROUVABLE » ou mal reconnu.
  4. Déclarez le fichier généré dans le config.yml de Kometa, sous votre bibliothèque :
    libraries:
      Films:
        collection_files:
          - file: config/collections/senscritique.yml
  5. Lancez run_kometa.sh une première fois, puis programmez-le chaque nuit avec cron.

Pour écarter un film (un dessin animé rangé dans une autre bibliothèque, par exemple), ajoutez son identifiant TMDb à EXCLUDE. Pour figer le top d’une année terminée, remplacez sa lecture par une liste fixed d’identifiants. Si vous utilisez Maintainerr, pensez à exclure les films des tops de ses règles de suppression : je ne fournis pas ce script, trop lié à mon installation.

Une API non officielle

Le script interroge l’API qu’utilise le site SensCritique lui-même. Elle n’est pas documentée et peut changer du jour au lendemain. Restez raisonnable : une lecture par top et par nuit suffit largement.

À retenir

Le travail de Claude n’a pas été d’écrire le script en une fois, mais de vérifier collection par collection ce qui s’affichait réellement dans Plex, et de remonter chaque écart à sa cause : page tronquée, homonyme, bug de tri, film rangé dans la mauvaise bibliothèque. Aujourd’hui, la tâche de nuit tourne en une minute et le journal affiche « ordre déjà correct » pour chaque top.

À lire aussi

48Shield TV tube : 48 applis en moins, plus de mémoire libre23Nettoyer et personnaliser une Shield TV Pro avec Claude34Les règles que mon agent IA a apprises en se trompant