debut de codage d'un syteme d'addon pas super fonctionnel :/
#21
Posté 27 février 2010 - 19:52
car sur certain site il dise d'jouter une tête avec "Access-Control-Allow-Origin" pour demander la connexion au serveur qui stocke le fichier ^^
#22
Posté 02 mars 2010 - 14:19
<?php $fichier = "addons-2010-03-01.xml"; function fonctionBaliseOuvrante($parseur, $nomBalise, $tableauAttributs) { global $derniereBaliseRencontree; $derniereBaliseRencontree = $nomBalise; } function fonctionBaliseFermante($parseur, $nomBalise) { global $derniereBaliseRencontree; $derniereBaliseRencontree = ""; } function fonctionTexte($parseur, $texte) { global $derniereBaliseRencontree; switch ($derniereBaliseRencontree) { case "SERVER": echo $texte; break; case "VERSION": echo " [$texte]<br \>"; break; case "PSEUDO": echo "pseudo: \"$texte\"<br \>"; break; case "POINTS_TOTAUX": echo "points: \"$texte\"<br \>"; break; case "PROGRESSION_TOTAL": echo "progression: \"$texte\"<br \>"; break; case "POINTS_ECONOMIQUES": echo "points éco: \"$texte\"<br \>"; break; case "PROGRESSION_ECONOMIQUE": echo "progression éco: \"$texte\"<br \>"; break; case "POINTS_MILITAIRES": echo "points militaires: \"$texte\"<br \>"; break; case "PROGRESSION_MILITAIRE": echo "progression militaire: \"$texte\"<br \>"; break; case "CLASSEMENT": echo "Classement: \"$texte\"<br \>"; break; case "CLASSEMENT_ECONOMIQUE": echo "Classement éco: \"$texte\"<br \>"; break; case "CLASSEMENT_MILITAIRE": echo "classement militaire: \"$texte\"<br \>"; break; case "CLASSEMENTA": echo "Classement alliance: \"$texte\"<br \>"; break; case "POINTSA": echo "Points alli: \"$texte\"<br \>"; break; case "PROGRESSIONA": echo "progression alli: \"$texte\"<br \>"; break; case "TAG": echo "TAG: [$texte]<br \>"; break; } // echo $texte."<br/>"; } $parseurXML = xml_parser_create(); xml_set_element_handler($parseurXML, "fonctionBaliseOuvrante" , "fonctionBaliseFermante"); xml_set_character_data_handler($parseurXML, "fonctionTexte"); $fp = fopen($fichier, "r"); if (!$fp) die("Impossible d'ouvrir le fichier XML"); while ( $ligneXML = fgets($fp, 1024)) { xml_parse($parseurXML, $ligneXML, feof($fp)) or die("Erreur XML"); } xml_parser_free($parseurXML); fclose($fp); ?>
Ce message a été modifié par vivien - 02 mars 2010 - 14:20.
#23
Posté 02 mars 2010 - 14:37
#24
Posté 02 mars 2010 - 14:41
Donc je précise ...
Bientot: enregistrement dans une BDD
(et ensuite, faudra que je code un systeme pour que les MaJ se fassent après les calculs de points :/ )
#25
Posté 02 mars 2010 - 14:47
vivien, le 02 mars 2010 - 14:41, dit :
Donc je précise ...
Bientot: enregistrement dans une BDD
(et ensuite, faudra que je code un systeme pour que les MaJ se fassent après les calculs de points :/ )
pour ton parseur, utilise les regex , ca prendra moins de lignes de code ^^
j'ai jamais trop apprécier le php pour certaines chose comme le switch par exemple qui est vraiment baclé ...il reste encore beaucoup de chose à faire pour que le php soit un langage incontournable. bien qu'on l'utilise beaucoup pour les site internet ^^
#26
Posté 02 mars 2010 - 14:50
#27
Posté 02 mars 2010 - 15:20
#28
Posté 02 mars 2010 - 19:55
Mais ca ce sera pour plus tard, un autre truc a faire pour l'ally avant
Bref, je ne manque pas d'idée, mais juste de temps
sinon, je ne vois pas ce que tu veut faire avec les regex :/
#29
Posté 02 mars 2010 - 21:39
donc rien ne t'empêche de créer toi même ton propre parseur avec les regex pour récupérer ses balises et ensuite les éléments PCDATA
#30
Posté 02 mars 2010 - 21:49
Array ( [systeme] => Array ( [#text] => [server] => Monde 1 [version] => v1.0.3 [sysdate] => 2010-02-18 12:55:19 ) [compte] => Array ( [#text] => [pseudo] => Tirias [points_totaux] => 1 [points_economiques] => 1 [points_militaires] => 0 [progression_total] => -26 [progression_economique] => -26 [progression_militaire] => 0 [classement] => 1062 [messages] => 0 [notifications] => 0 [specialite_primaire] => GUERRIER [specialite_secondaire] => SCIENTIFIQUE )
#31
Posté 03 mars 2010 - 17:50
Tout est tellement plus simple avec deux lignes de code ...
SimpleXMLElement Object ( [systeme] => SimpleXMLElement Object ( [server] => Monde 1 [version] => v1.0.3 [sysdate] => 2010-02-18 12:55:19 ) [compte] => SimpleXMLElement Object ( [pseudo] => Tirias [points_totaux] => 1 [points_economiques] => 1 [points_militaires] => 0 [progression_total] => -26 [progression_economique] => -26 [progression_militaire] => 0 [classement] => 1062 [messages] => 0 [notifications] => 0 [specialite_primaire] => GUERRIER [specialite_secondaire] => SCIENTIFIQUE ) [technologies] => SimpleXMLElement Object ( [technologie] => Array ( [0] => SimpleXMLElement Object ( [nom] => Balistique [niveau] => 3 ) [1] => SimpleXMLElement Object ( [nom] => Energie [niveau] => 3 ) [2] => SimpleXMLElement Object ( [nom] => Equipement [niveau] => 2 ) [3] => SimpleXMLElement Object ( [nom] => Optique [niveau] => 2 ) [4] => SimpleXMLElement Object ( [nom] => Sciences Physiques & Mathématiques [niveau] => 3 ) ) ) [zones] => SimpleXMLElement Object ( [zone] => SimpleXMLElement Object ( [nom] => UnderState [x] => 66 [y] => 118 [slots_pris] => 49 [slots_totaux] => 250 [pierre] => 1999 [metal] => 1439.7594444314 [petrole] => 1030 [uranium] => 592 [debris] => 0 [electricite_pris] => 102 [electricite_totale] => 133 [batiments] => SimpleXMLElement Object ( [batiment] => Array ( [0] => SimpleXMLElement Object ( [nom] => Base Impériale [niveau] => 5 ) [1] => SimpleXMLElement Object ( [nom] => Mine de Métal [niveau] => 9 ) [2] => SimpleXMLElement Object ( [nom] => Carrière de Pierre [niveau] => 9 ) [3] => SimpleXMLElement Object ( [nom] => Puits de Pétrole [niveau] => 8 ) [4] => SimpleXMLElement Object ( [nom] => Mine d'Uranium [niveau] => 8 ) [5] => SimpleXMLElement Object ( [nom] => Centrale Thermique [niveau] => 7 ) [6] => SimpleXMLElement Object ( [nom] => Complexe Militaire [niveau] => 1 ) [7] => SimpleXMLElement Object ( [nom] => Laboratoire Scientifique [niveau] => 2 ) ) ) ) ) )
#33
Posté 03 mars 2010 - 20:37
<?php echo '<pre>'; $xml = simplexml_load_file('adds.xml'); print_r($xml); echo '</pre>';
#34
Posté 04 mars 2010 - 00:38
#35
Posté 04 mars 2010 - 09:58
Après je dis ça je dis rien
#36
Posté 04 mars 2010 - 11:13
#37
Posté 04 mars 2010 - 13:13
Je pense que deux foreach, un pour les zones et un pour les batiments des zones suffit au traitement.
#38
Posté 04 mars 2010 - 16:06
#39
Posté 04 mars 2010 - 16:09
- tu télécharge et enregistre le fichier son ton HDD
- une fois cela fais tu créé un fichier XSLT qui va mettre en forme le fichier XML. tu peux même créé un nouveau fichier XML avec un fichier XSLT et ensuite utilisé tranquilement php pour récupérer les données
#40
Posté 04 mars 2010 - 16:52
<?php echo '<ul>'; class AddOns { private $simpleXML; public function __construct($url) { if(is_string($url)) { if(!preg_match('#^http://.+#isU', $url)) { throw new Exception('L\'URL proposée n\'est pas valide'); } else { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); if($contenu = curl_exec($curl)) { $this->simpleXML = new simpleXMLElement($contenu); } else { throw new Exception('La connexion au serveur distant n\'a pas put être effectuée. Vérifiez votre URL'); } } } else { throw new Exception('Vous devez fournier l\'URL sous forme d\'une chaine de caractère'); } } public function replaceArray($arr) { $arr = (array)$arr; $argc = func_num_args(); if($argc != 1) { $argv = func_get_args(); for ($i = 1; $i < $argc; $i++) $arr = array_merge($arr, (array)$argv[$i]); } $temparr = array(); foreach($arr as $key => $value) { if(is_array($value)) $temparr = array_merge($temparr, $this->replaceArray($value)); else $temparr = array_merge($temparr, array($key => $value)); } return $temparr; } public function seekDatas($data, $arr = null) { $return = array(); foreach($arr as $key => $value) { if(is_object($value)) { $return[] = $this->seek($data, $value); if($key == $data) { $return[] = $value; } } if(!is_object($value)) { if($key == $data) { $return[] = $value; } } } foreach($return as $key => $value) { if(empty($value)) { unset($return[$key]); } } $return = $this->replaceArray($return); return $return; } public function __get($var) { return $this->$var; } } try { $adds = new AddOns('""""'); $adds->seekDatas('technologie', $adds->simpleXML); } catch(Exception $e) { echo '<p>Erreur :'.$e->getMessage().'</p>'; }
Bon voila pour ce qui veulent.
D'ailleurs je suis étonné, ma méthode seekDatas fonctionne super bien, on peut récupérer ce qu'on veux : les noms, les niveaux etc. A vous d'essayer.