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

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

Open
w1llpeterson opened this issue Jan 12, 2023 · 11 comments
Open

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

w1llpeterson opened this issue Jan 12, 2023 · 11 comments

Comments

@w1llpeterson
Copy link

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
Copy link
Contributor

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

@joaopa00
Copy link
Contributor

joaopa00 commented Apr 5, 2023

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
Copy link
Contributor

darodi commented Apr 7, 2023

@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
Copy link
Contributor

joaopa00 commented Apr 8, 2023

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
Copy link
Contributor

darodi commented Apr 8, 2023

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

ça complique les choses.

@darodi
Copy link
Contributor

darodi commented Apr 8, 2023

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
Copy link
Contributor

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
Copy link
Contributor

joaopa00 commented Apr 15, 2023

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
Copy link
Contributor

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
Copy link
Contributor

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

@joaopa00
Copy link
Contributor

joaopa00 commented Apr 15, 2023

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.

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

4 participants