Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

Problème de parsing XML

Réservé à l'utilisation et la programmation de scripts dans JEEDOM
Répondre
jaska21
Timide
Messages : 39
Inscription : 29 janv. 2016, 10:30

Problème de parsing XML

Message par jaska21 » 17 mai 2018, 14:41

Bonjour à tous,

J'ai un soucis de parsing XML sur un fichier qui a fonctionné nickel jusqu'au 19/04 (date de dernière communication)
Pour expliquer le contexte, je récupère un XML d'un serveur Plex, qui me donne les infos sur les films en cours. Le fichier Plex n'est pas adapté pour une utilisation dans Jeedom, donc je le transforme en version simple :

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>
<Video>
  <NumBiblio>1</NumBiblio>
  <NameBiblio>Films</NameBiblio>
  <Titre>Gamba (2015)</Titre>
  <Duree>1:34:3</Duree>
  <TimeJeedom>134</TimeJeedom>
  <EtatLecture>playing</EtatLecture>
  <IPClient>89.225.255.66</IPClient>
  <TypeAcces>wan</TypeAcces>
  <Plateforme>Firefox</Plateforme>
  <Machine>Windows</Machine>
</Video>
Aujourd'hui, je voulais ajouter la valeur <TimeJeedom> dans mon script (qui fonctionnait nickel avant le 19/04) et là, je me retrouve avec une erreur du type : String could not be parsed as XML lorsque je sauvegarde !

Du coup, je vire manuellement cette valeur dans le fichier... Même erreur ! Pour autant, je suis sûr que le script a fonctionné, puisque quand je teste les valeurs, j'ai d'anciennes données qui apparaissent dans la popup (donc il a su parser le fichier à un moment) !

Sinon, pour info, dans URL du fichier XML, j'ai ça : http://192.168.0.25/plugins/script/core ... Values.xml (qui correspond bien à l'emplacement du fichier, et celui-ci est bien présent, avec le contenu ci-dessus)

Avez-vous des idées ? Je planche dessus depuis 2h, et j'ai plus la moindre piste :|

jaska21
Timide
Messages : 39
Inscription : 29 janv. 2016, 10:30

Re: Problème de parsing XML

Message par jaska21 » 17 mai 2018, 14:51

Ah.. Précision sur les pistes que j'ai déjà testé :
-Changement de type d'encodage (UTF-8 et ISO-8859-1)
-Suppression de chaque valeur dans le fichier XML, une à une pour voir laquelle pouvait coincer
-Création d'un script "tout neuf" avec les mêmes valeurs
-Modification de l'URL du fichier XML (dans le module script) avec http://localhost/..... et http://127.0.0.1/.....
-Désactivation des scénarii qui peuvent avoir un lien de près ou de loin avec la lecture du fichier XML

Je dois passer à côté d'un truc( surement tout con)... Mais je vois pas

Avatar de l’utilisateur
Salvialf
Helper
Messages : 1334
Inscription : 24 févr. 2018, 09:37
Contact :

Re: Problème de parsing XML

Message par Salvialf » 26 déc. 2018, 16:59

Salut @jaska21,

J'aurai préféré commencer par te remercier pour ton script qui fonctionne parfaitement pour récupérer les informations d'une session Plex malheureusement je ne parviens pas non plus à parser le fichier XML :(

J'ai tenté beaucoup de solutions différentes sans arriver à quoi que ce soit, c'est rageant de bloquer si près du but !

De ton côté es-tu parvenu à faire à nouveau fonctionner ton script ? Merci d'avance pour ton retour
VM Jeedom 3.2.16 sous Proxmox 5.4 sur NUC5i5RYH (Debian 9.9)
Helper Officiel Jeedom
Widgets développés
Téléchargement d'icônes domotique (Topic Forum)

jaska21
Timide
Messages : 39
Inscription : 29 janv. 2016, 10:30

Re: Problème de parsing XML

Message par jaska21 » 28 déc. 2018, 16:43

Bonjour Salvialf,
Alors oui, j'ai réussi a parser mon flux XML... en le transformant en JSON ! (A priori Jeedom a plus de facilité avec JSON).
Je n'ai pas accès a mon install aujourd'hui, mais dès la rentrée, je te poste mon script et le scénario qui traite ensuite les valeurs récupérées.

Bonne journée

Avatar de l’utilisateur
Salvialf
Helper
Messages : 1334
Inscription : 24 févr. 2018, 09:37
Contact :

Re: Problème de parsing XML

Message par Salvialf » 28 déc. 2018, 21:08

Salut jaska21 et merci pour ton retour,

Aux grands maux les grands remèdes comme on dit... Dommage je l'aimais bien ton script car simple et efficace et facilement modifiable et adaptable en plus.

Merci pour ta proposition, je suis effectivement intéressé par ta nouvelle solution de récupération de ces infos d'ailleurs au passage j'étais également curieux de savoir comment tu avais fait pour récupérer la durée en format horaire lisible ?:
jaska21 a écrit :
17 mai 2018, 14:41

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>
  .............
  <Duree>1:34:3</Duree>
De mon côté j'ai aussi cherché une autre solution avec un script python mais je manque de temps pour étudier le python en ce moment:

Code : Tout sélectionner

#!/usr/bin/python
import urllib, urllib2, hashlib
import httplib, base64
import json
import sys

plexURL  = '192.168.0.XX:32400' #base url (default port = 32400)
username = "XXXXXXXXXXXXX"
password = "XXXXXXXX"

base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
txdata = ""

headers={'Authorization': "Basic %s" % base64string,
                'X-Plex-Client-Identifier': "Test script",
                'X-Plex-Product': "Test script 356546545",
                'X-Plex-Version': "0.001"}

conn = httplib.HTTPSConnection("plex.tv")
conn.request("POST","/users/sign_in.json",txdata,headers)
response = conn.getresponse()
resp = json.load(response);

#extract an element in the response
plexToken = resp["user"]["authToken"]
conn.close()

#building url
requestURL = 'http://'+plexURL+'/status/sessions?X-Plex-Token='+plexToken

from xml.etree import ElementTree as ET

try:
  #call session url
  test = urllib.urlopen(requestURL).read()
  root = ET.XML(test)
  videotitle = root.find('Video').attrib['title']
  print videotitle.encode('utf8')
except Exception:
  print 'N/A'
  pass
C'est bizarre ce problème de parsing XML avec Jeedom, on dirait un problème de droits car si j'essaye d'accéder à "http://192.168.0.XX/.../Scripts/Plex/Plex_Values.xml" via mon navigateur j'obtiens le joli message "Forbidden
You don't have permission to access /.../Scripts/Plex/Plex_Values.xml on this server".

Bref au plaisir de te lire et encore merci pour ton retour.

@+
VM Jeedom 3.2.16 sous Proxmox 5.4 sur NUC5i5RYH (Debian 9.9)
Helper Officiel Jeedom
Widgets développés
Téléchargement d'icônes domotique (Topic Forum)

pascals
Timide
Messages : 213
Inscription : 07 juil. 2017, 09:43
Localisation : Bernex, France

Re: Problème de parsing XML

Message par pascals » 29 déc. 2018, 00:32

Salvialf a écrit :Salut jaska21 et merci pour ton retour,

Aux grands maux les grands remèdes comme on dit... Dommage je l'aimais bien ton script car simple et efficace et facilement modifiable et adaptable en plus.

Merci pour ta proposition, je suis effectivement intéressé par ta nouvelle solution de récupération de ces infos d'ailleurs au passage j'étais également curieux de savoir comment tu avais fait pour récupérer la durée en format horaire lisible ?:
jaska21 a écrit :
17 mai 2018, 14:41

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>
  .............
  <Duree>1:34:3</Duree>
De mon côté j'ai aussi cherché une autre solution avec un script python mais je manque de temps pour étudier le python en ce moment:

Code : Tout sélectionner

#!/usr/bin/python
import urllib, urllib2, hashlib
import httplib, base64
import json
import sys

plexURL  = '192.168.0.XX:32400' #base url (default port = 32400)
username = "XXXXXXXXXXXXX"
password = "XXXXXXXX"

base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
txdata = ""

headers={'Authorization': "Basic %s" % base64string,
                'X-Plex-Client-Identifier': "Test script",
                'X-Plex-Product': "Test script 356546545",
                'X-Plex-Version': "0.001"}

conn = httplib.HTTPSConnection("plex.tv")
conn.request("POST","/users/sign_in.json",txdata,headers)
response = conn.getresponse()
resp = json.load(response);

#extract an element in the response
plexToken = resp["user"]["authToken"]
conn.close()

#building url
requestURL = 'http://'+plexURL+'/status/sessions?X-Plex-Token='+plexToken

from xml.etree import ElementTree as ET

try:
  #call session url
  test = urllib.urlopen(requestURL).read()
  root = ET.XML(test)
  videotitle = root.find('Video').attrib['title']
  print videotitle.encode('utf8')
except Exception:
  print 'N/A'
  pass
C'est bizarre ce problème de parsing XML avec Jeedom, on dirait un problème de droits car si j'essaye d'accéder à "http://192.168.0.XX/.../Scripts/Plex/Plex_Values.xml" via mon navigateur j'obtiens le joli message "Forbidden
You don't have permission to access /.../Scripts/Plex/Plex_Values.xml on this server".

Bref au plaisir de te lire et encore merci pour ton retour.

@+
Salut
Essaie de mettre ton script dans le répertoire/tmp, ou dans un répertoire avec des droits 777 : si ça marche, c'est que l'utilisateur exécutant le script n'a pas le droit d'écriture sur le répertoire...

Envoyé de mon SM-N950F en utilisant Tapatalk

... Pascal ...

Avatar de l’utilisateur
tomdom
Actif
Messages : 925
Inscription : 14 nov. 2016, 05:46

Re: Problème de parsing XML

Message par tomdom » 29 déc. 2018, 07:18

Bonjour,

Concernant l'accès interdit au fichier via l'adresse 192.168.X.X, c'est normal.
Pourquoi accéder au fichier xml via http:// et non pas en mettant le chemin du fichier via file:// si votre script à vraiment besoin d'une url ou en mettant directement le nom du fichier ? Le script qui gère ce xml est bien sur la même machine ?
Il y a 10 catégories de personnes, celles qui connaissent le binaire et les autres
.

Avatar de l’utilisateur
Salvialf
Helper
Messages : 1334
Inscription : 24 févr. 2018, 09:37
Contact :

Re: Problème de parsing XML

Message par Salvialf » 29 déc. 2018, 12:02

Bonjour à vous et merci pour vos idées,

@pascals: effectivement penchant pour un problème de droits, j'ai déjà tenté de mettre les droits complets pour tous les utilisateurs, utiliser un répertoire hors jeedom, et utiliser le répertoire par défaut des scripts en modifiant le fichier .htaccess pour autoriser l'accès à tout le monde. A chaque tentative j'ai eu la même erreur en retour. De plus j'ai bien les droits en lecture et écriture sur les fichiers et le répertoire:
permissions.jpg
permissions.jpg (60.06 Kio) Consulté 3885 fois

@tomdom: je précise une adresse http:// car c'est ce que Jeedom attend comme format. Quand je tente d'afficher le fichier xml directement dans le navigateur je suis sur une autre machine. Si je stipule une autre manière pour y accéder j'ai une erreur de requète http:
erreurhttpxml.jpg
erreurhttpxml.jpg (36.2 Kio) Consulté 3885 fois
J'arrive bien à accéder aux autres fichiers du répertoire par le navigateur via http://192.168.0.XX/.................. c'est le fichier XML qui a l'accès interdit (idem pour le fichier .py d'ailleurs). Je penche plus pour une nouvelle manière qu'a Jeedom pour gérer ces fichiers car @jaska21 (qui est à l'origine de ce script) l'utilisait sans problème et celui-ci n'a plus fonctionné du jour au lendemain.

Résolution: le temps d'écrire ce message j'ai continué de tester en me demandant comment Jeedom gère dorénavant les fichiers xml + cette erreur http qui m'a mis sur la voie. Du coup en renommant le fichier avec l'extension html le parsing xml fonctionne ! :)
Je n'ai plus qu'à remettre le script au propre maintenant.

Merci @ vous de vous y être intéressé ça m'a aidé à y voir plus clair.
VM Jeedom 3.2.16 sous Proxmox 5.4 sur NUC5i5RYH (Debian 9.9)
Helper Officiel Jeedom
Widgets développés
Téléchargement d'icônes domotique (Topic Forum)

Avatar de l’utilisateur
tomdom
Actif
Messages : 925
Inscription : 14 nov. 2016, 05:46

Re: Problème de parsing XML

Message par tomdom » 29 déc. 2018, 12:11

Bonjour,

J'aimerais bien voir le script si ça ne te dérange pas, car je ne comprends pas quel est le script qui gère le fichier .xml. Pour ton information, les fichiers .xml sont bloqués par le .htaccess qui se trouve sous /var/www/html. Quand je parlais de remplacer http:// par file:// c'est au niveau du script.
Il y a 10 catégories de personnes, celles qui connaissent le binaire et les autres
.

Avatar de l’utilisateur
Salvialf
Helper
Messages : 1334
Inscription : 24 févr. 2018, 09:37
Contact :

Re: Problème de parsing XML

Message par Salvialf » 29 déc. 2018, 14:01

tomdom a écrit :
29 déc. 2018, 12:11
Bonjour,

J'aimerais bien voir le script si ça ne te dérange pas, car je ne comprends pas quel est le script qui gère le fichier .xml. Pour ton information, les fichiers .xml sont bloqués par le .htaccess qui se trouve sous /var/www/html. Quand je parlais de remplacer http:// par file:// c'est au niveau du script.
Je te l'avais déjà mis sur ce topic: viewtopic.php?p=679108#p679108

le fichier php récupère les infos et transforme les attributs en valeur via un fichier xsl:

Code : Tout sélectionner

<?php      

  	$FichierXML="http://192.168.0.XX:32400/status/sessions?X-Plex-Token=XXXXXXXXXXXXXXXX";
	$FichierXSL="/var/www/html/montheme/Scripts/Plex/XMLPlex.xsl";

	$DocDOM_XML = new DomDocument();
	$DocDOM_XML->load($FichierXML);
	
	$DocDOM_XSL = new DomDocument();
	$DocDOM_XSL->load($FichierXSL);

	$Processus = new XSLTProcessor;
	$Processus->importStyleSheet($DocDOM_XSL);
	
    $XML_Resultat = $Processus->transformToXML($DocDOM_XML);
	file_put_contents('/var/www/html/montheme/Scripts/Plex/PlexValues.xml', $XML_Resultat);
    
?>
Le fichier XMLPlex.xsl:

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" /> 

<xsl:template match="MediaContainer"> 
    <MediaContainer>
      <xsl:for-each select="Video"> 
            <Video>
              <NumBiblio><xsl:value-of select="@librarySectionID"></xsl:value-of></NumBiblio>
              <NameBiblio><xsl:value-of select="@librarySectionTitle"></xsl:value-of></NameBiblio>
              <Titre><xsl:value-of select="@title"></xsl:value-of> (<xsl:value-of select="@year"></xsl:value-of>)</Titre>
              <Duree><xsl:value-of select="@duration"></xsl:value-of></Duree>
              <EtatLecture><xsl:value-of select="Player/@state"></xsl:value-of></EtatLecture>
              <IPClient><xsl:value-of select="Player/@address"></xsl:value-of></IPClient>
              <TypeAcces><xsl:value-of select="Session/@location"></xsl:value-of></TypeAcces>
              <Plateforme><xsl:value-of select="Player/@platform"></xsl:value-of></Plateforme>
              <Machine><xsl:value-of select="Player/@device"></xsl:value-of></Machine>
            </Video>
      </xsl:for-each>          
	  <xsl:for-each select="Track"> 
            <Track>
              <NumBiblio><xsl:value-of select="@librarySectionID"></xsl:value-of></NumBiblio>
              <NameBiblio><xsl:value-of select="@librarySectionTitle"></xsl:value-of></NameBiblio>
              <Titre><xsl:value-of select="@title"></xsl:value-of> (<xsl:value-of select="@year"></xsl:value-of>)</Titre>
              <Duree><xsl:value-of select="@duration"></xsl:value-of></Duree>
              <EtatLecture><xsl:value-of select="Player/@state"></xsl:value-of></EtatLecture>
              <IPClient><xsl:value-of select="Player/@address"></xsl:value-of></IPClient>
              <TypeAcces><xsl:value-of select="Session/@location"></xsl:value-of></TypeAcces>
              <Plateforme><xsl:value-of select="Player/@platform"></xsl:value-of></Plateforme>
              <Machine><xsl:value-of select="Player/@device"></xsl:value-of></Machine>
            </Track>       
	  </xsl:for-each>
	</MediaContainer>
</xsl:template>
</xsl:stylesheet>
MERCI @tomdom c'est ce fichier .htaccess que je cherchais !! En modifiant:

Code : Tout sélectionner

<Files ~ ".*\.xml$">
        order allow,deny
        deny from all
        satisfy all
</Files>
par:

Code : Tout sélectionner

<Files ~ ".*\.xml$">
        order allow,deny
        allow from all
        satisfy all
</Files>
le script fonctionne maintenant parfaitement et je suis en mesure d'afficher le xml directement dans le navigateur, c'était bien un problème de droits d'accès.

Je profite de tes connaissances encore un peu, à ton avis la modification que j'ai effectué est t'elle correcte en terme de sécurité ou devrais-je procéder autrement ?
VM Jeedom 3.2.16 sous Proxmox 5.4 sur NUC5i5RYH (Debian 9.9)
Helper Officiel Jeedom
Widgets développés
Téléchargement d'icônes domotique (Topic Forum)

Avatar de l’utilisateur
tomdom
Actif
Messages : 925
Inscription : 14 nov. 2016, 05:46

Re: Problème de parsing XML

Message par tomdom » 29 déc. 2018, 16:55

Bonjour,

Tu devrais avoir çà :

Code : Tout sélectionner

<Files ~ ".*\.xml$">
        order allow,deny
        deny from all
        allow from 127.0.0.1
        allow from 192.168.X
        satisfy all
</Files>
X est le n° de ton réseau. Comme ça tu limites l'accès aux fichiers .xml qu'à ton réseau interne.
Il y a 10 catégories de personnes, celles qui connaissent le binaire et les autres
.

Avatar de l’utilisateur
Salvialf
Helper
Messages : 1334
Inscription : 24 févr. 2018, 09:37
Contact :

Re: Problème de parsing XML

Message par Salvialf » 29 déc. 2018, 16:57

Ok je teste ça en rentrant, j'ai essayé la même chose juste avec la ligne 127.0.0.1 mais ça ne fonctionnait pas du coup j'ai remis "allow from all"

Merci encore
VM Jeedom 3.2.16 sous Proxmox 5.4 sur NUC5i5RYH (Debian 9.9)
Helper Officiel Jeedom
Widgets développés
Téléchargement d'icônes domotique (Topic Forum)

Avatar de l’utilisateur
tomdom
Actif
Messages : 925
Inscription : 14 nov. 2016, 05:46

Re: Problème de parsing XML

Message par tomdom » 29 déc. 2018, 17:00

Juste une remarque. Le problème n'est pas que les fichiers ne soient pas dans /var/www/html/plugins/script/core/ressources/ ?
Il y a 10 catégories de personnes, celles qui connaissent le binaire et les autres
.

Avatar de l’utilisateur
Salvialf
Helper
Messages : 1334
Inscription : 24 févr. 2018, 09:37
Contact :

Re: Problème de parsing XML

Message par Salvialf » 29 déc. 2018, 17:03

Non j'ai testé avant et le problème était toujours présent même en modifiant le .htaccess qui s'y trouve car obligatoire chez moi pour accéder aux fichiers... ce qui m'embêtait c'est pour ça que j'ai remis tous les fichiers ailleurs.

C'est bien le .htaccess à la racine de jeedom qui bloque les fichiers xml


Dernière édition par Salvialf le 29 déc. 2018, 17:03, édité 2 fois.
VM Jeedom 3.2.16 sous Proxmox 5.4 sur NUC5i5RYH (Debian 9.9)
Helper Officiel Jeedom
Widgets développés
Téléchargement d'icônes domotique (Topic Forum)

Avatar de l’utilisateur
Salvialf
Helper
Messages : 1334
Inscription : 24 févr. 2018, 09:37
Contact :

Re: Problème de parsing XML

Message par Salvialf » 29 déc. 2018, 21:14

tomdom a écrit :
29 déc. 2018, 16:55
Bonjour,

Tu devrais avoir çà :

Code : Tout sélectionner

<Files ~ ".*\.xml$">
        order allow,deny
        deny from all
        allow from 127.0.0.1
        allow from 192.168.X
        satisfy all
</Files>
X est le n° de ton réseau. Comme ça tu limites l'accès aux fichiers .xml qu'à ton réseau interne.
Parfait ! Merci c'est bien mieux comme ça.

Edit: J'ai dû enlever la ligne "deny from all" car il m'avait à nouveau bloqué l'accès.
VM Jeedom 3.2.16 sous Proxmox 5.4 sur NUC5i5RYH (Debian 9.9)
Helper Officiel Jeedom
Widgets développés
Téléchargement d'icônes domotique (Topic Forum)

Avatar de l’utilisateur
tomdom
Actif
Messages : 925
Inscription : 14 nov. 2016, 05:46

Re: Problème de parsing XML

Message par tomdom » 30 déc. 2018, 02:21

Met la ligne deny from all après les 2 lignes allow ou inverse le order (deny, allow)
Il y a 10 catégories de personnes, celles qui connaissent le binaire et les autres
.

Avatar de l’utilisateur
Salvialf
Helper
Messages : 1334
Inscription : 24 févr. 2018, 09:37
Contact :

Re: Problème de parsing XML

Message par Salvialf » 30 déc. 2018, 14:52

tomdom a écrit :
30 déc. 2018, 02:21
Met la ligne deny from all après les 2 lignes allow ou inverse le order (deny, allow)
J'avais déjà testé de mettre la ligne "deny from all" après les "allow" sans succès. Par contre en inversant l'ordre "deny, allow" c'est bon :D
VM Jeedom 3.2.16 sous Proxmox 5.4 sur NUC5i5RYH (Debian 9.9)
Helper Officiel Jeedom
Widgets développés
Téléchargement d'icônes domotique (Topic Forum)

jaska21
Timide
Messages : 39
Inscription : 29 janv. 2016, 10:30

Re: Problème de parsing XML

Message par jaska21 » 02 janv. 2019, 11:09

Bonjour Salvialf, bonjour tomdom,

à priori, le problème des droits d'accès semble résolu, donc je vais plutôt orienter ma réponse sur le script en lui-même ;)
Comme je l'ai indiqué, le fichier XML posait des soucis d'interprétation dans Jeedom (et surtout était bloqué en lecture !), donc je suis passé au format JSON, à priori mieux adapté. Pour la méthode, rien ne change : Je récupère le fichier XML "standard" généré par Plex, je le transforme via XSLT, je récupère une chaine XML que je converti en JSON (c'est là la nouveauté)

Donc le script PHP qui traite le XML "standard" de Plex :
ConvertXML.php

Code : Tout sélectionner

<?php      
  	// Traitement du fichier initial
    // ---------------------------------------------------------------
	
  	$FichierPLEX="http://ip_plex:port_plex/status/sessions?X-Plex-Token=xxxxxxxxxxxxxxxxxxxxxxxxxxx";
	$FichierXSL="/var/www/html/plugins/script/core/ressources/Plex/XML_Plex.xsl";

	// Fichiers Source et Destination
	$Fichier_Plex_Local="/var/www/html/plugins/script/core/ressources/Plex/Plex_Local.xml";
	$Fichier_JSON_Simple="/var/www/html/plugins/script/core/ressources/Plex/Plex_Values.json";

	// Destruction préalable pour éviter les faux-positifs
	unlink($Fichier_Plex_Local);
	unlink($Fichier_JSON_Simple);

	$Contenu=file_get_contents($FichierPLEX);
	file_put_contents($Fichier_Plex_Local, $Contenu);


	// On teste si le fichier fait plus de 200 octets (dans le cas contraire, c'est que Plex n'est pas lancé)
	if (filesize($Fichier_Plex_Local) > 200)
    {
      $DocDOM_XML = new DomDocument();
      $DocDOM_XML->load($Fichier_Plex_Local);

      $DocDOM_XSL = new DomDocument();
      $DocDOM_XSL->load($FichierXSL);

      $Processus = new XSLTProcessor;
      $Processus->importStyleSheet($DocDOM_XSL);

      $XML_Resultat = $Processus->transformToXML($DocDOM_XML);
      $Chaine_XML = simplexml_load_string($XML_Resultat);
      $JSON_Resultat = json_encode($Chaine_XML);
      
      file_put_contents($Fichier_JSON_Simple, $JSON_Resultat);
      
      // Mise à 1 d'une variable Jeedom qui servira de déclencheur au scénario
      echo "1";
      
    } else {
      // Destruction du fichier local pour éviter les traitements superflux
      unlink($Fichier_Plex_Local);    
      // Mise à 0 de la variable Jeedom
      echo "0";
    }

?>
et voilà un beau fichier JSON tout propre :D

Concernant le XSLT (pour passer d'un fichier XML Plex "standard" à un XML "exploitable"), et qui , pour répondre à Salvialf, permet d'avoir une durée lisible, voici le code :
XML_Plex.xsl

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" /> 

<xsl:template match="MediaContainer"> 
	  <xsl:for-each select="Video"> 
            <Video>
              <NumBiblio><xsl:value-of select="@librarySectionID"></xsl:value-of></NumBiblio>
              <NameBiblio><xsl:value-of select="@librarySectionTitle"></xsl:value-of></NameBiblio>
              <Titre><xsl:value-of select="@title"></xsl:value-of> (<xsl:value-of select="@year"></xsl:value-of>)</Titre>
              <xsl:variable name="Heure" select="floor(@duration div 3600000)" />
              <xsl:variable name="Minute" select="floor((@duration - ($Heure*3600000)) div 60000)" />
              <xsl:variable name="Seconde" select="floor((@duration - ($Heure*3600000) - ($Minute*60000)) div 1000)" />
              <Duree><xsl:value-of select="concat($Heure,':',$Minute,':',$Seconde)"></xsl:value-of></Duree>
              <TimeJeedom><xsl:value-of select="concat($Heure,$Minute)"></xsl:value-of></TimeJeedom>  
              <EtatLecture><xsl:value-of select="Player/@state"></xsl:value-of></EtatLecture>
              <IPClient><xsl:value-of select="Player/@address"></xsl:value-of></IPClient>
              <TypeAcces><xsl:value-of select="Session/@location"></xsl:value-of></TypeAcces>
              <Plateforme><xsl:value-of select="Player/@platform"></xsl:value-of></Plateforme>
              <Machine><xsl:value-of select="Player/@device"></xsl:value-of></Machine>
            </Video>       
	  </xsl:for-each>
</xsl:template>

</xsl:stylesheet>
Un fois fait, j'ai 2 scripts spécifiques. Le 1er permet de récupérer l'état de la conversion (le résultat de echo "0" ou echo "1" du script PHP), ce qui me permet d'avoir un déclencheur propre. NB : ce script s'exécute toutes les minutes via CRON
Image

Le 2ème ne se lance que si le résultat de script précédent est à 1. Il permet de récupérer les infos du JSON
Image

Et maintenant, les scénarii qui vont bien (y en a 2 !) :)
1er scénario : réaction à l'état du 1er script. si l'état passe à 1, on active + lance mon scénario qui gère les lumières (ou autre chose, peu importe ;) ). Dans le cas contraire (si l'état passe à 0), on arrête et désactive le 2ème scénario (sinon, vos lumières vont se couper toutes les minutes une fois que Plex sera arrêté ! Et c'est chiant d'appuyer toutes les minutes sur un interrupteur :D )
2ème scénario : le traitement proprement dit de ce qui doit être fait quand Plex est lancé (éteindre des lumières sur Start, mettre une veilleuse sur Pause, diminuer le volume passé 23h, etc...)

Et voilà, vous savez tout... Et chez moi, ça marche nickel

Si il y a besoin d'infos complémentaires, n'hésitez pas !

Bonne journée

Répondre

Revenir vers « [Plugin officiel] Scripts »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Bing [Bot] et 2 invités