[TIPS] Générer une liste complete des jeux
-
@manatlan
pourquoi pas voir avec @DjLeChuck si il serait possible d'ajouter cette fonctionnalité dans le recalbox Manager
https://forum.recalbox.com/topic/3768/wip-recalbox-managerça pourrait peut être intéressant
-
@manatlan en fait je demandai car je me mets à Python en ce moment et j'ai deux trois idées de scripts avec les fichiers xml de recalbox
-
@acris Quoi quoi on m'appelle ? \o/
Mettre l'export CSV ? Ça peut être sympa en effet !@manatlan pour que ton script soit encore un peu plus simple à utiliser, tu pourrais mettre le chemin vers les ROMs en arguments et récupérer sa valeur via
sys.argv
(https://www.tutorialspoint.com/python/python_command_line_arguments.htm) -
@DjLeChuck oui tout à fait
j'ajouterai pour ajouter la possibilité de créer une liste en utilisant gamelist.xml pour extraire les jeux de 2 joueurs, 4 joueurs et par type (plateforme, shoot em up) etc.. pourraient être intéressant -
@acris À rajouter sur la TODO list: https://github.com/DjLeChuck/recalbox-manager/issues ^^
-
@DjLeChuck
voila fait : https://github.com/DjLeChuck/recalbox-manager/issues/40
désolé en français car encore bien réveillé pour de l'anglais. -
@acris Oh je ne demande pas à ce que mes tickets soient en anglais de toute façon, ils peuvent aussi être en français !
-
@voljega a ce moment là, pas la peine d'utiliser LXML, python est installée avec d'autres libs natives pour pa**er la dom xml ...
moi, j'ai utilisé lxml, car c'est la plus rapide, et celle que j'utilise tout le temps -
@DjLeChuck ... j'ai un bon niveau en python, je connais tout ça
je ne l'ai pas mis en arg, car pour un utilisateur donné, il n'y a qu'un seul path (aka ça change pas tout le tempsSinon, si le "manager" est en python, je veux bien mettre les mains dedans, avec plaisir. J'ai 20ans de python, de web/http/js et j'en passe
-
@acris le hic, c'est que les scrapping sont rarement bons ... le genre, ça passe encore (mais il y a plein de genre pour un même genre (je me comprends ;-)) ... mais le nb de joueurs est très rarement juste ;-(
Mais dans l'absolu, c'est clair que ce serait géant ...voilà un exemple de ce que je genere :
http://in-the.appspot.com/recalbox/ -
On utilise screenscraper dont la base de donnée est relativement nouvelle, je pense que les informations sont correctes.
autant faire un truc complet que partiel.@manatlan pas mal ton exemple, tout ne fonctionne pas mais c'est super intéressant sur des romsets complets no-intro ça doit bien donnée.
manquerait plus de pouvoir créer un dat pour faire le tri avec clrmamepro comme il le fait avec les roms parent et clones ahaha -
@manatlan ben je me mets tout juste au python donc bon là j'ai un exemple, c'est aussi bien pour commencer... on peut écrire aussi du xml avec lxml ?
sinon des exemples d'autres libs ou fonctions faciles à utiliser ?
-
@voljega Oui, avec lxml tu peux sans soucis, c'est même conseillé. Cependant, même les libs internes de python le peuvent (elles sont juste un poil plus lentes (aucune n'est plus rapide que lxml))
Voilà mon script qui génère un fichier "liste.js" :
#!/usr/bin/python # -*- coding: utf-8 -*- import os,glob,collections,json from lxml.etree import pa**e Game = collections.namedtuple('Game', 'console name genre date image path') def listgames(p,opt="*"): def get(i,e): ll=i.xpath(e) return ll[0].text if ll else None ll=[] for f in sorted(glob.glob( os.path.join(p,opt,"gamelist.xml") )): try: for i in pa**e(f).xpath("//game"): fpath=os.path.dirname(f) console=os.path.basename(fpath) name,genre,date,image=get(i,"name"),get(i,"genre"),get(i,"releasedate"),get(i,"image") path = os.path.realpath(os.path.join(fpath,get(i,"path"))) if get(i,"hidden")=="true": continue # zap hidden if genre and genre.strip().lower().startswith("bios"): continue # zap bios file if image: image = os.path.join( fpath, image ) # create realpath to image if date: date=date.strip()[:4] # keep just the year ll.append( Game(console,name,genre,date,image,path) ) except Exception as e: print "Fichier XML invalide:",f,e return ll def genJS(ll): ll=[{"name":i.name,"console":i.console,"genre":i.genre or "NO GENRE","year":i.date or "NO YEAR","image":i.image} for i in ll] with open('liste.js', 'w') as fid: fid.write("var liste="); json.dump(ll, fid) if __name__ == "__main__": ll=listgames("/media/recalbox/roms") # <--- just edit here !!! print( len(ll) ) genJS(ll)
Ce fichier est chargé par https://in-the.appspot.com/recalbox/index.html ...
(du coup, si vous voulez le faire chez vous, suffit de recupérer cet "index.html" (show source, ou le télécharger, et de mettre le liste.js généré par le script python)C'est juste un "index.html" de base (y a juste le css minimum, mais on peut trier les colonnes
-
Bonjour tous ! Je trouve la fonction hyper intéressante, y a t-il eu des développements sur cette idée ? Elle semble être tombée aux oubliettes car ce sujet a 3 ans et la fonctionnalité n'est pas apparue depuis sur recalbox manager...
Je n'ai pas réussi à tirer quelque chose du script de @manatlan (merci au passage du partage, je suis assez mauvais en programmation mais je ne lâche pas l'affaire !)
J'ai utilisé le premier script, celui qui sort un csv.
- Install de Python 3.8.1 et librairie lxml 4.4.2
- J'édite le script pour y inclure vers le répertoire des roms que j'ai copié sur mon bureau "E:\Bureau\roms"
- Je lance le script
- Ca me sort un csv mais il est vide...
Si vous avez des pistes pour faire fonctionner le script je suis preneur, ou si depuis quelque chose d'autre a été developpé encore mieux, merci d'avance !