Aller au contenu principal
Sujet: Code Snippet (exemples) (Lu 37008 fois) sujet précédent - sujet suivant
0 Membres et 1 Invitédans ce sujet

Re : Code Snippet (exemples)

Répondre #20
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
[U]mon texte[\U] 

ne fonctionne pas

Re : Re : Code Snippet (exemples)

Répondre #21

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... :gniark: 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) [Sélectionner]

<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
[U]mon texte[\U] 

ne fonctionne pas

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

Citer
ou vas tu chercher tout cela???

:gniark:
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:

FIGHT THE DEAD
FEAR THE LIVING


Retired Team Founder


Re : Code Snippet (exemples)

Répondre #23
 :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) [Sélectionner]

import xbmc
# Execute shell commands and freezes XBMC until shell is closed
cmd = "System.ExecWait"

# Execute shell commands
#cmd = "System.Exec"

command = '%s("%s")' % ( cmd, "C:\\Program Files\\Mozilla Firefox\\firefox.exe" )
xbmc.executebuiltin( command )






Re : Code Snippet (exemples)

Répondre #24
 :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) [Sélectionner]
#pour récupérer le log level actuel (utile pour le rétablir si besoin après l'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'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

Re : Code Snippet (exemples)

Répondre #25
 :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) [Sélectionner]

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) [Sélectionner]

if os.environ.get( "OS", "" ).lower() == "os x":
    print "Platform MAC"

Re : Code Snippet (exemples)

Répondre #26
 :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) [Sélectionner]
# 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

Code Snippet (exemples) - Minimiser XBMC

Répondre #27
 :arrows_right: Minimiser XBMC

Code: (python) [Sélectionner]

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
FIGHT THE DEAD
FEAR THE LIVING


Retired Team Founder

Re : Code Snippet (exemples)

Répondre #28
:arrows_right: Minimiser XBMC (Méthode simple)

Code: (python) [Sélectionner]

import xbmc

xbmc.executebuiltin( "XBMC.Minimize()" )


FIGHT THE DEAD
FEAR THE LIVING


Retired Team Founder

Re : Code Snippet (exemples)

Répondre #29
 :arrows_right: Détruire tous les sous répertoires .svn d'un répertoire donné

Code: (python) [Sélectionner]

import os

folder = os.getcwd().replace(';','')

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 '%s deleted'%folder

for root, dirs, files in os.walk(folder , topdown=False):
    for name in dirs:
        print 'entering %s ...'%os.path.join(root, name)
        if '.svn' in name:
            del_all_files_dirs(os.path.join(root,name))

print 'Well done'
Vae Victis

Re : Code Snippet (exemples)

Répondre #30
 :arrows_right: Remplacer un mot en masse dans un fichier

Code: (python) [Sélectionner]

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 )
FIGHT THE DEAD
FEAR THE LIVING


Retired Team Founder

Re : Code Snippet (exemples)

Répondre #31
 :arrows_right:Découper une liste en plusieurs partie égal

La fonction:
Code: (python) [Sélectionner]

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) [Sélectionner]

import string
maliste = list( string.printable )
print maliste
print

# splitlist( iterable, start=0, step=30, end=0 ) )
splited = splitlist( maliste )

print "Nombre total d'items", len( maliste )
print "Nombre de listes", len( splited )

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

Nombre total d'items 100
Nombre de listes 4
liste # 1
30 ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't']

liste # 2
30 ['u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X']

liste # 3
30 ['Y', 'Z', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`']

liste # 4
10 ['{', '|', '}', '~', ' ', '\t', '\n', '\r', '\x0b', '\x0c']

>>>
"""




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
FIGHT THE DEAD
FEAR THE LIVING


Retired Team Founder

Re : Code Snippet (exemples)

Répondre #32
 :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) [Sélectionner]
from BeautifulSoup import BeautifulStoneSoup

soup =  BeautifulStoneSoup((open(os.path.join(CACHEDIR, XMLFile), 'r')).read())
cat_scrapers = soup.find("scrapers")

if cat_scrapers != None:
for item in cat_scrapers.findAll("entry"):
if hasattr(item.title,'string'):
if item.title.string != None:
title = item.title.string.encode("cp1252")
if hasattr(item.version,'string'):
if item.version.string != None:
version = item.version.string.encode("utf-8")
if hasattr(item.lang,'string'):
if item.lang.string != None:
language = item.lang.string.encode("utf-8")
if hasattr(item.date,'string'):
if item.date.string != None:
date = item.date.string.encode("cp1252")
if hasattr(item.previewvideourl,'string'):
if item.previewvideourl.string != None:
previewVideoURL = item.previewvideourl.string.encode("utf-8")


:arrows_right: Exemple avec ElementTree
Code: (python) [Sélectionner]
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

 
Simple Audio Video Embedder