Légende
|
Bonjour à tous ,
Je voulais vous presenter un cas pratique de l'utilisation des flux XML mis a dispo via le portail de SoE ! Si vous vous rendez sur la page de garde du site des Nomades => http://www.guilde-nomades.org , vous retrouver les information IG en temps réel des infos de VGplayer des effectif de la guildes, leurs classe artisanale et d'aventure, ainsi qu'un lien pointant vers leur fiche personalisé ! Donc un bon point pour SoE qui affranchi la longue et fatiguante tache pour recenser les lvl et autre informations des membres IG !
__________________
http://www.canardpc.com |
06/02/2007, 18h07 |
|
Aller à la page... |
Utiliter des flux XML des guildes, cas pratique
Suivre Répondre |
|
Partager | Rechercher |
|
Citation :
|
06/02/2007, 18h42 |
|
Légende
|
Bon aller je poste mon ptit script tous sale
Code:
$xml = "http://www.guilde-nomades.org/files/guilde-nomades.xml"; # emplacement du fichier XML $error_vg = false ; $fp = fopen($xml, "r") or $error_vg = true; if ($error_vg) { $str_member = "<div style=\"width=100%;text-align:center;font-weight:bold;background-color:#9a7d4f\">Service temporairement indisponible<br/>Raffraichissez la page ou attendez quelques minutes</div>" ; #en cas de pb afficher un message d'erreur elegant ;) }else{ /*********DEBUT DE TRAITEMENT DU FICHER XML*********/ while (!feof($fp)) { $data .= fgets($fp, 2048); } fclose($fp); $data = str_replace("<","<",$data); $data = str_replace(">",">",$data); $data = str_replace(" "," ",$data); $data = str_replace("⁄","/",$data); $data = str_replace("<br>","",$data); $data = str_replace("<p>","",$data); // Déclaration de la fonction récursive ParseNode() function ParseNode($node, &$array) { global $id; $childnodes = $node->child_nodes(); foreach ($childnodes as $childnode) { if (trim($childnode->tagname) == "id") { $id = $childnode->get_content(); } elseif (trim($childnode->tagname) != "") { ParseNode($childnode, $array); } elseif (trim($childnode->node_name()) == "#text" && trim($childnode->get_content()) != "") { $array[$id][$node->tagname] = $childnode->get_content(); } } } // Parsing du document XML via la fonction ParseNode() $domdoc = domxml_open_mem($data); $root = $domdoc->document_element(); $arraydoc = array(); ParseNode($root, $arraydoc); asort($arraydoc) ; /**********FIN DE TRAITEMENT DU FICHER XML*********/ /*********DEBUT CREATION DU CODE HTML ***********/ $guild_name = $arraydoc['111669149893']['name'] ; $guild_server = $arraydoc['111669149893']['server'] ; //echo "<h1>Guilde : $guild_name<br/><h1>" ; //echo "<h3>Server : $guild_server<br/></h3>" ; next($arraydoc); $turn=0 ; $str_member = "<table width=100%><tr><td style=\"text-align:center;font-weight:bold;background-color:#9a7d4f\">Nom</td><td style=\"text-align:center;font-weight:bold;background-color:#9a7d4f\">Aventurier</td><td style=\"text-align:center;font-weight:bold;background-color:#9a7d4f\">Artisant</td></tr>" ; while ($member = current($arraydoc)) { if (strcmp($member['name'],'Lyndsay') && strcmp($member['name'],'Flogtestbis')) { #ceci est un bug fix du XML pour ma guilde $key=key($arraydoc) ; $str_member = $str_member."<tr><td><span style=\"font-size:10px\">"; $str_member = $str_member."<a href=\"http://vgplayers.station.sony.com/characters.vm?characterId=$key\">".$member['guildRank']." <b>".$member['name']."</b></a></span></td>" ; $ad_name = explode(" ",$member['adventureClass']) ; $ad_name[0] == "Dread" ? $ad_name[0] = "Dread Knight" : $ad_name[0] = $ad_name[0] ; $str_member = $str_member."<td><span style=\"font-size:10px\">".$ad_name[0]." niveau ".$member['adventureLevel']."</span></td>" ; $cr_name = explode(" ",$member['craftingClass']) ; $str_member = $str_member."<td><span style=\"font-size:10px\">".$cr_name[0]." niveau ".$member['craftingLevel']."</span></td>" ; $str_member = $str_member."</tr>"; } next($arraydoc) ; } $str_member = $str_member."</table>"; /*********DEBUT CREATION DU CODE HTML ***********/ }
__________________
http://www.canardpc.com |
08/02/2007, 17h23 |
|
|
Citation :
Si c'est le meme c'est pas du temps reel, y a entre 24 et48h de decalage. |
08/02/2007, 17h32 |
|
Légende
|
J'y ai pensé aussi pour le temps de synchro mais vu les ressources nessaissare ^^, je prefere etre a jour 2 heure maxi apres les modif que 24h ^^.
En effet je me synchronise sur VGplayer mais j'ai changé le script car si VG est down l'info l'ai aussi, donc je taf sur une copie local (automatiser a 2H de synchro). Le grand avantage n'etant pas être a 100% temps reel mais surtout d'avoir des informations mis a jour toute seul ^^.
__________________
http://www.canardpc.com |
08/02/2007, 17h52 |
|
|
Ozzy stop te la péter avec tes commandes, t'es tout weak (quoi je flood ? ^^).
PS : ceci est un up déguisé pour montrer le jolie travail que mon collègue nomade à fait . |
08/02/2007, 18h50 |
|
|
effectivement trés bon boulot
la c'est un peu tard mais demain je verrai si y a pas moyen d'intégrer ca sur notre site .. avec la permission des nomades bien sur |
09/02/2007, 00h10 |
|
|
Pour la partie relative au traitement du document XML je l'ai mis à disposition pour que ça soit utilisé justement donc c'est libre service Pour le script qui choppe les infos depuis VGplayers cf. mon message pour PHP4 et la version de Choucas pour PHP5. Ozerworld passe par une étape intermédiaire de recomposition du document XML en local qu'il lance en batch mais on peut tout aussi bien faire une insertion dans une base de donnée.
|
09/02/2007, 00h33 |
|
Légende
|
Exact, merci beaucoup HellR d'ailleur, honte a moi de ne pas avoir citer ton bout de code
Pour le reste du code c'est GPLv3 on va dire |
09/02/2007, 12h05 |
|
|
Ca marche très bien sur mon compte free :/
http://hellr.free.fr/vg/siggen/parse...d=111669149799 (j'ai fait un print_r() de l'array). |
10/02/2007, 16h12 |
|
|
Le flux xml est très rapide, c'est le site même avec ses flash et autres scripts qui est lent.
Regarde ton flux par exemple: http://vgplayers.station.sony.com/in...d=111669149818 |
10/02/2007, 20h06 |
|
|
hoooo mon flux xml **larme à l'oeil** c'est le plus beau flux xml du monde eEEnnntier
(ps : j'avais trouvé avant na ) |
10/02/2007, 20h23 |
|
Légende
|
Bon bien je suis passé sur la BDD pour les tris et c'est vachement mieu en perf et en tri !
La base : Code:
CREATE TABLE `phpbb_listmember` ( `lm_key` VARCHAR( 32 ) NOT NULL , `lm_rank` VARCHAR( 20 ) NOT NULL , `lm_adclass` VARCHAR( 20 ) NOT NULL , `lm_adlvl` INT( 8 ) NOT NULL , `lm_crclass` VARCHAR( 20 ) NOT NULL , `lm_crlvl` INT( 20 ) NOT NULL , `lm_name` VARCHAR( 50 ) NOT NULL ) ENGINE = MYISAM ; Code:
$xml = "http://www.guilde-nomades.org/files/guilde-nomades.xml"; $error_vg = false ; $fp = fopen($xml, "r") or $error_vg = true; if ($error_vg) { }else{ while (!feof($fp)) { $data .= fgets($fp, 2048); } fclose($fp); // Déclaration de la fonction récursive ParseNode() function ParseNode($node, &$array) { global $id; $childnodes = $node->child_nodes(); foreach ($childnodes as $childnode) { if (trim($childnode->tagname) == "id") { $id = $childnode->get_content(); } elseif (trim($childnode->tagname) != "") { ParseNode($childnode, $array); } elseif (trim($childnode->node_name()) == "#text" && trim($childnode->get_content()) != "") { $array[$id][$node->tagname] = $childnode->get_content(); } } } // Parsing du document XML via la fonction ParseNode() $domdoc = domxml_open_mem($data); $root = $domdoc->document_element(); $arraydoc = array(); ParseNode($root, $arraydoc); $link = mysql_connect("localhost", "user", "******")or die("Impossible de se connecter"); mysql_select_db("nomades_dnl") or die("Could not select database"); echo "Connection DB nomade ok\n" ; $query = "TRUNCATE table phpbb_listmember" ; $result = mysql_query($query) or die("Query failed"); echo "Table phpbb_listmember vidée\n" ; while ($member = current($arraydoc)) { if (strcmp($member['name'],'Lyndsay') && strcmp($member['name'],'Flogtestbis') && strcmp($member['name'],'Nomades')) { $key=key($arraydoc) ; $member['guildRank'] == "Leader" ? $member['guildRank'] = "Guide" : $member['guildRank'] = $member['guildRank'] ; $member['guildRank'] == "Officer" ? $member['guildRank'] = "Nomade" : $member['guildRank'] = $member['guildRank'] ; $member['guildRank'] == "Member" ? $member['guildRank'] = "Reroll" : $member['guildRank'] = $member['guildRank'] ; $member['guildRank'] == "Initiate" ? $member['guildRank'] = "Caravanier" : $member['guildRank'] = $member['guildRank'] ; $query = "insert into phpbb_listmember (lm_key,lm_rank,lm_adclass,lm_adlvl,lm_crclass,lm_crlvl,lm_name) values (\"$key\",\"".$member['guildRank']."\",\"".$member['adventureClass']."\",".$member['adventureLevel'].",\"".$member['craftingClass']."\",".$member['craftingLevel'].",\"".$member['name']."\");" ; $result = mysql_query($query) or die("Query failed"); echo "Ligne $key ajoutée\n" ; } next($arraydoc) ; } mysql_close($link); } ?>
__________________
http://www.canardpc.com |
13/02/2007, 11h32 |
|
|
Salut,
Je trouve ça super comme script mais pourrais tu expliquer comment on fait pour l'intégrer à un site ?? Je bidouille un peu en infographie mais j'avoue que j'ai pas tout suivi ... je suis même largué ! merci d'avance
__________________
Grattenoix : Saga of 1/2 Giants
|
13/02/2007, 16h39 |
|
Suivre Répondre |
Connectés sur ce fil1 connecté (0 membre et 1 invité)
Afficher la liste détaillée des connectés
|