Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Écarter les chaînes qui ne font pas partie de l' offre #79

Open
eluisne opened this issue Jan 17, 2025 · 17 comments
Open

Écarter les chaînes qui ne font pas partie de l' offre #79

eluisne opened this issue Jan 17, 2025 · 17 comments

Comments

@eluisne
Copy link

eluisne commented Jan 17, 2025

Pour éviter de remonter les chaînes qui ne font pas partie de l' offre un petit dev pourrait-etre utile.

En effet, c'est un peu long à faire manuellement en sélectionnant chaque chaîne depuis PVR & live TV settings. Mais pour l'ergonomie, c'est quand-même génial de n'avoir que des chaînes fonctionnelles et pour les appareils un peu plus vieux ça évite un gros ralentissement avec le téléchargement de métadonnées inutiles. (en particulier le guide TV et le picto de la chaîne)

Ex une petite boucle qui test chaque chaîne une fois pour toute. Si la chaîne ne fait pas partie de l'offre = soit non ajouté sur la playlist.m3u8, soit cochée comme non utilisée dans le fichier de settings de PVR & live TV settings.

Si c'est du python 3, je peux peut-être donner un coup de main.

@f-lawe
Copy link
Owner

f-lawe commented Jan 17, 2025

Merci pour la discussion dédiée.

Pour commencer à réfléchir à ce sujet, voilà quelques pistes de réflexions et connaissances que j'ai sur le sujet pour le moment.

Idéalement, ça serait cool d'avoir un endpoint chez Orange qui renvoie directement la liste des chaînes filtrées. Mais pour le moment, je n'ai rien vu passer de tel. Et vu que sur le web ou leur application mobile, toutes les chaînes s'affichent, je n'ai pas de raison de croire qu'une telle fonctionnalité existe.

Effectivement, la première alternative, ça serait de tester une à une toutes les chaînes. Il y en a un peu plus de 300, ça pourrait prendre un certain temps, surtout sur du vieux matériel... Pas sûr que ça soit pertinent de faire cette vérification au moment où IPTV Manager s'occupe de rafraîchir la liste et le guide. On pourrait imaginer comme alternative une action depuis les paramètres à lancer manuellement.

Pour la mise à disposition, on a aussi plusieurs solutions, dont certaines que tu listes déjà :

  • Filtrer au niveau de ce qu'on renvoie à IPTV Manager (ce que tu appelles playlist.m3u8, qui n'est en réalité pas généré par cet addon)
  • Activer/Désactiver automatiquement les chaînes
  • J'ai également pensé à un groupe de chaîne dédié. Tu as essayé par exemple de n'afficher que le group "TNT" ?

Dis-moi si je me trompe, mais les soucis que tu évoques, c'est principalement des soucis au moment de l'affichage, quand tu charges les écrans de la liste des chaînes ou du programme TV ? Ou alors tu as des ralentissements aléatoires en plus, quand l'addon rapatrie localement les données des serveurs Orange ?

@f-lawe
Copy link
Owner

f-lawe commented Jan 17, 2025

Et c'est en effet du python 3 (3.8 précisément), tout coup de main est bienvenu ! Faut juste se faire à l'API de Kodi, c'est avec ça que j'ai le plus de mal, ça n'est pas hyper documenté.

@eluisne
Copy link
Author

eluisne commented Jan 17, 2025

Deux choses:

  • Ergonomiquemet parlant, avoir près de 500 chaînes dont une petite partie seulement est fonctionnelle, ça n'est pas génial. Soit on connaît les numéros par cœur, soit on se lasse vite de naviguer et on ne visionne que la TNT. Les chaînes musicales sont bien derriere, on ne parle pas des chaînes d'info et encore moins des chaînes d'info en anglais...

  • Techniquement, lorsque je lance le menu TV, Kodi est à bout de souffle car il tente de charger les logos et programmes de toutes les chaînes. Idem lorsque le plugin Orange met à jour le m3u8.

Je n'avais pas pensé au groupe de chaîne dédié. Mais cela ne résoudrait que l'aspect ergonomique. De ce que j' ai cru comprendre, mettre les chaînes dans un groupe invisible ne les désactive pas.

En effet, autant le code semble accessible à un débutant comme moi, autant les articulations au sein de l' API semblent complexes. La documentation simplifiée sera la bienvenue...

@f-lawe
Copy link
Owner

f-lawe commented Jan 19, 2025

Je vois ton point niveau ergonomie, je constate juste que ça n'est pas ce que fait Orange sur ces interfaces, donc ça me rend sceptique sur l'existence d'un endpoint qui donnerait directement cette information (ce qui serait l'idéal).

Si tu me dis que la mise à jour du guide et de la liste des chaînes ralentit Kodi, il va falloir être malin. Aujourd'hui le plugin fait une dizaine d'appels à ce moment-là (certes un peu lourd, le guide fait 20 Mo chez moi). En ajoutant la vérification de toutes les chaînes, ça nous fait 300 appels de plus, ce qui n'est pas rien pour une petite config.

Qu'est-ce que tu penses d'un bouton dans les paramètres qui ferait cette vérification à la demande, et garderait ce résultat en cache ? Ou alors j'ai une autre idée : un réglage qui prendrait un entier comme valeur, le nombre de jours de validité du cache. Si on met 0, on garde le fonctionnement actuel. Si on met 30, il fera la vérification de la disponibilité des chaînes lors de la prochaine mise à jour. Gros chargement qui mettra ta config à genou, mais tu seras tranquille pour les 30 prochains jours.

@f-lawe
Copy link
Owner

f-lawe commented Jan 19, 2025

Pour ce qui est des explications, je peux déjà te donner les grandes lignes pour le plugin :

  • managers : il y a trois classes responsables des trois grandes fonctionnalité du plugin : l'envoi de donnée à IPTV Manager, le chargement des flux vidéos, et la navigation dans le replay.
  • providers : les fournisseurs TV qui sont disponibles dans le plugin, l'archi a été initialement pensées pour permettre de brancher à terme SFR, Free ou Bouygues (mais comme je suis personnellement chez Orange, ça n'avance forcément pas très vite), d'où la classe asbtract_provider.py qui recense toutes les informations qu'on a besoin de récupérer d'un fournisseur. Ca m'a permis néanmoins d'ajouter les déclinaisons locales Oranges Caraïbe et Orange Réunion. Et comme ils sont très similaires à leur cousin de métropole, il y a une autre classe abstraite abstract_orange_provider.py pour regrouper toutes ces fonctionnalités.
  • utils : simplement un dossier qui regroupe des fonctions réutilisées à plusieurs endroits dans le projet

En ce qui concerne l'API web d'Orange, je n'ai hélas pas de documentation précise à te proposer. J'imagine qu'ils doivent avoir ça en interne, mais je ne bosse pas chez eux. Pour avancer, j'ai simplement reproduit ce que faisait mon navigateur en allant sur chaines-tv.orange.fr, en observant l'inspecteur, jusque dans les headers des requêtes HTTP. Une petite galère comme tu peux t'en douter !

J'espère que ça répond déjà un peu à tes questions :)

@f-lawe
Copy link
Owner

f-lawe commented Jan 20, 2025

Réflexions matinales pour faire un peu avancer le schmilblick :

  1. J'ai trouvé ce lien : https://boutique.orange.fr/tv/chaines-tv-incluses#chainesincluses. Impossible de mettre la main sur un appel API propre, mais c'est peut-être un début. Est-ce que tu as des chaînes payantes de ton côté ? La question que je me pose c'est si cette page est dynamique.
  2. Pour savoir si c'est le poids des appels ou si plus d'appels mais plus légers peuvent améliorer ta situation, on peut faire un test avec ce qu'on a déjà. Dans le fichier abstract_orange_provider.py, il y a une variable chunks_per_day dont la valeur est à 2. Je viens de me rappeler que j'avais déjà mis en place un découpage, parce qu'en effet les réponses sont super lourdes. Tu pourrais éventuellement passer ce paramètre à 10 voire 15 ou carrément 24, et voir si ça allège le truc quand IPTV Manager met à jour le guide.

@remzouille
Copy link
Contributor

Je ne pense pas que ce soit une bonne idée de scanner, même une fois de temps en temps, les 397 chaînes pour voir celles qui marchent. Cela implique de faire autant de requêtes au serveur de licence et c'est risquer des contre-mesures qui rendraient le plugin inutilisable.

J'ai une idée pour récupérer la liste des chaînes disponibles, je regarde dès que possible.

@remzouille
Copy link
Contributor

remzouille commented Jan 24, 2025

@eluisne, dans le fichier plugin.video.orange.fr/resources/lib/providers/abstract_orange_provider.py, ligne 69, essaye de remplacer
for channel in channels
par
for channel in channels if any(package in channel['packages'] for package in ['PA_BQ_BASIC_M'])
puis rafraîchis les chaînes dans IPTV Manager. Tu ne devrais plus avoir que les chaînes du bouquet gratuit.

L'étape suivante est de trouver un moyen de récupérer les bouquets auxquels on est abonné. Ça devrait être possible puisque l'interface web affiche un panier dans le coin en haut à gauche d'une chaîne quand on n'y est pas abonné.

@eluisne
Copy link
Author

eluisne commented Jan 24, 2025

Merci @remzouille et @f-lawe J' étais absent les derniers temps, mais je vais prendre le temps de lire et exploiter vos suggestions et ressources dans les jours à venir

@remzouille Mon idée était primaire était en effet bien trop intuitive et je n' avais pas les risques de contre mesure en tête. Dans un premier temps, je vais essayer ta suggestion.
Je te tiens au courant.

@Lulu5353
Copy link

Une solution facile à votre problème, vous récupérez le fichier m3u que vous modifiez en supprimant les chaînes que vous ne souhaitez pas. C'est rapide et fonctionnel.

@f-lawe
Copy link
Owner

f-lawe commented Jan 30, 2025

@Lulu5353 Le fichier est réécrit en permanence par IPTV Manager, ça n'est pas durable comme solution.

@eluisne Tu as pu faire des essais avec les différentes options évoquées ? Ca donne quelque chose ?

@Lulu5353
Copy link

Effectivement, cependant sur les versions précédentes du plugin orange ça fonctionnait correctement. J'avais une liste m3u avec des liens du plugin orange melangés à des liens du plugin vavooto . Sur le coup je ne peux aider, je suis un simple utilisateur sans connaissance. En tout cas bravo pour votre travail!

@eluisne
Copy link
Author

eluisne commented Jan 30, 2025

@Lulu5353 désolé, en ce moment je suis débordé.
Mais effectivement le fichier m3u est réécrit régulièrement car les liens m3u sont basés sur le token il me semble.
C'est peut-être une nouveauté éphémère par rapport au passé, mais on n'a pas vraiment le choix?

@f-lawe
Copy link
Owner

f-lawe commented Jan 31, 2025

C'est le fonctionnement d'IPTV Manager. Il va régulièrement faire le tour des plugins compatibles, leur demander une liste de chaînes et un guide des programmes, puis il regroupe le tout et l'exposer à IPTV Simple PVR. Ca permet à plusieurs fournisseurs de m3u8 de fonctionner ensemble.

Concernant le token : l'astuce qui est utilisée, c'est que les chaînes Orange TV France générées par le plugin n'indiquent pas directement une url publique qui serait disponible sur le web. Elles pointent vers une url interne à Kodi (en plugin://), qui lance le plugin. C'est lui qui s'occupe ensuite de se connecter correctement à Orange, de récupérer le flux vidéo, et de l'envoyer à IPTV Simple PVR.

@Lulu5353
Copy link

En fait, après essai, la technique de récupérer le fichier m3u et enlever les chaînes non souhaitées fonctionne bel et bien. Il suffit juste de remettre le lien du fichier dans la config IPTV simple.

@f-lawe
Copy link
Owner

f-lawe commented Feb 4, 2025

Ok, je pense que j'ai trouvé. Le site internet a fait peau neuve, et on voit clairement si un chaîne fait partie de l'abonnement ou pas, si on affiche la page en mode connecté : https://tv.orange.fr/en-direct/programmes-en-cours. Le endpoint derrière est un peu relou à parser, mais y'a ce qu'il faut : un attribut rightTag sur les chaînes qui ne sont pas disponibles.

A voir d'ailleurs si on migre vers ces nouveaux appels, pour mimer le comportement. Il n'y a plus la recherche, mais on a gagné des catégories transversales à toutes les chaînes pour le replay, genre tous les films disponibles sur toutes les plateformes. Sympa.

@remzouille
Copy link
Contributor

remzouille commented Feb 5, 2025

J'ai une solution qui évite de modifier les endpoints.

En mode connecté, dans la page https://tv.orange.fr, il y a une variable javascript __pinia.userStore.packages qui contient les packages auxquels on est abonné (si quelqu'un est abonné à des packs et peut nous donner le contenu de cette variable pour vérifier).

Voici un patch qui en tient compte, avec un peu de nettoyage (variables inutilisées).

@f-lawe, si tu veux je peux lancer une PR.

patch_v2.3.3.txt

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants
@remzouille @f-lawe @Lulu5353 @eluisne and others