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
281 stars 89 forks source link

replays de l'équipe bloqués au 24 janvier 2022 #1048

Open w1llpeterson opened 1 year ago

w1llpeterson commented 1 year ago

Les replays de l'équipe restent bloqués au 24 janvier 2022 (constaté sur kodi stable et beta, avec catchup stable et beta à jour).

joaopa00 commented 1 year ago

Je confirme. Et ce ne sera pas facile à régler....

joaopa00 commented 1 year ago

Les données des replays sont sus forme d'un dictionnaire javascript dont les keys ne sont pas entourés de guillements ou apostrophes. Exemple: {football: "match du 01:01:2023"}

Si quelqu'un sait comment transformer ça en python en utilsant que ce qui est disponible dans Kodi, ça aiderait.

darodi commented 1 year ago

@joaopa00

ce n'est pas du json valide. Il faudra jouer avec des regex

    test_not_json = "{ custType: \"Active\", custAccount: \"Premium\" }"
    test_json = re.sub(r'(\"(.*?)\"|(\w+))(\s*:\s*(\".*?\"|.))',  r'"\2\3"\4', test_not_json)

---> test_json '{ "custType": "Active", "custAccount": "Premium" }'

joaopa00 commented 1 year ago

Merci pour ton aide. Mais ton script échoue à donner un json valide pour le dictionnaire attaché dict.txt

On trouve ce dictionnaire à l'URL https://www.lequipe.fr/tv/ en cherchant la chaine homeObject

darodi commented 1 year ago

non seulement les clés n'ont pas de guillemets mais les valeurs aussi ne correspondent à rien. image

ça complique les choses.

darodi commented 1 year ago

ok je n'avais pas regardé le html, ce sont des objets js

https://stackoverflow.com/questions/24027589/how-to-convert-raw-javascript-object-to-a-dictionary

je pense qu'on n'aura pas le choix de rajouter une nouvelle lib

Arias800 commented 1 year ago

J'ai trouvé un code, que j'ai modifié, qui permet la substitution des variables dans le json.

```############################################################################################################
# Base decode code from : https://github.com/zhouyusen-github/xueersi_spider/blob/master/cut_response_to_data/cut_response_to_data_all.py
course_content = re.search('<script>window.__NUXT__=\((.*?)\);</script>', resp).group(1)

# 获取变量部分

function_variables = re.findall('function\((.*?)\)', course_content)
# 获取变量字母
variable_characters = re.findall('(.*?),', function_variables[0])
# 获取变量实际值
function_facts = re.findall('}\((.*?)\)\)', course_content)
variable_facts = re.findall('(.*?),', function_facts[0])
variable_facts = [i.replace('\"', '') for i in variable_facts]#去除双引号
characters_to_facts = dict(zip(variable_characters, variable_facts))

# 变量替换为实际值,实际证明替换后双引号也会一并进入字段,因为findall时双引号已是字符串的一部分
for i in variable_characters:
    # 这里好多例外要处理真的,而且还有性能问题,用接口会更舒服,
    course_content = course_content.replace((":" + i + ","), (":" + characters_to_facts[i] + ","))
    course_content = course_content.replace((":" + i + "}"), (":" + characters_to_facts[i] + "}"))
    course_content = course_content.replace((":" + i + ";"), (":" + characters_to_facts[i] + ";"))
    course_content = course_content.replace(("=" + i + ","), ("=" + characters_to_facts[i] + ","))
    course_content = course_content.replace(("=" + i + "}"), ("=" + characters_to_facts[i] + "}"))
    course_content = course_content.replace(("=" + i + ";"), ("=" + characters_to_facts[i] + ";"))

# Cleanup useless things
course_content = re.sub("function\((.*?)\).+?fetch:", "", course_content)
course_content = re.sub("}\((.*?)\)\)", "", course_content)

# pretty print the data:
xbmc.log(json.dumps(course_content, indent=4), level=xbmc.LOGINFO)
############################################################################################################```
joaopa00 commented 1 year ago

J'ai du raté quelque chose puisqu'avec ton code, j'obtiens une erreur: line 17, in variable_facts = re.findall('(.*?),', function_facts[0]) IndexError: list index out of range


import requests
import re
import json

resp = requests.get('https://www.lequipe.fr/tv')

course_content = re.search('<script>window.__NUXT__=\((.*?)\);</script>', resp.text).group(1)

# 获取变量部分

function_variables = re.findall('function\((.*?)\)', course_content)
# 获取变量字母
variable_characters = re.findall('(.*?),', function_variables[0])
# 获取变量实际值
function_facts = re.findall('}\((.*?)\)\)', course_content)
variable_facts = re.findall('(.*?),', function_facts[0])
variable_facts = [i.replace('\"', '') for i in variable_facts]#去除双引号
characters_to_facts = dict(zip(variable_characters, variable_facts))

# 变量替换为实际值,实际证明替换后双引号也会一并进入字段,因为findall时双引号已是字符串的一部分
for i in variable_characters:
    # 这里好多例外要处理真的,而且还有性能问题,用接口会更舒服,
    course_content = course_content.replace((":" + i + ","), (":" + characters_to_facts[i] + ","))
    course_content = course_content.replace((":" + i + "}"), (":" + characters_to_facts[i] + "}"))
    course_content = course_content.replace((":" + i + ";"), (":" + characters_to_facts[i] + ";"))
    course_content = course_content.replace(("=" + i + ","), ("=" + characters_to_facts[i] + ","))
    course_content = course_content.replace(("=" + i + "}"), ("=" + characters_to_facts[i] + "}"))
    course_content = course_content.replace(("=" + i + ";"), ("=" + characters_to_facts[i] + ";"))

# Cleanup useless things
course_content = re.sub("function\((.*?)\).+?fetch:", "", course_content)
course_content = re.sub("}\((.*?)\)\)", "", course_content)

print(json.dumps(course_content))```
Arias800 commented 1 year ago

J'avais fait une petite erreur dans une ligne :

import re
import json
import requests

resp = requests.get('https://www.lequipe.fr/tv')

course_content = re.search('<script>window.__NUXT__=\((.*?);</script>', resp.text).group(1)

# 获取变量部分

function_variables = re.findall('function\((.*?)\)', course_content)
# 获取变量字母
variable_characters = re.findall('(.*?),', function_variables[0])
# 获取变量实际值
function_facts = re.findall('}\((.*?)\)\)', course_content)
variable_facts = re.findall('(.*?),', function_facts[0])
variable_facts = [i.replace('\"', '') for i in variable_facts]#去除双引号
characters_to_facts = dict(zip(variable_characters, variable_facts))

# 变量替换为实际值,实际证明替换后双引号也会一并进入字段,因为findall时双引号已是字符串的一部分
for i in variable_characters:
    # 这里好多例外要处理真的,而且还有性能问题,用接口会更舒服,
    course_content = course_content.replace((":" + i + ","), (":" + characters_to_facts[i] + ","))
    course_content = course_content.replace((":" + i + "}"), (":" + characters_to_facts[i] + "}"))
    course_content = course_content.replace((":" + i + ";"), (":" + characters_to_facts[i] + ";"))
    course_content = course_content.replace(("=" + i + ","), ("=" + characters_to_facts[i] + ","))
    course_content = course_content.replace(("=" + i + "}"), ("=" + characters_to_facts[i] + "}"))
    course_content = course_content.replace(("=" + i + ";"), ("=" + characters_to_facts[i] + ";"))

# Cleanup useless things
course_content = re.sub("function\((.*?)\).+?fetch:", "", course_content)
course_content = re.sub("}\((.*?)\)\)", "", course_content)

print(json.dumps(course_content))

Maintenant ça devrait marcher (je mets qu'un extrait, car le json est ultra-long) : image

Arias800 commented 1 year ago

Par contre, il y a tout un travail à faire dans le formatage du json.

joaopa00 commented 1 year ago

J'ai essayé le script de formattage json sur ton scrpt. Cela ne fonctionne pas. J'ai soumis à XBMC une PR pour que chompjs fasse partie des modules de Kodi.