Pages: 1 2 [Toutes]   Bas de page
  Imprimer  
Auteur Fil de discussion: [EN COURS] Code Snippet (exemples)  (Lu 19350 fois)
0 Membres et 1 Invité sur ce fil de discussion.
Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« le: 06 Novembre 2008 16:15:46 »

Bonjour les développeurs,

Je démarres ce fil de discutions afin d'essayer de regrouper ici un maximum d'exemple de code plus communément appelé code Snippet dans le monde des développeurs.

Ce message de têtes servira de sommaire avec un lien sur des Code Snippets, soit dans ce fil, soit dans un fil séparé.

Merci de soumettre tous les Code Snippets que vous jugerez utiles en précisant a quoi le Snippet s'applique:

- généralités
- spécifique aux scripts
- spécifique aux plugins





 arrows_right Généralités:


 arrows_right Scripts:


 arrows_right Plugins:

 arrows_right Autres sources de code-snippet indispensables:

« Dernière édition: 13 Mars 2011 21:37:52 par Temhil, Raison: Ajout SetResolveUrl » Journalisée

Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #1 le: 06 Novembre 2008 16:31:29 »
Haut de page

On commence avec les plugins par un exemple donne par FrostBox (merci a lui) dans ce FIL
Il nous montre comment grandement améliorer la presentation d'un plugin dans XBMC en ultisant l'affichage d'information sur le plugin mais aussi le fanart en image de fond (cf. image ci-dessous)




 arrows_right Ajout de la fonction setPluginCategory(), visible en haut à droite (image ci-dessous):

Code
(Python):
import sys
import xbmcplugin
xbmcplugin.setPluginCategory( handle=int( sys.argv[ 1 ] ), category="LA CATÉGORIE DU PLUGIN" )


 arrows_right Support du fanart dans un plugin(cf. image ci-dessous):

Code
(Python):
import sys
import xbmcplugin
#la couleur doit etre en (AARRGGBB), mais peut etre vide
path_img = "mon image"
fanart_color1 = ""
fanart_color2 = ""
fanart_color3 = ""
xbmcplugin.setPluginFanart( handle=int( sys.argv[ 1 ] ), image=path_img, color1=fanart_color1, color2=fanart_color2, color3=fanart_color3 )
 

Pour plus regardez le module xbmcplugin grin

Note: Le skin utilisé doit avoir ce support, aussi ajoutez un try: except: au cas ou


Et voici le résultat:
http://img88.imageshack.us/img88/650/agcsearchoz1.jpg
Code Snippet (exemples)



[edit]
  • Ajout import sys manquant
  • Correction de fautes
« Dernière édition: 08 Décembre 2008 09:22:08 par Shaitan » Journalisée

Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #2 le: 06 Novembre 2008 16:44:33 »
Haut de page

 arrows_right Récupérer le chemin courant d'un script ou plugin


Maintenant voyons comment Récupérer le chemin courant d'un script ou plugin:

Code
(Python):
import os
 
############################################################################
# Get current working directory and update internal vars with it  
############################################################################
 
# Set paths
ROOTDIR = os.getcwd().replace( ";", "" ) # Create a path with valid format
 
IMAGEDIR    = os.path.join(ROOTDIR, "images")
CACHEDIR    = os.path.join(ROOTDIR, "cache")
DOWNLOADDIR = os.path.join(ROOTDIR, "download")
LIBDIR      = os.path.join(ROOTDIR, "lib")
 

Note: Notez le replace( ";", "" ) dans la 1ere ligne, celui permet d'avoir un script compatible avec XBMC pre et post Beta1 car os.getcwd() a été modifié pour la Beta1


 arrows_right Gérer les chemins dans XBMC
Afin de vous assurer d'écrire un script qui sera compatible sur toutes les platformes (Windows, XBOX, Linux, Mac), il est preferable d'utliser fonction os.path.join afin de creer une chemins:
Code
(Python):
os.remove(os.path.join(DOWNLOADDIR, filename))

Eviter les notations avec une combinaison de '+' et des separateurs '/' ou '\\' selon l'OS.
Toutefois si vous n'avez pas le choix, utilisez os.sep comme séparateur.
« Dernière édition: 07 Novembre 2008 06:28:33 par Temhil » Journalisée

Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #3 le: 06 Novembre 2008 17:00:57 »
Haut de page

 arrows_right Télécharger des images (ou un fichier) via HTTP

Voici une fonction vous permettant de recuperer des images (ou un fichier quelconque)
Code
(Python):
import urllib
import os.path
 
def downloadJPG(source, destination):
   """
   Source MyCine (thanks!)
   Download IF NECESSARY a URL 'source' (string) to a URL 'target' (string)
   Source is downloaded only if target doesn't already exist
   """

   if os.path.exists(destination):
       pass
   else:
       try:
           #print("downloadJPG destination doesn't exist, try to retrieve")
           loc = urllib.URLopener()
           loc.retrieve(source, destination)
       except Exception, e:
           print("Exception while source retrieving")
           print(e)
           print (str(sys.exc_info()[0]))
           traceback.print_exc()
           pass
 

Note:
  • Vous noterez dans cette implémentation que si le fichier est déjà present localement, il n'est pas téléchargé
  • Bien que cette fonction vous permette de recuperer un fichier de taille quelconque, pour un fichier de taille plus grande il est preferable d'utiliser une implémentation avec une barre de progression.
Journalisée

Made in Québec
Fait partie du Décor
*
Alcoolémie: 31
Messages: 4707
Hors ligne Hors ligne
Sexe: Homme
On est venu, on l'a vu et il l'a eu dans le cul !
WWW
« Répondre #4 le: 07 Novembre 2008 18:50:32 »
Haut de page

Salut bonne idée ça  smiley

Mais faudrais pas reproduire mes fautes ou en mettre de plus  niark niark

- regardex == regardez

- et j'ai rajouter un import sys dans mon exemple pour alex désoler avait oublié  embarrassed

Code
(Python):
#Code générale pour imprimer
 
print "ok ok je sors"
 

 sweat
joke inside
frost
« Dernière édition: 08 Novembre 2008 02:09:23 par FrostBox » Journalisée

Par Osiris et par Apis regardez moi, regardez moi bien...
Par Osiris et par Apis vous êtes maintenant des... des quoi au juste ?
Des addoniens ! Vous aimez bien les add-ons vous les Passionnés.
Allez on recommence.
Par Osiris et par Apis vous êtes maintenant des addoniens... oui... des addoniens...
Silennnce, concentrez vous.




Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #5 le: 07 Novembre 2008 19:14:36 »
Haut de page

En effet j'avais copie/coller  niark niark, je viens de corriger cela dans le post. merci
Journalisée

Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #6 le: 08 Novembre 2008 07:57:16 »
Haut de page

 arrows_right Utiliser la BDD de xbmc dans un script

Voici un exemple d'acces a la BD de XBMC et d'une requete SQL sur cette BD.
Pour ce faire on utilise le module sqlite3

Merci a Seb pour cet exemple, vous trouverez plus d'informations dans le topic d'origine: Utiliser la BDD de xbmc dans un script
Code
(Python):
import os
home = os.getcwd().replace(';','')
lib = os.path.join(home, 'sqlite3')
sys.path.append(lib)
import sqlite3
 
conn = sqlite3.connect('/home/seb/.xbmc/userdata/Database/MyVideos34.db')
c = conn.cursor()
 
c.execute('select * from movie')
for champ in c:
   print champ


« Dernière édition: 08 Novembre 2008 09:00:14 par Temhil » Journalisée

Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #7 le: 08 Novembre 2008 08:53:46 »
Haut de page

 arrows_right Switch case en Python
Voici deux différentes méthodes permettant de recréer un 'switch case' en Python qui n'est pas supporté nativement par celui-ci


 arrows_right 1ere méthode: lambdas

Source: Simon Willison’s Weblog 

Cette solution est proposée par Simon Willison. Son idée est d'utiliser les lambdas pour recréer les mécanismes du 'switch case' sous la forme:
Code
(Python):
{'option1': function1,
'option2': function2,
'option3': function3,
'option4': function4}[value]()

Ainsi le code PHP suivant:
Code
(PHP):
switch ($value) {
   case 'a':
       $result = $x * 5;
       break;
   case 'b':
       $result = $x + 7;
       break;
   case 'c':
       $result = $x - 2;
       break;
}

Serait traduit en python avec sa méthode comme cela:
Code
(Python):
result = {
 'a': lambda x: x * 5,
 'b': lambda x: x + 7,
 'c': lambda x: x - 2
}[value](x)



 arrows_right 2eme méthode: Orienté Objet et dictionnaires

Source: Well House

Ici on exploite les mecanisme Objets de Python associés aux dictionnaires:
Code
(Python):
""" There is no switch or case in Python ... because you can
do better by using its OO capabilities and a dictionary. """

 
def doblue (): print "The sea is blue"
def dogreen (): print "Grass is green"
def doyellow (): print "Sand is yellow"
 
def redflag ():
  print "Red is the colour of fire"
  print "do NOT play with fire"
 
def errhandler ():
  print "Your input has not been recognised"
 
# set up a dictionary of actions
 
takeaction = {
   "blue": doblue,
   "green": dogreen,
   "yellow": doyellow,
   "red": redflag}
 
colour = raw_input("Please enter red blue green or yellow ")
takeaction.get(colour,errhandler)()
 
# Uses the get method to allow us to specify a default


« Dernière édition: 08 Novembre 2008 08:59:40 par Temhil » Journalisée

Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #8 le: 08 Novembre 2008 10:11:00 »
Haut de page

 arrows_right Plugins pour lancer un script

Merci a Alexsolex pour ce snippet. Vous retrouverez le message original ICI

Résumé:
Pour lancer un script il faut vous rendre en section script. Mais pour lancer un plugin, il faut vous rendre dans la section multimédia concernée par le plugin en question (par exemple fichier/videos/images/musique)
C'est là que ca devient intéressant car un des atouts majeurs pour le plugin est de pouvoir le lancer depuis la section de votre choix. Mais ensuite.... Rien ne vous interdit de lancer un script par la méthode des plugins !!
Ainsi, et en guise d'exemple, si vous avez un script qui est en rapport avec les videos... disons installeur-passion, il vous suffit de faire un plugin comme suit :
Code
(Python):
import xbmc
 
xbmc.executescript('q:\\scripts\\Installeur-Passion\\default.py')
 
Le résultat ? après des comportements bizarres du genre "impossible de se connecter au serveur" proposés par le système xbmc de plugin je pense, le script démarre et fonctionne, sans aucune autre modification de votre part !
Journalisée

Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #9 le: 09 Novembre 2008 06:56:15 »
Haut de page

 arrows_right Utiliser la lib shutil pour copier un dossier

Merci a Alexsolex pour ce snippet. Vous retrouverez le message original ICI


Code
(Python):
import shutil
source="q:\skins\monskin\"
destination = "
q:\skins\monskin_bak\
try:
   shutil.copytree(source, destination)
except:
   print "oups ! problème !!"
 

Lien vers la documentation shutil: http://pydoc.org/2.4.1/shutil.html
Journalisée

Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #10 le: 09 Novembre 2008 07:04:07 »
Haut de page

 arrows_right Les dictionnaires

Un petit cours sur les dictionnaires par Alexsolex. Vous retrouverez le message original ICI



Petite précision, les dictionnaires ne sont utiles que si on besoin de les référencer par un 'pointeur'.
Ils sont très pratiques dès lors qu'on a plusieurs infos à mémoriser pour une entrée
Imaginons un carnet d'adresse qui référence pour un utilisateur son téléphone et sa ville :
Code
(Python):
coordonnees= {
                "alexsolex" : ("0123456","paris") ,
                "toto" : ("0234198548","Babeloued") ,
                "bernard" : ("8765321","moscou")
                  }
Ca veut dire que l'élément "alexsolex" de mon carnet est égal à un tuple ("0123456","paris").

Code
(Python):
print coordonnees["alexsolex"]
>>> ("0123456","paris")
tel,ville = coordonnees["alexsolex"]
print tel
>>> 0123456
print ville
>>> paris

mais le tuple peut être lu par un pointeur de liste numérique :
Code
(Python):
user = coordonnees["alexsolex"]
print user[0]
>>> 0123456
print user[1]
>>> paris
 
ou encore

Code
(Python):
print coordonnees["alexsolex"][0]
>>> 0123456
print coordonnees["alexsolex"][1]
>>> paris

Si on veut ordonner les entrées de la liste pour un affichage par exemple :
Code
(Python):
listenoms = coordonnees.keys() #on prend les clés du dictionnaire (les noms)
listenoms.sort() #on trie sur place la liste (elle se réaffecte d'elle même avec les entrées triées)
for nom in listenoms:
   print "%s\n\ttél: %s\n\tville: %s" % (nom, coordonnees[nom][0], coordonnees[nom][1])
ca donne :
Code:
alexsolex
    tél: 0123456
    ville: paris
bernard
    tél: 8765321
    ville: moscou
toto
    tél: 0234198548
    ville: Babeloued

ATTENTION, un dictionnaire ne respecte pas l'ordre dans lequel tu le remplis.
Par exemple si tu rentres A, B puis C dans le dictionnaire dans t ordre, il se peut que tu obtiennes les clés dans un ordre tout différent (B, C et A par exemple) C'est pour cela qu'il faut souvent passer par les clés lorsqu'on veut les afficher ou les utiliser

Les listes (comme les tuples) préservent l'ordre dans lequel elles ont été alimentées. Ainsi si tu mets C, B puis A dans ta liste, tu auras toujours les éléments dans le même ordre : C, B et A

Les listes sont pointables par un entier :
Code
(Python):
maliste = [ "bonjour" , 123, 45.0045, mafonction]
print maliste[1]
>>> 123

Vous remarquerez au passage une intéressante propriété des listes (et des tuples et des dictionnaires aussi d'ailleurs), vous y mettez ce que vous voulez dedans !!! Vous pouvez ainsi ainsi mettre des listes dans des dictionnaires, des tuples dans des listes, des dictionnaires dans des tuples etc etc ...



Journalisée

Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #11 le: 09 Novembre 2008 07:22:30 »
Haut de page

 arrows_right Utiliser le clavier virtuel dans un script (ou plugin)

- Saisie de texte

Code
(Python):
from string import *
import xbmcgui
 
# Recuperation d'un texte via la clavier virtuel
keyboard = xbmc.Keyboard("", heading = "Saisir votre Texte")
keyboard.setHeading('Texte a saisir') # En tete
keyboard.setDefault("Mon texte par defaut") # Texte par defaut qui sera deja affiche a la saisie
keyboard.doModal()
if (keyboard.isConfirmed()):
   inputText = keyboard.getText()
   print"Login: %s"%inputText
 
   # on fait ce que l'on veut avec le texte saisi
   # ...
 
   dialogInfo = xbmcgui.Dialog()
   dialogInfo.ok("Texte saisi", "Votre texte est:", "%s"%inputText)
del keyboard
 


- Saisie d'un mot de passe (caché a l'écran)

Code
(Python):
from string import *
import xbmcgui
 
# Recuperation d'un mot de passe via la clavier virtuel
keyboard = xbmc.Keyboard("", heading = "Saisir votre Mot de passe", hidden = True)
keyboard.setHeading('Mot de passe') # En tete
keyboard.setHiddenInput(True) # On cache le texte a l'ecran
keyboard.doModal()
if (keyboard.isConfirmed()):
   inputText = keyboard.getText()
 
   # on fait ce que l'on veut avec le mot de passe saisi
   # ...
 
   dialogInfo = xbmcgui.Dialog()
   dialogInfo.ok("Mot de passe", "Votre mot de passe a bien été défini")
keyboard.setHiddenInput(False) # optional
del keyboard
 
« Dernière édition: 10 Novembre 2008 19:39:37 par Temhil » Journalisée

alexsolex
« Répondre #12 le: 09 Novembre 2008 15:49:42 »
Haut de page

Bonjour

J'ai trouvé et utilisé avec grand succès la technique qui va suivre pour accélérer notablement les temps de téléchargement d'une liste de fichiers.

Utilisation des threads pour partager le téléchargement de plusieurs fichiers :
Astuce trouvée sur le forum développez.net

Code
(Python):
from urllib import urlopen
import threading
from Queue import Queue, Empty
from time import time
 
NUM_THREADS = 40
start = time()
q_in = Queue(0)
q_out = Queue(0)
 
# on remplit q_in avec les url (ici c'est juste un exemple pour tester)
for i in xrange(400):
   q_in.put("http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=%d" % i)
 
def getfiles():
   # fonction exécutée par les threads
   # ici je me contente de sauver le contenu avec l'url dans q_out
   try:
       while True:
           url = q_in.get_nowait()
           f = urlopen(url)
           q_out.put((url,f.read()))
           f.close()
   except Empty:
       # q_in est vide; on a terminé
       pass
 
# on crée et on démarre les threads
for i in xrange(NUM_THREADS):
   t = threading.Thread(target = getfiles)
   t.start()
 
count = 0
# tant qu'il y a des threads actifs ou des résultats disponibles
while threading.activeCount() > 1 or not q_out.empty():
   try:
       # on retire les résultats de la queue
       # on attend au plus 500 ms si la queue est vide
       # le timeout est nécessaire pour éviter une race condition
       url, contents = q_out.get(True, 0.5)
       count += 1
       print url, ':', contents
   except Empty:
       pass
 
print "%d fichiers récupérés en %f secondes" % (count, time() - start)
 
Journalisée
Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #13 le: 10 Novembre 2008 19:35:12 »
Haut de page

 arrows_right Ajouter un élément au menu contextuel dans les listes (listitem)

Merci a Alexsolex pour ce snippet. Vous retrouverez le message original ICI


Si vous avez consulté la doc de la librairie xbmcgui, vous aurez peut être constaté qu'une méthode permet d'ajouter des éléments au menu contextuel d'un objet 'ListItem'.
J'ai déjà dit moi même dans ce forum que cela ne fonctionnait pas, mais j'en ai trouvé la cause. La doc a une erreur de syntaxe il manque un s au nom de la méthode (addContextMenuItems)
Voici l'élément de la doc qui est erroné et corrigé par votre serviteur : ( http://xbmc.sourceforge.net/python-docs/xbmcgui.html#ListItem-addContextMenuItem )

Code:
addContextMenuItems(...)
    addContextMenuItems([(label, action,)*]) -- Adds item(s) to the context menu for media lists.
     
    [(label, action,)*] : list - A list of tuples consisting of label and action pairs.
      - label           : string or unicode - item's label.
      - action          : string - any built-in function to perform.
     
    List of functions - http://xbmc.org/wiki/?title=List_of_Built_In_Functions
     
    example:
      - listitem.addContextMenuItems([('Theater Showtimes', 'XBMC.RunScript(q:\\scripts\\showtimes\\default.py,Iron Man)',)])

Cette petite correction faite, je pense que bon nombre de développeurs seront intéressé !!! Et moi le premier !
J'ai effectué un test dans un plugin où j'ai rajouté ceci :
Code
(Python):
listitem.addContextMenuItems([("test","XBMC.ReloadSkin()",)])
et ca fonctionne tiptop

Note: Ce snippet est aussi bien pour les scripts que les plugins, mais n'a été testé pour le moment que sur les plugins.
Journalisée

Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #14 le: 10 Novembre 2008 19:53:46 »
Haut de page

 arrows_right Réimporter un module

Voici deux exemples si on veut réimporter un module (utilise si on a change le fichier en cours de route) (il y a certainement d'autre moyens):
Code
(Python):
if sys.modules.has_key("Module"):
   reload(Module)
else:
   import Module
 

Ou encore mieux (merci a Alexsolex):
Code
(Python):
if sys.modules.has_key("monmodule"):
   del sys.modules["monmodule"]
import monmodule

[edit]
Remplacement de la 2eme solution (qui ne marche apparemment pas) et remplacement par une bien meilleur solution proposée par Alexsolex

« Dernière édition: 10 Novembre 2008 20:14:09 par Temhil » Journalisée

alexsolex
« Répondre #15 le: 10 Novembre 2008 20:04:34 »
Haut de page

hum
Il me semble que la 2ieme solution ne fonctionne pas.

Si on a modifié le module importé le script ne prendra pas en compte les modifications même malgré un simple del module.

Pour ma part le résultat le meilleur constaté est comme suit :
Code
(Python):
if sys.modules.has_key("monmodule"):
   del sys.modules["monmodule"]
import monmodule
Journalisée
Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #16 le: 10 Novembre 2008 20:11:03 »
Haut de page

Merci, je supprime donc la 2eme solution du post  smiley
Journalisée

Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #17 le: 10 Novembre 2008 21:47:30 »
Haut de page

Merci a Alexsolex pour ces snippets. Vous retrouverez le message original ICI

 arrows_right Comment importer un un module (fichier .py) dans un sous-répertoire

Il s'agit en fait d'ajouter un chemin pour recherche pour les librairies avec le module sys

Par exemple si vous voulez importer le fichier :
\passion-XBMC\divers\lib\passion.py

Faites :
Code
(Python):
CHEMIN_LIB = "q:\scripts\passion-XBMC\divers\lib\"
import sys
sys.path.append(CHEMIN_LIB)
 
#maitenant python cherchera aussi dans ce chemin pour y trouver les libs que tu demandes et donc :
import passion #fonctionne normalement



 arrows_right Comment importer un module via une variable

Code
(Python):
mon_module_import = "passion"
exec("import %s"%mon_module_import)
a noter que je ne sais plus si exec est une commande python ou si ca dépend d'un module mais je pense que c'est intégré

« Dernière édition: 10 Novembre 2008 21:49:21 par Temhil » Journalisée

Made in Québec
Fait partie du Décor
*
Alcoolémie: 31
Messages: 4707
Hors ligne Hors ligne
Sexe: Homme
On est venu, on l'a vu et il l'a eu dans le cul !
WWW
« Répondre #18 le: 13 Novembre 2008 01:58:15 »
Haut de page

Voila suite à une demande...

Mettre de la vie dans un texte d'XBMC


Code
(Python):
#Comment mettre de la couleur dans un texte.
#note: les couleurs du themes en fonction peut etre utiliser. \skin\PM3.HD\colors\defaults.xml
#<color name="green">ffe2ff43</color>  qui nous donnent print "[COLOR=green"]MOT QUI VA ETRE EN VERT[/COLOR]"
#remarque qu&#39;au changement de themes on risque de perdre notre couleur qui est déffinie
#Le mieux est de faire print "[COLOR=ffe2ff43]MOT QUI VA ETRE EN VERT[/COLOR]"
 
red_color = "FFFF0000"
text_color = "Rouge"
 
label_formatting = "[COLOR=%s]%s[/COLOR]" % ( red_color, text_color, )
print label_formatting
 
text = "le feu de circulation est rouge, il faut attendre le feu vert."
text = text.replace( "rouge", label_formatting )
 
#pourquoi pas en faire un autre
text = text.replace( "vert", "[COLOR=ffe2ff43]vert[/COLOR]" )
print text
 
 
# Encore plus mettre un mot en gras ou en italic
print "[B]bold[/B] - bold text."
print "[I]italics[/I] - italic text."
 
# Plus sur le label formatting visite le manuel xbmc: http://xbmc.org/wiki/?title=Label_Formatting
 
http://img221.imageshack.us/img221/9161/labelformattingba9.jpg
Code Snippet (exemples)



Plus sur le label formatting visite le manuel xbmc: http://xbmc.org/wiki/?title=Label_Formatting

[edit]
 - ajouter: lien sur les infos du Label_Formatting en dehors du code python zieu
« Dernière édition: 13 Novembre 2008 17:23:41 par FrostBox » Journalisée

Par Osiris et par Apis regardez moi, regardez moi bien...
Par Osiris et par Apis vous êtes maintenant des... des quoi au juste ?
Des addoniens ! Vous aimez bien les add-ons vous les Passionnés.
Allez on recommence.
Par Osiris et par Apis vous êtes maintenant des addoniens... oui... des addoniens...
Silennnce, concentrez vous.




Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #19 le: 13 Novembre 2008 04:11:48 »
Haut de page

Super snippet je n'avais aucune idée que XBMC supportait cela, ou vas tu chercher tout cela???  niark niark
Journalisée

Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #20 le: 13 Novembre 2008 16:33:05 »
Haut de page

Tiens une question, est-ce qu'il y a moyen avec cette méthode de définir la taille du texte?
Ça serait super intéressant car le font10 ou font12, je trouve cela super limite pour définir la taille du texte.

[edit]
Et pour souligner ton texte? Il semble que
Code:
[U]mon texte[\U]
ne fonctionne pas
« Dernière édition: 13 Novembre 2008 16:54:10 par Temhil » Journalisée

Made in Québec
Fait partie du Décor
*
Alcoolémie: 31
Messages: 4707
Hors ligne Hors ligne
Sexe: Homme
On est venu, on l'a vu et il l'a eu dans le cul !
WWW
« Répondre #21 le: 13 Novembre 2008 17:42:53 »
Haut de page

Tiens une question, est-ce qu'il y a moyen avec cette méthode de définir la taille du texte?
Ça serait super intéressant car le font10 ou font12, je trouve cela super limite pour définir la taille du texte.

Oui tu as eu la même pensé que moi... niark niark mais non pas de support pour [ FONT = 14 ] balbla [ / FONT ].
Faudrait le demander à la team apres leur finalisation de leur trac.
Et pour infos les font sont pas limitées à 10 et 12 exclam
regarde par exemple le skin pm3: balise <fontset id="Default" unicode="true">
les grandeurs par défaut sont indiquées: http://xbmc.svn.sourceforge.net/viewvc/xbmc/trunk/XBMC/skin/Project%20Mayhem%20III/PAL/Font.xml?view=markup&sortby=date

Et de plus si on indique pas de font dans un code par défaut il prend cette référence:
http://xbmc.svn.sourceforge.net/viewvc/xbmc/trunk/XBMC/skin/Project%20Mayhem%20III/PAL/defaults.xml?view=markup&sortby=date
Code
(XML):
<default type="label">
 <posx>80</posx>
 <posy>60</posy>
 <label>-</label>
 <font>font13</font>
 <textcolor>white</textcolor>
</default>
 

Et pour souligner ton texte? Il semble que
Code:
[U]mon texte[\U]
ne fonctionne pas

Tiens tu as trouvé ca ou, car moi j'ai jamais parlé de cela exclam

Citation
ou vas tu chercher tout cela???

 niark niark
Secret de travail, non sérieux:
 - XBMC Online Manual
 - Directement des sources
 - Et bien sur la doc officiel python.org et celle que j'ai mis a jour dernièrement  sweat

[edit]
 j'ai mis des espace a [ FONT = 14 ] balbla [ / FONT ]. car le forum reconnait et l'affiche pas exclam

« Dernière édition: 13 Novembre 2008 17:52:24 par FrostBox » Journalisée

Par Osiris et par Apis regardez moi, regardez moi bien...
Par Osiris et par Apis vous êtes maintenant des... des quoi au juste ?
Des addoniens ! Vous aimez bien les add-ons vous les Passionnés.
Allez on recommence.
Par Osiris et par Apis vous êtes maintenant des addoniens... oui... des addoniens...
Silennnce, concentrez vous.




alexsolex
« Répondre #22 le: 13 Novembre 2008 19:24:45 »
Haut de page

Excellent tout ca. Ca va m'être utile pour le script IPB !!
Merci Frostbox

Petite question subsidiaire, qu'en est t'il du label parsing : http://xbmc.org/wiki/?title=Label_Parsing
Journalisée
Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #23 le: 28 Janvier 2009 20:26:58 »
Haut de page

 arrows_right Lancer une application externe dans XBMC

Voici un exemple de script python vous permettant de lancer une application externe (ici Firefox sous Windows) dans XBMC.
Merci a Frost pour ce Snippet.

Vous pouvez copier/coller ce code dans un fichier et l'enregister sous le nom firefox.py par exemple (ou bien integrer ce code a un script/plugin plus complexe). Cela ouvrira Firefox a partir de XBMC.

Code
(Python):
import xbmc
# Execute shell commands and freezes XBMC until shell is closed
cmd = "System.ExecWait"
 
# Execute shell commands
#cmd = "System.Exec"
 
command = &#39;%s("%s")&#39; % ( cmd, "C:\\Program Files\\Mozilla Firefox\\firefox.exe" )
xbmc.executebuiltin( command )
 
 



Journalisée

Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #24 le: 13 Février 2009 16:10:49 »
Haut de page

 arrows_right Forcer le loglevel depuis un script ou un plugin

Voici un snippet réalisé par Alexsolex vous montrant comment activer le loglevel directement depuis un script:

Code
(Python):
#pour récupérer le log level actuel (utile pour le rétablir si besoin après l&#39;exécution du script)
actualloglevel = xbmc.executehttpapi("GetLogLevel").replace("<li>","")
 
#pour régler le loglevel sur la valeur désirée (ici à 1):
status = xbmc.executehttpapi("SetLogLevel(1)").replace("<li>","")
#si tout c&#39;est bien passé, status contient "OK"

Pour information <li> (list item) est une balise html pour mettre en forme le résultat de retour.
Vous pouvez suivre le fil de discutions d'origine ICI
Journalisée

Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #25 le: 13 Février 2009 16:25:31 »
Haut de page

 arrows_right Déterminer la plate-forme sur laquelle XBMC tourne

Voici une petite fonction bien pratique réalisée par Frost vous permettant de déterminer sur quel plate-forme XBMC  s'exécute:

Code
(Python):
import xbmc
 
def get_system_platform():
   """ fonction: pour recuperer la platform que xbmc tourne """
   platform = "unknown"
   if xbmc.getCondVisibility( "system.platform.linux" ):
       platform = "linux"
   elif xbmc.getCondVisibility( "system.platform.xbox" ):
       platform = "xbox"
   elif xbmc.getCondVisibility( "system.platform.windows" ):
       platform = "windows"
   elif xbmc.getCondVisibility( "system.platform.osx" ):
       platform = "osx"
   return platform
 



Et voici une autre méthode de tester que vous êtes sur Mac par exemple:
Code
(Python):
if os.environ.get( "OS", "" ).lower() == "os x":
   print "Platform MAC"
 
« Dernière édition: 18 Février 2009 00:23:09 par Temhil » Journalisée

Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #26 le: 18 Février 2009 00:55:20 »
Haut de page

 arrows_right Utiliser 'special://'  dans un chemin

Les dernières releases de XBMC ont introduit un nouveau format dans le type de chemins, ceux-ci peuvent etre désormais identifies par special:// qui remplace les anciens Q:, P:, T:, U:, Z:
Voici un petit résumé mais je vous conseille de lire les informations tres importante du Blog XBMC de jmarshall sur ce sujet et ce sujet sur le forum officiel:

  • Utilisez special://home/ (anciennement U:\\) si vous avez besoin de lire/écrire dans la partie modifiable de l'installation de XBMC
  • Utilisez special://profile/ (anciennement P:\\) si vous avez besoin de lire/écrire dans le répertoire userdata de l'utilisateur courrant.
  • Utilisez special://temp/ (anciennement Z:\\) si vous avez besoin de lire/écrire a dans un emplacement temporaire.

Si vous en avez réellement besoin vous pouvez aussi:
  • Utilisez special://xbmc/ (anciennement Q:\\) pour lire dans le répertoire même d'installation de XBMC.
  • Utilisez special://masterprofile/ (anciennement T:\\)  pour lire pour dans le répertoire userdata de l'utilisateur maître/principal (master users)

Attention: Utilisez xbmc.translatePath() pour traduire tout chemin (XBMC) vers son réel chemin (au niveau OS) lorsque vous avez besoin lire ou écrire dans le systeme de fichier (dépendant donc de l'OS).



Maintenant voici un snippet sur la facon de couvir tous les cas, car certains version de XBMC (sur certains OS ou trop anciennes) ne supportent pas bien le chemin  'special://'.
Cet exemple est une librairie réalisée par Frost (merci a lui) dans l'installer Passion-XBMC qui couvre je pense tous les cas:
Code
(Python):
# If the dir exists with the requested name, simply return it
 
__all__ = [
   # public names
   "XBMC_IS_HOME",
   "SPECIAL_XBMC_DIR",
   "SPECIAL_HOME_DIR",
   "SPECIAL_TEMP_DIR",
   "SPECIAL_PROFILE_DIR",
   "SPECIAL_MASTERPROFILE_DIR",
   "SPECIAL_XBMC_HOME",
   "SPECIAL_SCRIPT_DATA",
   ]
 
 
import os
import sys
from xbmc import translatePath
 
 
PLATFORM_MAC = os.environ.get( "OS", "" ).lower() == "os x"
 
 
try: scriptname = sys.modules[ "__main__" ].__script__
except: scriptname = os.path.basename( os.getcwd() )
 
 
SPECIAL_XBMC_DIR = translatePath( "special://xbmc/" )
if PLATFORM_MAC or not os.path.isdir( SPECIAL_XBMC_DIR  ): SPECIAL_XBMC_DIR = translatePath( "Q:\\" )
 
SPECIAL_HOME_DIR = translatePath( "special://home/" )
if PLATFORM_MAC or not os.path.isdir( SPECIAL_HOME_DIR  ): SPECIAL_HOME_DIR = translatePath( "U:\\" )
 
SPECIAL_TEMP_DIR = translatePath( "special://temp/" )
if PLATFORM_MAC or not os.path.isdir( SPECIAL_TEMP_DIR  ): SPECIAL_TEMP_DIR = translatePath( "Z:\\" )
 
SPECIAL_PROFILE_DIR = translatePath( "special://profile/" )
if PLATFORM_MAC or not os.path.isdir( SPECIAL_PROFILE_DIR  ): SPECIAL_PROFILE_DIR = translatePath( "P:\\" )
 
SPECIAL_MASTERPROFILE_DIR = translatePath( "special://masterprofile/" )
if PLATFORM_MAC or not os.path.isdir( SPECIAL_MASTERPROFILE_DIR  ): SPECIAL_MASTERPROFILE_DIR = translatePath( "T:\\" )
 
SPECIAL_XBMC_HOME = ( SPECIAL_HOME_DIR, SPECIAL_XBMC_DIR )[ ( os.environ.get( "OS", "xbox" ).lower() == "xbox" ) ]
 
XBMC_IS_HOME = SPECIAL_HOME_DIR == SPECIAL_XBMC_DIR
 
SPECIAL_SCRIPT_DATA = os.path.join( SPECIAL_PROFILE_DIR, "script_data", scriptname )
if not os.path.isdir( SPECIAL_SCRIPT_DATA ): os.makedirs( SPECIAL_SCRIPT_DATA )
 

Vous pouvez constater le cas particulier de XBMC sur Mac, pour une raison obscure a l'heure actuel le test os.path.isdir sur les chemins 'special://' ne fonctionne pas proprement, aussi on contourne ce problème en verifiant si on est sur Mac.
Sinon on vérifie si XBMC reconnaît un chemin 'special://' et si ce n'est pas le cas, on utilise l'ancien format des chemins Q:, P:, T:, U:, Z:


[edit]
Voici un nouveau fil de discutions sur ce sujet : changement des chemins internes à XBMC
« Dernière édition: 23 Février 2009 01:07:53 par Temhil » Journalisée

Made in Québec
Fait partie du Décor
*
Alcoolémie: 31
Messages: 4707
Hors ligne Hors ligne
Sexe: Homme
On est venu, on l'a vu et il l'a eu dans le cul !
WWW
« Répondre #27 le: 21 Février 2009 14:12:28 »
Haut de page

 arrows_right Minimiser XBMC

Code
(Python):
import xbmc
 
# Quit Quit XBMC (same as XBMC.Dashboard on Xbox)
# Suspend Suspends (S3 / S1 depending on bios setting) the System (not working on Xbox due to hardware limitations)
# Hibernate Hibernate (S5) the System (not working on Xbox due to hardware limitations)
# Powerdown Powerdown system
# Minimize Minimize XBMC to tools bar
state = { "quit": 0, "suspend": 1, "hibernate": 2, "powerdown": 4, "minimize": 5 }
 
# print current user setting shutdownstate
user_state = xbmc.executehttpapi( "GetGuiSetting(0;system.shutdownstate)" ).replace( "<li>", "" )
print user_state
# force setting shutdownstate to minimize
print xbmc.executehttpapi( "SetGUISetting(0;system.shutdownstate;%i)" % state[ "minimize" ] ).replace( "<li>", "" )
# print forced setting shutdownstate
print xbmc.executehttpapi( "GetGuiSetting(0;system.shutdownstate)" ).replace( "<li>", "" )
 
# XBMC.ShutDown Trigger default Shutdown action defined in System Settings,
# Default Powerdown on Xbox and Quit on Linux / OSX / Windows
xbmc.shutdown()
 
# replace preference user setting shutdown state
print xbmc.executehttpapi( "SetGUISetting(0;system.shutdownstate;%i)" % int( user_state ) ).replace( "<li>", "" )
 

NB: Vous remarquerez qu'à la fin on replace les préférences de l'utilisateur de l'état d'arrêt, simplement pour pas le rendre malheureux.

frost

[edit] message édité par Temhil: ajout du titre au même format que les autres snippets
« Dernière édition: 22 Février 2009 20:13:24 par Temhil » Journalisée

Par Osiris et par Apis regardez moi, regardez moi bien...
Par Osiris et par Apis vous êtes maintenant des... des quoi au juste ?
Des addoniens ! Vous aimez bien les add-ons vous les Passionnés.
Allez on recommence.
Par Osiris et par Apis vous êtes maintenant des addoniens... oui... des addoniens...
Silennnce, concentrez vous.




Made in Québec
Fait partie du Décor
*
Alcoolémie: 31
Messages: 4707
Hors ligne Hors ligne
Sexe: Homme
On est venu, on l'a vu et il l'a eu dans le cul !
WWW
« Répondre #28 le: 22 Juin 2009 03:12:04 »
Haut de page

arrows_right Minimiser XBMC (Méthode simple)

Code
(Python):
import xbmc
 
xbmc.executebuiltin( "XBMC.Minimize()" )
 
 
Journalisée

Par Osiris et par Apis regardez moi, regardez moi bien...
Par Osiris et par Apis vous êtes maintenant des... des quoi au juste ?
Des addoniens ! Vous aimez bien les add-ons vous les Passionnés.
Allez on recommence.
Par Osiris et par Apis vous êtes maintenant des addoniens... oui... des addoniens...
Silennnce, concentrez vous.




Hello World
Fait partie du Décor
*
Alcoolémie: 3
Messages: 2338
Hors ligne Hors ligne
Sexe: Homme
« Répondre #29 le: 18 Juillet 2009 17:46:09 »
Haut de page

 arrows_right Détruire tous les sous répertoires .svn d'un répertoire donné

Code
(Python):
import os
 
folder = os.getcwd().replace(&#39;;&#39;,&#39;&#39;)
 
def del_all_files_dirs(folder):
   for root, dirs, files in os.walk(folder, topdown=False):
       for name in files:
           os.remove(os.path.join(root, name))
       for name in dirs:
           os.rmdir(os.path.join(root, name))
   os.rmdir(folder)
   print &#39;%s deleted&#39;%folder
 
for root, dirs, files in os.walk(folder , topdown=False):
   for name in dirs:
       print &#39;entering %s ...&#39;%os.path.join(root, name)
       if &#39;.svn&#39; in name:
           del_all_files_dirs(os.path.join(root,name))
 
print &#39;Well done&#39;
 
Journalisée

"Gouvernements du monde industriel, géants fatigués de chair et d'acier, je viens du cyberespace, nouvelle demeure de l'esprit. Au nom de l'avenir, je vous demande, à  vous qui êtes du passé, de nous laisser tranquilles. Vous n'êtes pas les bienvenus parmi nous."  par John Perry Barlow

Script : Installeur Passion-XBMC     Tutoriel : Les scrapers ou comment associer des informations à vos films
Made in Québec
Fait partie du Décor
*
Alcoolémie: 31
Messages: 4707
Hors ligne Hors ligne
Sexe: Homme
On est venu, on l'a vu et il l'a eu dans le cul !
WWW
« Répondre #30 le: 21 Juillet 2009 17:17:48 »
Haut de page

 arrows_right Remplacer un mot en masse dans un fichier

Code
(Python):
import os
import string
 
 
def replaces( source, search_for, replace_with ):
   # set temporary files
   back = os.path.splitext( source )[ 0 ] + ".bak"
   temp = os.path.splitext( source )[ 0 ] + ".tmp"
   # remove temp file if exists
   try: os.remove( temp )
   except os.error: pass
   # open source and temp file
   fi = open( source )
   fo = open( temp, "w" )
   # read lines of source file
   for line in fi.readlines():
       # temp file, write line with replaced str
       fo.write( string.replace( line, search_for, replace_with ) )
   # end replace close source and temp file
   fi.close()
   fo.close()
   # remove backup file if exists
   try: os.remove( back )
   except os.error: pass
   # now rename original file into backup
   os.rename( source, back )
   # and rename temp into new source
   os.rename( temp, source )
 
 
source_file = "test_replaces.xml"
search_for = "Salut"
replace_with = "Bonjour"
 
replaces( source_file, search_for, replace_with )
 
Journalisée

Par Osiris et par Apis regardez moi, regardez moi bien...
Par Osiris et par Apis vous êtes maintenant des... des quoi au juste ?
Des addoniens ! Vous aimez bien les add-ons vous les Passionnés.
Allez on recommence.
Par Osiris et par Apis vous êtes maintenant des addoniens... oui... des addoniens...
Silennnce, concentrez vous.




Made in Québec
Fait partie du Décor
*
Alcoolémie: 31
Messages: 4707
Hors ligne Hors ligne
Sexe: Homme
On est venu, on l'a vu et il l'a eu dans le cul !
WWW
« Répondre #31 le: 14 Août 2009 03:52:23 »
Haut de page

 arrows_rightDécouper une liste en plusieurs partie égal

La fonction:
Code
(Python):
def splitlist( iterable, start=0, step=30, end=0 ):
   """Return a list containing an slice of iterable.
   start (!) defaults to 0.; step is split index, (!) defaults to 30.; end (!) defaults to 0.
   For example, splitlist(range(4)) returns [[0, 1, 2, 3]].
   """

   try:
       splited = []
       if end <= 0:
           end = len( iterable )
 
       for index in xrange( step, end, step ):
           splited.append( iterable[ start:index ] )
           start = index
       splited.append( iterable[ start:end ] )
 
       return splited
   except:
       from traceback import print_exc
       print_exc()
 
   return [ iterable ]
 

Un exemple:
Code
(Python):
import string
maliste = list( string.printable )
print maliste
print
 
# splitlist( iterable, start=0, step=30, end=0 ) )
splited = splitlist( maliste )
 
print "Nombre total d&#39;items", len( maliste )
print "Nombre de listes", len( splited )
 
for count, liste in enumerate( splited ):
   print "liste #", count+1
   print len( liste ), liste
   print
"""
>>>
[&#39;0&#39;, &#39;1&#39;, &#39;2&#39;, &#39;3&#39;, &#39;4&#39;, &#39;5&#39;, &#39;6&#39;, &#39;7&#39;, &#39;8&#39;, &#39;9&#39;, &#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;f&#39;, &#39;g&#39;, &#39;h&#39;, &#39;i&#39;, &#39;j&#39;, &#39;k&#39;, &#39;l&#39;, &#39;m&#39;, &#39;n&#39;, &#39;o&#39;, &#39;p&#39;,
&#39;q&#39;, &#39;r&#39;, &#39;s&#39;, &#39;t&#39;, &#39;u&#39;, &#39;v&#39;, &#39;w&#39;, &#39;x&#39;, &#39;y&#39;, &#39;z&#39;, &#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, &#39;E&#39;, &#39;F&#39;, &#39;G&#39;, &#39;H&#39;, &#39;I&#39;, &#39;J&#39;, &#39;K&#39;, &#39;L&#39;, &#39;M&#39;, &#39;N&#39;, &#39;O&#39;, &#39;P&#39;,
&#39;Q&#39;, &#39;R&#39;, &#39;S&#39;, &#39;T&#39;, &#39;U&#39;, &#39;V&#39;, &#39;W&#39;, &#39;X&#39;, &#39;Y&#39;, &#39;Z&#39;, &#39;!&#39;, &#39;"&#39;, &#39;#&#39;, &#39;$&#39;, &#39;%&#39;, &#39;&&#39;, "&#39;", &#39;(&#39;, &#39;)&#39;, &#39;*&#39;, &#39;+&#39;, &#39;,&#39;, &#39;-&#39;, &#39;.&#39;, &#39;/&#39;, &#39;:&#39;,
&#39;;&#39;, &#39;<&#39;, &#39;=&#39;, &#39;>&#39;, &#39;?&#39;, &#39;@&#39;, &#39;[&#39;, &#39;\\&#39;, &#39;]&#39;, &#39;^&#39;, &#39;_&#39;, &#39;`&#39;, &#39;{&#39;, &#39;|&#39;, &#39;}&#39;, &#39;~&#39;, &#39; &#39;, &#39;\t&#39;, &#39;\n&#39;, &#39;\r&#39;, &#39;\x0b&#39;, &#39;\x0c&#39;]
 
Nombre total d&#39;items 100
Nombre de listes 4
liste # 1
30 [&#39;0&#39;, &#39;1&#39;, &#39;2&#39;, &#39;3&#39;, &#39;4&#39;, &#39;5&#39;, &#39;6&#39;, &#39;7&#39;, &#39;8&#39;, &#39;9&#39;, &#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;f&#39;, &#39;g&#39;, &#39;h&#39;, &#39;i&#39;, &#39;j&#39;, &#39;k&#39;, &#39;l&#39;, &#39;m&#39;, &#39;n&#39;, &#39;o&#39;, &#39;p&#39;, &#39;q&#39;, &#39;r&#39;, &#39;s&#39;, &#39;t&#39;]
 
liste # 2
30 [&#39;u&#39;, &#39;v&#39;, &#39;w&#39;, &#39;x&#39;, &#39;y&#39;, &#39;z&#39;, &#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, &#39;E&#39;, &#39;F&#39;, &#39;G&#39;, &#39;H&#39;, &#39;I&#39;, &#39;J&#39;, &#39;K&#39;, &#39;L&#39;, &#39;M&#39;, &#39;N&#39;, &#39;O&#39;, &#39;P&#39;, &#39;Q&#39;, &#39;R&#39;, &#39;S&#39;, &#39;T&#39;, &#39;U&#39;, &#39;V&#39;, &#39;W&#39;, &#39;X&#39;]
 
liste # 3
30 [&#39;Y&#39;, &#39;Z&#39;, &#39;!&#39;, &#39;"&#39;, &#39;#&#39;, &#39;$&#39;, &#39;%&#39;, &#39;&&#39;, "&#39;", &#39;(&#39;, &#39;)&#39;, &#39;*&#39;, &#39;+&#39;, &#39;,&#39;, &#39;-&#39;, &#39;.&#39;, &#39;/&#39;, &#39;:&#39;, &#39;;&#39;, &#39;<&#39;, &#39;=&#39;, &#39;>&#39;, &#39;?&#39;, &#39;@&#39;, &#39;[&#39;, &#39;\\&#39;, &#39;]&#39;, &#39;^&#39;, &#39;_&#39;, &#39;`&#39;]
 
liste # 4
10 [&#39;{&#39;, &#39;|&#39;, &#39;}&#39;, &#39;~&#39;, &#39; &#39;, &#39;\t&#39;, &#39;\n&#39;, &#39;\r&#39;, &#39;\x0b&#39;, &#39;\x0c&#39;]
 
>>>
"""


Après 1 heure de recherche sur le web avec aucun résultat valable. J'ai créé cette fonction made in Frost  smiley si vous avez plus simple merci de mettre votre Snippet
« Dernière édition: 14 Août 2009 04:09:46 par Frost » Journalisée

Par Osiris et par Apis regardez moi, regardez moi bien...
Par Osiris et par Apis vous êtes maintenant des... des quoi au juste ?
Des addoniens ! Vous aimez bien les add-ons vous les Passionnés.
Allez on recommence.
Par Osiris et par Apis vous êtes maintenant des addoniens... oui... des addoniens...
Silennnce, concentrez vous.




Développé Couché
Fait partie du Décor
*
Alcoolémie: 20
Messages: 3473
Hors ligne Hors ligne
Sexe: Homme
Developpeur Python petit scarabée
« Répondre #32 le: 15 Octobre 2009 00:18:37 »
Haut de page

 arrows_right Parser un XML

Afin de parser un XML dans XBMC vous aurez le choix entre plusieurs module tels que:

  • ElementTree: Tres rapide a parser mais aussi tres sensible aux erreurs dans un XML
  • BeautifulSoup: Moins rapide qu'ET mais supporte des XML 'moins standards'
  • minidom: un grand classique, plus d'info sur le site officiel ICI, voici un snippet LA
  • lxml: a ses fans aussi, plus d'infos ICI
  • Et certainement d'autres ...

Je n'ai pour ma part eu l'occasion que de comparer ElementTree et BeautifulSoup
Voici donc deux exemple de code parsant le meme XML, l'un avec ElementTree, l'autre avec Beautifulsoup

 arrows_right Exemple avec BeautifulSoup
Code
(Python):
from BeautifulSoup import BeautifulStoneSoup
 
soup =  BeautifulStoneSoup((open(os.path.join(CACHEDIR, XMLFile), &#39;r&#39;)).read())
cat_scrapers = soup.find("scrapers")
 
if cat_scrapers != None:
for item in cat_scrapers.findAll("entry"):
if hasattr(item.title,&#39;string&#39;):
if item.title.string != None:
title = item.title.string.encode("cp1252")
if hasattr(item.version,&#39;string&#39;):
if item.version.string != None:
version = item.version.string.encode("utf-8")
if hasattr(item.lang,&#39;string&#39;):
if item.lang.string != None:
language = item.lang.string.encode("utf-8")
if hasattr(item.date,&#39;string&#39;):
if item.date.string != None:
date = item.date.string.encode("cp1252")
if hasattr(item.previewvideourl,&#39;string&#39;):
if item.previewvideourl.string != None:
previewVideoURL = item.previewvideourl.string.encode("utf-8")

 arrows_right Exemple avec ElementTree
Code
(Python):
import elementtree.ElementTree as ET
 
elems     = ET.parse( open( os.path.join( CACHEDIR, XMLFile ), "r" ) ).getroot()
cat_scrapers = elems.find( "scrapers" ).findall( "entry" )
 
for item in cat_scrapers:
title             = item.findtext( "title" )
version           = item.findtext( "version" )
language          = item.findtext( "lang" )
date              = item.findtext( "date" )
added             = item.findtext( "added" )
previewVideoURL   = item.findtext( "previewVideoURL" )

Dans les deux bien sur cas vous devrez couvrir en plus les exceptions en utilisant des blocs try/except
Journalisée

Pages: 1 2 [Toutes]   Haut de page
  Imprimer  
 
Aller à:  




anything