Open w1llpeterson opened 1 year ago
Je confirme. Et ce ne sera pas facile à régler....
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.
@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" }'
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
non seulement les clés n'ont pas de guillemets mais les valeurs aussi ne correspondent à rien.
ça complique les choses.
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
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)
############################################################################################################```
J'ai du raté quelque chose puisqu'avec ton code, j'obtiens une erreur:
line 17, in
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))```
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) :
Par contre, il y a tout un travail à faire dans le formatage du json.
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.
Les replays de l'équipe restent bloqués au 24 janvier 2022 (constaté sur kodi stable et beta, avec catchup stable et beta à jour).