World of Avalloc - Forum: debut de codage d'un syteme d'addon - World of Avalloc - Forum

Aller au contenu

  • 2 Pages +
  • 1
  • 2
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

debut de codage d'un syteme d'addon pas super fonctionnel :/

#21 L'utilisateur est hors-ligne   DarkPhoenix Icône

  • Membre régulier
  • PipPipPip
  • Groupe : Membres
  • Messages : 377
  • Inscrit(e) : 15-février 10

Posté 27 février 2010 - 19:52

bah d'après ce que j'ai compris il faudrait que le staff rajoute autant de ligne de code que d'utilisateur souhaitant utiliser ma widget dans son fichier XML pour pouvoir accepter les connexion distante qui souhaite télécharger le fichier.
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 L'utilisateur est hors-ligne   vivien Icône

  • Membre régulier
  • PipPipPip
  • Groupe : Membres
  • Messages : 67
  • Inscrit(e) : 13-février 10

Posté 02 mars 2010 - 14:19

voici la dernière version, affiche le serveur, sa version, votre classement ainsi que votre progression ... modifier le $fichier pour que ca fonctionne (local ou distant ca marche nickel)


<?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 L'utilisateur est hors-ligne   DarkPhoenix Icône

  • Membre régulier
  • PipPipPip
  • Groupe : Membres
  • Messages : 377
  • Inscrit(e) : 15-février 10

Posté 02 mars 2010 - 14:37

en php ca pose pas de problème de chargé un fichier distant car c'est un langage "serveur". le javascript est un langage "client" donc c'est différent

#24 L'utilisateur est hors-ligne   vivien Icône

  • Membre régulier
  • PipPipPip
  • Groupe : Membres
  • Messages : 67
  • Inscrit(e) : 13-février 10

Posté 02 mars 2010 - 14:41

Et ? le fait est que certain pourrait penser qu'il faut forcement utiliser cURL pour ouvrire une page distante avec php ...

Donc je précise ...

Bientot: enregistrement dans une BDD :D
(et ensuite, faudra que je code un systeme pour que les MaJ se fassent après les calculs de points :/ )

#25 L'utilisateur est hors-ligne   DarkPhoenix Icône

  • Membre régulier
  • PipPipPip
  • Groupe : Membres
  • Messages : 377
  • Inscrit(e) : 15-février 10

Posté 02 mars 2010 - 14:47

Voir le messagevivien, le 02 mars 2010 - 14:41, dit :

Et ? le fait est que certain pourrait penser qu'il faut forcement utiliser cURL pour ouvrire une page distante avec php ...

Donc je précise ...

Bientot: enregistrement dans une BDD :D
(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 L'utilisateur est hors-ligne   vivien Icône

  • Membre régulier
  • PipPipPip
  • Groupe : Membres
  • Messages : 67
  • Inscrit(e) : 13-février 10

Posté 02 mars 2010 - 14:50

j'y avais pas penser >_< verrais si ca allège le code ... sinon, il est lisible comme ca donc bon ... gagner des lignes pour gagner des lignes :/

#27 L'utilisateur est hors-ligne   DarkPhoenix Icône

  • Membre régulier
  • PipPipPip
  • Groupe : Membres
  • Messages : 377
  • Inscrit(e) : 15-février 10

Posté 02 mars 2010 - 15:20

enfin pour une partie le parseurs marche mais de toutes facon t'aura des difficultés avec les zones et technologies

#28 L'utilisateur est hors-ligne   vivien Icône

  • Membre régulier
  • PipPipPip
  • Groupe : Membres
  • Messages : 67
  • Inscrit(e) : 13-février 10

Posté 02 mars 2010 - 19:55

pas sur ... si l'idée que j'ai me permet de contourner le probleme :D je serais obliger de faire une double condition, mais bon, ca devrait marcher :D

Mais ca ce sera pour plus tard, un autre truc a faire pour l'ally avant :D

Bref, je ne manque pas d'idée, mais juste de temps :D

sinon, je ne vois pas ce que tu veut faire avec les regex :/

#29 L'utilisateur est hors-ligne   DarkPhoenix Icône

  • Membre régulier
  • PipPipPip
  • Groupe : Membres
  • Messages : 377
  • Inscrit(e) : 15-février 10

Posté 02 mars 2010 - 21:39

la plupart du temps les parseurs XML utilise les regex pour repérer les balise ouvrante / fermante et renvoyé le PCDATA contenu dans chaque élément dont l'utilisateur demande le contenu.
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 L'utilisateur est hors-ligne   Tirias Icône

  • Membre
  • PipPip
  • Groupe : Membres
  • Messages : 21
  • Inscrit(e) : 18-février 10

Posté 02 mars 2010 - 21:49

Alors voila, aprés un peu de travail j'arrive a seulement ceci, mais je me casse sincèrement la tête pour travailler plus loin dans le fichier xml. Ensuite sa ne marche pas car le fichier xml va plus loin --'
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 L'utilisateur est hors-ligne   Tirias Icône

  • Membre
  • PipPip
  • Groupe : Membres
  • Messages : 21
  • Inscrit(e) : 18-février 10

Posté 03 mars 2010 - 17:50

Bonjour bonjour, n'y aurait-il pas quelqu'un qui aurait omis de me parler de simplexml_load_file ? Serieusement.
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
                                        )

                                )

                        )

                )

        )

)


#32 L'utilisateur est hors-ligne   DarkPhoenix Icône

  • Membre régulier
  • PipPipPip
  • Groupe : Membres
  • Messages : 377
  • Inscrit(e) : 15-février 10

Posté 03 mars 2010 - 18:09

peut être que tout le monde ne maitrise pas XPath non plus ...

#33 L'utilisateur est hors-ligne   Tirias Icône

  • Membre
  • PipPip
  • Groupe : Membres
  • Messages : 21
  • Inscrit(e) : 18-février 10

Posté 03 mars 2010 - 20:37

Serieux, voila le code avec ça tu peux tout faire, normalement :

















:lol:
<?php
echo '<pre>';
$xml = simplexml_load_file('adds.xml');
print_r($xml);
echo '</pre>';


#34 L'utilisateur est hors-ligne   DarkPhoenix Icône

  • Membre régulier
  • PipPipPip
  • Groupe : Membres
  • Messages : 377
  • Inscrit(e) : 15-février 10

Posté 04 mars 2010 - 00:38

j'ai pas dit que je ne le maitrisait pas non plus ^^ je parlais pour d'autre joueur touchant à l'informatique. moi je baigne dans les fichier XML en ce moment mais pas sur le même langage ^^

#35 L'utilisateur est hors-ligne   Tyrius Icône

  • Membre régulier
  • PipPipPip
  • Groupe : Membres
  • Messages : 153
  • Inscrit(e) : 23-février 10

Posté 04 mars 2010 - 09:58

Après, ça veut dire que tu es obligé d'avoir apache quelque part... ca limite pour une utilisation chez tous les joueurs lambdas.

Après je dis ça je dis rien :lol:

#36 L'utilisateur est hors-ligne   sanguinarius Icône

  • Membre régulier
  • PipPipPip
  • Groupe : Membres
  • Messages : 78
  • Inscrit(e) : 01-février 10

Posté 04 mars 2010 - 11:13

Tirias non mais tu vas galere question recuperation des batiment par zone :D

#37 L'utilisateur est hors-ligne   Gruldok Icône

  • Membre
  • PipPip
  • Groupe : Membres
  • Messages : 13
  • Inscrit(e) : 14-février 10

Posté 04 mars 2010 - 13:13

Heu vu le fichier xml je pense pas suffit de faire un traitement de chaque batiment pour chaque zones.

Je pense que deux foreach, un pour les zones et un pour les batiments des zones suffit au traitement.

#38 L'utilisateur est hors-ligne   Tirias Icône

  • Membre
  • PipPip
  • Groupe : Membres
  • Messages : 21
  • Inscrit(e) : 18-février 10

Posté 04 mars 2010 - 16:06

Je viens de me rendre compte que je galère. Mais bon, dans tout les cas dès qu'on a ça c'est pas bien dur suffit de savoir ce que veux l'add-ons et donc pas besoin de milliers de foreachs etc

#39 L'utilisateur est hors-ligne   DarkPhoenix Icône

  • Membre régulier
  • PipPipPip
  • Groupe : Membres
  • Messages : 377
  • Inscrit(e) : 15-février 10

Posté 04 mars 2010 - 16:09

a ce moment la y a encore plus simple.

- 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 L'utilisateur est hors-ligne   Tirias Icône

  • Membre
  • PipPip
  • Groupe : Membres
  • Messages : 21
  • Inscrit(e) : 18-février 10

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.

  • 2 Pages +
  • 1
  • 2
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)