Catch-up-TV-and-More / plugin.video.catchuptvandmore

Replay, Live TV and websites videos addon for Kodi
https://catch-up-tv-and-more.github.io
GNU General Public License v2.0
284 stars 89 forks source link

Replays MyTF1 - Erreur - Le flux vidéo n'est pas disponible #1162

Closed raydenxxx closed 1 year ago

raydenxxx commented 1 year ago

⚠️ Please try the last beta version and check existing issues before issuing a bug. ⚠️

Describe the bug

A clear and concise description of what the bug is: Impossible de lancer les replays des chaines MyTF1

To Reproduce

Steps to reproduce the behaviour:

  1. Aller dans Catch-up TV & More
  2. Aller dans les replays FR
  3. Aller dans les replays MyTF1
  4. Aller dans TMC
  5. Aller dans Infos, Mag & Sport
  6. Cliquer sur Quotidien
  7. Cliquer sur Replay
  8. Lancer n'importe quel replay

Expected behaviour

A clear and concise description of what you expected to happen: Le replay devrait se lancer

Actual behaviour

Tell us what happens instead: Le replay ne se lance pas et une erreur s'affiche "Le flux vidéo n'est pas disponible" puis "Echec de lecture d'un ou plusieurs fichiers"

Screenshots

If applicable, add screenshots to help explain your problem: IMG_9872

IMG_9871

Your environment

Additional context

Add any other context about the problem here: les lives ne marchent pas non plus.

Debug log

If you can, please add your debug log information (Tutorial available here: https://kodi.wiki/view/Log_file/Easy): kodi.log

raydenxxx commented 1 year ago

une copie du log au moment de l'erreur 2023-06-13 14:02:06.897 T:3476 INFO <general>: initializing python engine. 2023-06-13 14:02:07.484 T:3476 INFO <general>: CPythonInvoker(18, C:\Users\coren\AppData\Roaming\Kodi\addons\plugin.video.catchuptvandmore\addon.py): script successfully run 2023-06-13 14:02:07.550 T:3476 INFO <general>: Python interpreter stopped 2023-06-13 14:02:08.345 T:15372 INFO <general>: initializing python engine. 2023-06-13 14:02:09.604 T:15372 INFO <general>: CPythonInvoker(19, C:\Users\coren\AppData\Roaming\Kodi\addons\plugin.video.catchuptvandmore\addon.py): script successfully run 2023-06-13 14:02:09.677 T:15372 INFO <general>: Python interpreter stopped 2023-06-13 14:02:11.906 T:15620 INFO <general>: initializing python engine. 2023-06-13 14:02:12.894 T:15620 INFO <general>: CPythonInvoker(20, C:\Users\coren\AppData\Roaming\Kodi\addons\plugin.video.catchuptvandmore\addon.py): script successfully run 2023-06-13 14:02:12.902 T:9352 ERROR <general>: Playlist Player: skipping unplayable item: 0, path [plugin://plugin.video.catchuptvandmore/resources/lib/channels/fr/mytf1/get_video_url/?_pickle_=8004955d000000000000007d94288c075f7469746c655f948c1951756f74696469656e206475203132206a75696e2032303233948c08766964656f5f6964948c2464303661666464332d383065392d343239302d383064642d64646366663162303466616494752e] 2023-06-13 14:02:12.966 T:15620 INFO <general>: Python interpreter stopped

AntM90 commented 1 year ago

Même problème sur la version MacOS ici

raydenxxx commented 1 year ago

Je pense que quelque chose a changer chez TF1, ça ne doit plus marcher pour personne

raydenxxx commented 1 year ago

Et pour info les lives ne marchent pas non plus sur MyTF1, j’ai une erreur qui me dit que je suis pas dans le bon pays et pourtant pas de VPN j’ai bien une IP FR

AntM90 commented 1 year ago

Je pense que quelque chose a changer chez TF1, ça ne doit plus marcher pour personne

Aucun doute là dessus je pense

enigmathix commented 1 year ago

Dans le json:

   "media":{
      "id":"13992886",
      "type":"video",
      "error_code":"PERMISSION_DENIED",
      "error_desc":"Permission insuffisante",
...
   "delivery":{
      "code":403,
      "error":"Permission insuffisante",
...

Il semble que l'url pour obtenir ce json a maintenant besoin d'un token.

enigmathix commented 1 year ago

Il semble que TF1 ait ajouté une protection DRM: les videos sont encryptées et il faut obtenir une clé pour les décoder. Le problème est qu'ils peuvent restreindre l'accès aux apps qu'ils veulent pour obtenir cette clé. RIP.

Le json que j'ai mis plus tot montre une erreur de permission avant d'arriver au problème de DRM de la video, donc il y a 2 problèmes: l'un de permission, l'autre de décryption.

sousouille commented 1 year ago

Question : les replays sont accessibles depuis un navigateur. On obtient un jeton à l'aide d'un clientid. Voici un jeton :

eyJhbGciOiJFUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhYlRlc3QiOnt9LCJleHAiOjE2ODY3ODQ4MjcsImZjZmEiOjAsImZ0Ijp7fSwiaWF0IjoxNjg2Njg0MDI3LCJpZGQiOjAsImlzcyI6ImdpZ3lhIiwibHZsIjoxLCJtc2NiIjpmYWxzZSwibm9BdWRpZW5jZSI6ZmFsc2UsIm5vQ3VzdG9taXphdGlvbiI6ZmFsc2UsIm5vUHJvZmlsaW5nIjpmYWxzZSwicGx0Ijoid2ViIiwic3ViIjoiNTg1ZjJmYTM3Mzk5NDQwMmFjNzM0ZjZjNjQzYTNmMmUifQ.2_iHxUNYD0MlZUtIFYCwBhbZpXfwmLOxoEszm-FRJZF788PpeLB0pu6tvhrD2zdcbtskSckvWMPbnANai71kGQ

Quelle est la difficulté rencontrée ?

enigmathix commented 1 year ago

La difficulté est de répliquer ça dans une app autre qu'un navigateur car le jeton expire au bout de 28 heures. Je pensais que c'était 3 heures, mais c'est bien 28, ou alors ils ont mis un 0 en trop.

{
    "token": "eyJhbGciOiJFUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhYlRlc3QiOnt9LCJleHAiOjE2ODY3...",
    "refresh_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE3MDI0NDY4MzEsImlhdCI...",
    "ttl": 100800,
    "right": "BASIC"
}

D'après ce que j'ai pu voir, on peut obtenir le token et le refresh token par https://www.tf1.fr/token/gigya/web en fournissant un uid et une signature. Le refresh token est aussi sauvegardé dans les cookies et a une durée de vie de 6 mois, il sert à générer un nouveau jeton mais il y a des chances qu'il change aussi lors du refresh. Reste à trouver l'algorithme pour l'uid et la signature, qui doit certainement aussi nécessiter une clé.

Même en trouvant une solution à ça, il reste le problème du DRM, qui est à mon avis insoluble sans être partenaire de TF1 (c'est le but du DRM).

sousouille commented 1 year ago

l'uid à l'air d'être fixe par utilisateur : à la limite il suffit de le renseigner en conf. La signature est liée au timestamp ☹: aucune idée d'où elle sort

Zovi3U commented 1 year ago

Salut, pour résumer l'erreur "Permission insuffisante" vient du fait qu'il faut désormais une authentification par token avec le header "Authorization" (Authorization: Bearer {token}) pour accéder à l'API. J'ai fait des tests et j'ai l'impression que ce type de header ne traverse pas facilement un proxy, ce n'est pas gagné pour passer le GEO blocage non plus :/

darodi commented 1 year ago

Même en trouvant une solution à ça, il reste le problème du DRM, qui est à mon avis insoluble sans être partenaire de TF1 (c'est le but du DRM).

Un DRM, c'est simplement donner la clé à quelqu'un pour faire une action sans lui dire comment on lui a donné la clé. (Ex: les clés de chiffrement DVD sont sur le DVD!) Si l'action est faisable via le site, elle est faisable via Kodi/CUTVM. Maintenant, je n'ai pas dit que ça serait facile. token+refresh_token, il y a de grandes chances qu'on soit en oauth v2

enigmathix commented 1 year ago

Vu sur un autre github: si on supprime context=MYTF1 de l'url URL_VIDEO_STREAM dans le code, on évite le DRM et l'autorisation, et on obtient ça dans le json (hls pour moi mais c'est pareil pour dash): "stream-id":"13970670_hls_nodrm_nomax" Notez le "nodrm". Problème: ça semble ne marcher que sur les petites videos. Pour Quotidien par exemple, on peut voir les extraits mais pas toute l'émission. Dans ce cas, on obtient une "erreur de delivery".

Florian-GM commented 1 year ago

Je confirme, plus de live TF1 non plus. Erreur : géo-bloqué

Je n'utilise pas de vpn, aucun changement non plus sur quoi que ça soit.

TF1 a donc changé quelque chose.

darodi commented 1 year ago

Depuis la Belgique, tout semble bloqué, même avec un compte.

edit en acceptant tous les cookies sur le site, la vidéo fonctionne à nouveau

After playing a bit with the page (I even created a free account), the web page seem to require accepting all cookies to access full episodes. If you reject cookies, or in Incognito Mode, the player won't load the video. Originally posted by @pingu1 in https://github.com/ytdl-org/youtube-dl/issues/32299#issuecomment-1589702666

image

Difficile de vous aider pour l’implémentation dans ces conditions :/

Jon01993 commented 1 year ago

Salut, même problème mais les extraits et exclus fonctionnent alors que ce n'était pas le cas il y a deux jours. Merci d'avance pour votre aide!!

Fabien07270 commented 1 year ago

Bonjour Même pb depuis quelques jours pour moi. Cela semble général ? Désinstall/réinstall Kodi, Catch up en version beta mais toujours sans succès. Merci d'avance pour votre aide

ludopotte commented 1 year ago

En attendant la résolution du Problème, installer vStream sur Kodi (Dépôt + Extension ou Beta) au https://github.com/ludopotte/vStream et ensuite aller dans les Rubrique "Rediffusions TV", "Rechercher (TV Replay)" et ensuite tapez votre recherche. Utiliser vStream avec un Débrideur disponible au www.bit.ly/debrideurkodi

Jon01993 commented 1 year ago

Merci pour le tuyau mais je n'ai pas trouvé les replays de TF1 sur cette extension

ludopotte commented 1 year ago

Oui @Jon01993 c'est normal car tu dois savoir le programme que tu veux rechercher.

parer55 commented 1 year ago

I have the same problem. Kudos to anyone who can solve this. J'ai le même problème. Félicitations à celui ou celle qui trouvera la solution.

tcharlat commented 1 year ago

Je pense qu'il faut ajouter tf1 à la liste des chaines requérant un compte, comme m6, nrj, etc. Un exemple de comment on peut voir que le code .py pour m6 fonctionne :

https://github.com/Catch-up-TV-and-More/plugin.video.catchuptvandmore/blob/dev/resources/lib/channels/fr/6play.py#L380

Je pense qu'il faut ajouter la saisie des identifiants / password pour le plugin mytf1, et mettre à jour l'accès au stream une fois la requête signée analysée (obtention token, refresh, etc.)

Désolé de ne pouvoir aider, je suis très loin d'avoir un setup pour faire du dev sur ce plugin, bon courage et kudos aux maintainers 👍

raydenxxx commented 1 year ago

Je pense qu'il faut ajouter tf1 à la liste des chaines requérant un compte, comme m6, nrj, etc. Un exemple de comment on peut voir que le code .py pour m6 fonctionne :

https://github.com/Catch-up-TV-and-More/plugin.video.catchuptvandmore/blob/dev/resources/lib/channels/fr/6play.py#L380

Je pense qu'il faut ajouter la saisie des identifiants / password pour le plugin mytf1, et mettre à jour l'accès au stream une fois la requête signée analysée (obtention token, refresh, etc.)

Désolé de ne pouvoir aider, je suis très loin d'avoir un setup pour faire du dev sur ce plugin, bon courage et kudos aux maintainers 👍

Compte tenu que sur MyTF1.fr quand on est logué on a accès au replay pendant 7 jours je pense que tu as tout à fait raison

enigmathix commented 1 year ago

Bon j'ai réussi à faire marcher la DRM, mais ça va pas vous aider. J'explique: je n'utilise pas ce plugin, mais j'ai écrit une app pour AppleTV. Elle a cessé de fonctionner comme vous tous, alors je me suis plongé dans la DRM qui est FairPlay chez Apple. Il y a en fait 3 étapes:

  1. obtenir un certificat. facile, il est décrit dans le json des videos, c'est https://drm-fair.tf1.fr/certificate.der
  2. trouver l'asset ID. facile aussi, il est dans le json des videos, par exemple 13994087
  3. obtenir la clef de décryption. c'est là où vous aurez du mal

Pour obtenir cette clef, il faut 3 éléments: le certificat, l'assetID, et l'url pour obtenir la clef. Cet url est aussi dans le json. Pour fairplay, c'est https://drm-fair.tf1.fr/acquire?id=13994087... dans ce cas. Et c'est la qu'est le problème: il faut aussi un bout de donnée qui est fourni par l'app ou l'OS: c'est le SPC (server playback context). Pour moi, c'est tvOS qui me le donne. Dans Safari, c'est l'extension EME du webkit qui le donne. Quand on le passe au serveur de TF1, on reçoit en échange une clef de décryption que l'on passe à l'OS pour décrypter la video. De ce que je comprends pour Fairplay au moins, c'est que l'algorithme de génération de ce SPC n'est pas public et la clef pas accessible autrement.

Il me reste encore à résoudre le problème de l'obtention du token. Pour l'instant je le copie manuellement de Safari en allant sur mytf1.fr et il est valable quelques heures.

darodi commented 1 year ago

@enigmathix

Merci pour ces infos. Fairplay est spécifique au monde apple.

Sur mytf1, les autres browsers utilisent du mpeg-dash mpd et widevine drm, pas du fairplay. Exemple: https://mediainfo.tf1.fr/mediainfocombo/13694d96-440a-45dc-86db-90c45c57ac63?pver=5010000&context=MYTF1&topDomain=unknown&platform=web&device=desktop&os=windows&osVersion=10.0&playerVersion=5.10.0&productName=mytf1&productVersion=2.59.1&browser=firefox&browserVersion=114

{
...
"delivery": {
    "code": 200,
    "url": "https://vod-das.cdn-0.diff.tf1.fr/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjaXAiOiIyMTMuMjEzLjIwOS4xNzEiLCJjbWNkIjoiIiwiZXhwIjoxNjg2OTcxNTI1LCJnaWQiOiIxNmQ2OTQ5ZmIzMjU0NTUwODU3ZTg3MTA3MDQ2NGY2ZSIsImlhdCI6MTY4Njk1NzEyNSwiaXNzIjoiZGVsaXZlcnkiLCJtYXhiIjoyODAwMDAwLCJzdGVtIjoiLzIvVVNQLTB4MC8zMi84OC8xMzk5MzI4OC9zc20vMDVlMTBlNzEwNDI2NWZmMDRjYTJlYzJlNGJlMzY3OTMwYWE1OWUzYTBkZTVjZDQzM2YyMWM5NGMzMjU0NTQ4OS5pc20vMTM5OTMyODgubXBkIiwic3ViIjoiMTZkNjk0OWZiMzI1NDU1MDg1N2U4NzEwNzA0NjRmNmUifQ.js10jHKp7LxKpPtr2Mxx4YIq27FSF6N6miDStg89DMs/2/USP-0x0/32/88/13993288/ssm/05e10e7104265ff04ca2ec2e4be367930aa59e3a0de5cd433f21c94c32545489.ism/13993288.mpd",
    "country": "BE",
    "format": "dash",
    "drm": "widevine",
    "drm-server": "https://widevine-proxy-m.prod.p.tf1.fr/proxy?id=13993288&rn=1&ssc=1b281c65-fe77-416b-864d-628017f2e789&si=46549bb293595ba980b40caf12d965c903bb3a3f9ddcbb00e45449edeff56984&e=1686971525",
    "drms": [
      {
        "name": "widevine",
        "url": "https://widevine-proxy-m.prod.p.tf1.fr/proxy?id=13993288&rn=1&ssc=1b281c65-fe77-416b-864d-628017f2e789&si=46549bb293595ba980b40caf12d965c903bb3a3f9ddcbb00e45449edeff56984&e=1686971525"
      },
...
}

C'est ce que nous utilisons dans CUTVM aussi. Inputstream adaptive, le plugin utilisé pour la gestion drm ne gère pas le fairplay https://github.com/xbmc/inputstream.adaptive/wiki#supported-drm

J'ai commencé l'implémentation du login, j'essayerai de continuer ce we

darodi commented 1 year ago

Originally posted by @ludopotte in https://github.com/Catch-up-TV-and-More/plugin.video.catchuptvandmore/issues/1162#issuecomment-1593342069

En attendant la résolution du Problème, installer vStream sur Kodi (Dépôt + Extension ou Beta) au https://github.com/[SCRAMBLED]/vStream et ensuite aller dans les Rubrique "Rediffusions TV", "Rechercher (TV Replay)" et ensuite tapez votre recherche. Utiliser vStream avec un Débrideur disponible au www.bit.ly/[SCRAMBLED]

  1. vStream n'est pas dans la liste officielle des addons Kodi, je vous laisse deviner pourquoi... en effet, ce n'est pas très légal https://kodi.wiki/view/Official:Forum_rules/Banned_add-ons
  2. Le repository habituel de vstream n'est pas celui là Je ne connais pas ludopotte mais, à votre place, je me méfierais avant d'installer un repository sorti de nulle part avec uniquement 3 stars dans github. (qui pointe vers https://github.com/mr[SCRAMBLED]2/mr[SCRAMBLED]2.github.io qui a encore moins de stars) et des débrideurs qui sont certainement des liens sponsorisés

@joaopa00 Je te poke si tu n'avais pas suivi dans la discussion J'imagine que les guidelines ici sont les mêmes que la position officielle de Kodi? scrambler les urls de ce post https://github.com/Catch-up-TV-and-More/plugin.video.catchuptvandmore/issues/1162#issuecomment-1593342069_? https://kodi.wiki/view/Official:Forum_rules/Banned_add-ons

ludopotte commented 1 year ago

Pour Infos, l'Extension vStream que je propose est bien réel sans risque car c'est une version de la Beta Officielle de vStream que je mets à disposition pour les gens qui est validée par l'Equipe de vStream . Pour le dépôt de vStream que je propose, c'est l'officiel. Par rapport au débrideurs, c'est des débrideurs officiels que j'utilise pour Kodi sans risque. Au gens de faire leur choix !

darodi commented 1 year ago

@joaopa00 @ludopotte

En effet, si des gens veulent utiliser des plugins utilisant des flux pirates, c'est leur choix. Si des gens veulent braquer une banque, si des gens veulent rouler à contre sens sur l'autoroute, c'est leur choix :) Les gens peuvent faire n'importe quoi, mais il y a des aspects légaux. Je préviens donc.

Vu ces aspects, c'est plutôt la promotion de ce genre de plugin dans le repo de CUTVM qui me pose problème. J'admets qu'il n'y a pas de " Code of conduct " dans le repository de CUTVM. (à rajouter peut être?) Je laisse donc @joaopa00 décider.

ludopotte commented 1 year ago

Je comprends @darodi mais moi je suis la pour partager, rien de plus. Donc @joaopa00 décider.

darodi commented 1 year ago

Bien sûr, et la marche à suivre ici est floue tant qu'il n'y a pas de "code of conduct". Je propose que nous revenions au sujet du post, faire fonctionner myTF1 sur CUTVM

joaopa00 commented 1 year ago

Bonjour à tous, concernant la politique de CUTVM. Elle a toujours été de ne mettre de que des liens légaux. Les développeius n'ont pas envie de se retrouver au tribunal. Bonne idée de mettre un petit avertissement pour les utilisateurs.

ludopotte commented 1 year ago

Désolé de ne pas avoir suivit le Code of Conduct on CUTVM (Politique de CUTVM) par rapport à mon Partage de Solution, je ne le referais plus, encore désolé.

Arias800 commented 1 year ago

La gestion du DRM de Widevine n'a pas changé. Ce qui manque à Catchup TV c'est la connexion au compte MyTF1 (qui est maintenant obligatoire). J'ai un code fonctionnel sur un projet perso, il ne me "reste plus" qu'à le porter sur Catchup.

enigmathix commented 1 year ago

Code pour obtenir les tokens:

import requests
import json

apiKey = '3_hWgJdARhz_7l1oOp3a8BDLoR9cuWZpUaKG4aqF7gum9_iK3uTZ2VlDBl8ANf8FVk'

tf1Session = requests.Session()

# bootstrap to set cookies
r = tf1Session.get('https://compte.tf1.fr/accounts.webSdkBootstrap?apiKey={}&pageURL=https%3A%2F%2Fwww.tf1.fr%2F&sdk=js_latest&sdkBuild=13987&format=json'.format(apiKey))

formData = {
'loginID': 'USERNAME', #TODO
'password': 'PASSWORD', #TODO
'sessionExpiration': 31536000,
'targetEnv': 'jssdk',
#'include': 'identities-all,data,profile,preferences,',
'include': '',
'includeUserInfo': 'true',
'loginMode': 'standard',
'lang': 'fr',
'APIKey': apiKey,
'sdk': 'js_latest',
'authMode': 'cookie', #TODO or token
'pageURL': 'https://www.tf1.fr/',
'sdkBuild': '13987',
'format': 'json',
}

# get login info
r = tf1Session.post('https://compte.tf1.fr/accounts.login', data=formData)
if r.status_code == 200:
    js = json.loads(r.content)

formData = {
'consent_ids': [ "1", "2", "3", "4", "10001", "10003", "10005", "10007", "10013", "10015", "10017", "10019", "10009", "10011", "13002", "13001", "10004", "10014", "10016", "10018", "10020", "10010", "10012", "10006", "10008"],
'signature': js['userInfo']['UIDSignature'],
'timestamp': int(js['userInfo']['signatureTimestamp']),
'uid': js['userInfo']['UID'],
}

headers = {
'Content-Type': 'application/json',
}

r = tf1Session.post('https://www.tf1.fr/token/gigya/web', json=formData, headers=headers)

if r.status_code == 200:
    js = json.loads(r.content)
    print(js)

Le token est celui à passer dans le header "Autorization: Bearer TOKEN" pour obtenir la liste des videos. Le refresh_token peut être utilisé pour obtenir un nouveau token, mais si on fait le login à chaque fois comme ici, il n'est pas utile.

darodi commented 1 year ago

je confirme, j'étais justement en train de tester tout ça :)

Florian-GM commented 1 year ago

Une mise à jour de prévue pour catchup ?

darodi commented 1 year ago

J'ai fait une pull request pour les replays. Je ne peux pas tester pour les lives avec le blocage géographique en Belgique, mais la même technique devrait fonctionner (réutiliser la méthode resources.lib.channels.fr.mytf1.get_token)

joaopa00 commented 1 year ago

J'ai testé la PR avec l'épisode de Mentalist sur TMC. Nom de l'épisode "le tueur le plus fort". Malheureusement, cela ne fonctionne pas. De même pour d'autres vidéos. Le direct fonctionne quant à lui.

joaopa00 commented 1 year ago

Bon j'ai rien dit. Ca se lance. SUr linux, ca freeze. Problème de inputstream adaptive certainement.

darodi commented 1 year ago

j'ai dev sur windows. Je vais essayer avec mon raspberry pi

darodi commented 1 year ago

Erreur aussi de mon côté sous rpi:

2023-06-18 19:39:52.285 T:1525    error <general>: AddOnLog: inputstream.adaptive: ParseManifest: Failed to parse the manifest file
2023-06-18 19:39:52.286 T:1525    error <general>: AddOnLog: inputstream.adaptive: Could not open / parse manifest (https://vod-hls.cdn-0.diff.tf1.fr/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjaXAiOiIyMTMuMjEzLjIwOS4xNzEiLCJjbWNkIjoiIiwiZXhwIjoxNjg3MTI0Mzg0LCJnaWQiOiIxNmQ2OTQ5ZmIzMjU0NTUwODU3ZTg3MTA3MDQ2NGY2ZSIsImlhdCI6MTY4NzEwOTk4NCwiaXNzIjoiZGVsaXZlcnkiLCJtYXhiIjoyODAwMDAwLCJzdGVtIjoiLzIvVVNQLTB4MC81OC83My8xMzkzNTg3My9zc20vYzc3YmZjZGVlMjU1NTM4YTE1NzZiZTI2NDhlOTVmY2RhYjY3M2IwMGVlNTU0MDFhMGQ4OTcyZmQ5ZWRlNGQyYS5pc20vMTM5MzU4NzMubTN1OCIsInN1YiI6IjE2ZDY5NDlmYjMyNTQ1NTA4NTdlODcxMDcwNDY0ZjZlIn0.9NU3Sdga7aXwzdQsuKOGkBnIuTPiwu1Zga9kBZtYyMY/2/USP-0x0/58/73/13935873/ssm/c77bfcdee255538a1576be2648e95fcdab673b00ee55401a0d8972fd9ede4d2a.ism/13935873.m3u8)

edit: bizarre... le drm est en fairplay au lieu de widevine

darodi commented 1 year ago

OK je pense avoir trouvé quand le web_utils.get_random_ua() renvoie

{'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14',
...}

ça passe en fairplay on dirait

darodi commented 1 year ago

@joaopa00 et ça marche sur mon rpi 😃 j'ai pushé

sousouille commented 1 year ago

Question : je suis sur le canal beta sur Android TV, comment installer d'ores et déjà la dernière #1164 : j'ai tenté de forcer la màj mais rien n'apparait : il faut attendre un build ?

raydenxxx commented 1 year ago

Question : je suis sur le canal beta sur Android TV, comment installer d'ores et déjà la dernière #1164 : j'ai tenté de forcer la màj mais rien n'apparait : il faut attendre un build ?

Si tu ne veux pas attendre que le code soit poussé dans la bêta il faut l’installer à la main.

5BDF43B6-E529-4742-97C0-283D17135A81

raydenxxx commented 1 year ago

Je viens de tester ça marche, merci à tous! ❤️

enigmathix commented 1 year ago

Une version simplifiée du code car il n'y a pas besoin du bootstrap si on restreint les paramètres du login:

import requests
import json

apiKey = '3_hWgJdARhz_7l1oOp3a8BDLoR9cuWZpUaKG4aqF7gum9_iK3uTZ2VlDBl8ANf8FVk'

formData = {
'loginID': 'USERNAME', #TODO
'password': 'PASSWORD', #TODO
'APIKey': apiKey,
}

tf1Session = requests.Session()

# get login info
r = tf1Session.post('https://compte.tf1.fr/accounts.login', data=formData)
if r.status_code == 200:
    js = json.loads(r.content)

    formData = {
    'consent_ids': [ "1", "2", "3", "4", "10001", "10003", "10005", "10007", "10013", "10015", "10017", "10019", "10009", "10011", "13002", "13001", "10004", "10014", "10016", "10018", "10020", "10010", "10012", "10006", "10008"],
    'signature': js['UIDSignature'],
    'timestamp': int(js['signatureTimestamp']),
    'uid': js['UID'],
    }

    # get tokens
    r = tf1Session.post('https://www.tf1.fr/token/gigya/web', json=formData)

    if r.status_code == 200:
        js = json.loads(r.content)
        print(js)
coolben54 commented 1 year ago

Merci beaucoup, le replay de TF1 refonctionne sur mon Raspberry Pi Par contre, la liste des épisodes disponibles est maintenant réduite à 1 semaine comme c'est le cas sur l'interface web de MyTF1. Et je me demandais qu'est ce qui permettait avant d'avoir accès avant à une liste plus large ? Par exemple, on avait la possibilité de voir tous les épisodes de Koh Lanta jusqu'à 1 semaine après que le dernier épisode de la saison passe à la télé.

raydenxxx commented 1 year ago

Merci beaucoup, le replay de TF1 refonctionne sur mon Raspberry Pi Par contre, la liste des épisodes disponibles est maintenant réduite à 1 semaine comme c'est le cas sur l'interface web de MyTF1. Et je me demandais qu'est ce qui permettait avant d'avoir accès avant à une liste plus large ? Par exemple, on avait la possibilité de voir tous les épisodes de Koh Lanta jusqu'à 1 semaine après que le dernier épisode de la saison passe à la télé.

TF1 a clairement changé son API et maintenant on est obligés d’être logués pour consulter leurs replays. Sur un compte standard les replays sont dispos 7 jours. Sur un compte Max (payant) on peut avoir une durée plus longue.

Fabien07270 commented 1 year ago

Bonjour, ça fonctionne aussi très bien pour moi sur android tv en installant #1114 à la main et en renseignant le compte mytf1 dans les paramètres. Merci à tous pour le travail et bonne journée.