Exploiter le nouveau ladder

Répondre
Partager Rechercher
Citation :
Publié par Olol Jol
Je crois pas que c'est dans Apache module, mais j'utilise pas WAMP.
Par contre, t'as vérifié que ton hébergeur avait PHP 5.2 et curl ?
J'ai Free, et j'ai lu qu'apparemment il fallait faire quelque chose pour l'adapter?

Sinon là tout est en local (127.0.0.1, localhost) sous WAMP, EDIT : c'est bon j'ai trouvé, quelle tête en l'air je fais... alala

Donc finalement le code de Garfunk marche à merveille et je l'en remercie infiniment ! Mais quand j'ai par exemple ça :

Pseudo : Lynnae
Niveau : 148
Classe : Crâ
Metier 1 : Bûcheron, XP de ce métier : 22267
Metier 2 : Mineur, XP de ce métier : 1116


Je fais comment pour par exemple je fais une page personnages.php

Et je met chaque membre de ma guilde à affichage permanent sans formulaire de recherche donc.

Par exemple,

Pseudo : Haliaen
Niveau : 193
Classe : Crâ

Juste comme ça afficher, que quand il UP donc par conséquent, ça se mette à jour?
Tu met tout les membres de ta Guilde dans une base de données
Tu récupère les pseudos.
Tu fais une boucle pour récupérer leurs infos
( si tu veut signaler qu'il a up depuis, tu compare les données avec celle dans la base de données)
Tu met à jour la base de données.
Message supprimé par son auteur.
C'pas le must niveau optimisation mais bon

Citation :
<?php

//variables d'informations
$servers = array('1'=>'Jiva','2'=>'Rushu','3'=>'Djaul','4'=>'Raval','5'=>'Hecate','6'=>'Sumens','7'=>'Menalt','8'=>'Rosal','9'=>'Maimane','10'=>'Silvosse','11'=>'Brumaire','12'=>'Pouchecot','13'=>'Silouate','14'=>'Domen','15'=>'Amayiro','16'=>'Rykke-Errel','17'=>'Hyrkul','18'=>'Helsephine','19'=>'Allister','20'=>'Otomaï','21'=>'Lily','23'=>'Hel Munster','24'=>'Danathor','25'=>'Kuri','26'=>'Mylaise','27'=>'Goultard', '28'=>'Ulette');
$classes = array('','Féca','Osamodas','Enutrof','Sram','Xélor','Ecaflip','Eniripsa','Iop','Crâ','Sadida','Sacrieur','Pandawa');
$jobs = array('28'=>'Paysan','25'=>'Boulanger','2'=>'Bûcheron','24'=>'Mineur','41'=>'Chasseur','56'=>'Boucher','36'=>'Pêcheur','58'=>'Poissonnier','26'=>'Alchimiste','65'=>'Bricoleur','16'=>'Bijoutier','63'=>'Joaillomage','15'=>'Cordonnier','62'=>'Cordomage','27'=>'Tailleur','64'=>'Costumage','18'=>'Sculpteur de bâtons','50'=>'Sculptemage de bâton','13'=>'Sculpteur d\'arc','48'=>'Sculptemage d\'arc','19'=>'Sculpteur de baguettes','49'=>'Sculptemage de baguettes','11'=>'Forgeur d\'épée','44'=>'Forgemage d\'épée','14'=>'Forgeur de marteau','45'=>'Forgemage de marteau','17'=>'Forgeur de dague','43'=>'Forgemage de dague','20'=>'Forgeur de pelle','46'=>'Forgemage de pelle','31'=>'Forgeur de hache','47'=>'Forgemage de hache','60'=>'Forgeur de bouclier');
$server='3';


function GetNewFromLadder($pseudo) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.dofus.com/requests/ladder_versus');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'na='.$pseudo);
$json = curl_exec($ch);
curl_close($ch);
$j = json_decode($json, true);
return $j;
}

//Connexion à la base de données
mysql_connect('localhost', 'root', '');
mysql_select_db('guilde');

//On récupère les pseudos de tes guildeux
$membres=mysql_query("SELECT pseudo,lvl FROM membres;");

//On récupère leurs infos
while ($membre= mysql_fetch_array($membres)) {
$perso = GetNewFromLadder($membre['pseudo']);

//Pour éviter de récuperer les infos des persos homonymes d'un autre serv'
if ($perso != null) {
foreach($perso as $p=>$infos) {
if ($infos['hs'] == $server) {
$perso = $infos;
}
}

echo '
Pseudo : '.$perso['na'].'<br />
Classe : '.$classes[$perso['br']].'<br />
Niveau : '.$perso['le'];

if($perso['le']>$membre['lvl']){echo '<font color=red> UP</font><br>';}


echo '<br>Xp : '.$perso['xp'].'<br />';
for ($i = 1; $i < 7; $i++) {
if ($perso['j'.$i.'i'] != 0) {
echo 'Metier '.$i.' : '.$jobs[$perso['j'.$i.'i']].', XP de ce métier : '.$perso['j'.$i.'l'].'<br />';
}
}
//On met à jour la bdd
mysql_query("UPDATE membres SET lvl='$perso[le]',xp='$perso[xp]' WHERE pseudo='$membre[pseudo]';");
echo '<br><hr><br>';
}
}


?>
Citation :
Publié par Tetio
voici ce que vous récupérez comme infos à partir du ladder
Code PHP:

Array
(
    [
0] => Array
        (
            [
id] => 212985800004 //votre identifiant unique (les 5 derniers chiffre, indique l'identifiant du server - ex: 4 = Raval)
            
[hs] => //identifiant du serveur
            
[na] => -Tetio//votre pseudo
            
[br] => //votre identifiant de classe (1: Feca, 2: Osa, 3: Enu, 4: Sram, 5: Xelor, 6: Eca, 7: Eni, 8: Iop, 9: Cra, 10: Sadi, 11: Sacri, 12: Panda
            
[se] => //sexe de votre perso (0: male, 1: femelle)
            
[le] => 164 //votre level
            
[xp] => //votre xp ces dernières 24h
            
[rk] => 13971 //votre rang global
            
[rks] => 1128 //votre rang sur le serveur
            
[rkb] => 794 //votre rang par classe
            
[rkbs] => 85 //votre rang sur le serveur, par classe
            
[ki] => 0  // Combat gagnés en PvM
            
[kis] => 7331 //points d'honneur
            
[lo] => // Combats Perdus en PvM
            
[los] => //points de déshonneur
            
[j1i] => 26 //identifiant de votre 1er métier
            
[j1l] => 699233 //xp de votre 1er métier
            
[j2i] => //identifiant de votre 2eme métier
            
[j2l] => 539752 //identifiant de votre 2eme métier
            
[j3i] => 18 //identifiant de votre 3eme métier
            
[j3l] => 756438 //identifiant de votre 3eme métier
            
[j4i] => 50 //identifiant de votre 4eme métier
            
[j4l] => 732252 //identifiant de votre 4eme métier
            
[j5i] => //identifiant de votre 5eme métier
            
[j5l] => //identifiant de votre 5eme métier
            
[j6i] => //identifiant de votre 6eme métier
            
[j6l] => //identifiant de votre 6eme métier
        
)


Edit : C'était pas lo c'est na, autant pour moi ^^

Tu peut obtenir ça avec la fonction print_r($montableau);
Sinon ce qui peut être interessant, c'est de créer une table supplementaire, pour l'xp, avec l'xp gagné chaque jours, et tu peut facilement faire un Graph après.

Edit: Quelqu'un à un moyen pour récupérer, non pas par pseudo, mais par serveur, ( ou lvl ), pas juste les 135premiers, mais tout.
Citation :
Publié par Garfunk
et tu mets ça à jour automatiquement toutes les 24H (le matin tôt ça suffit).
Pour ça tu fais une page en PHP que tu visites le matin, ou il existe un script PHP qui s'auto génère à une certaine heure ?
(Je penche quand même pour le premier, mais on ne sait jamais )
Quand quelqu'un arrive sur le page, non ?
Et tu enregistre quelque part dans la bdd le jour.
Chaque fois que quelqu'un arrive sur la page,si y'a +1jour, tu met à jour ?


Sinon un petit .bat qui se lance au démarrage de ton ordi
J'avais fait un script qui notait en BDD la date de la dernière modification, et à chaque fois qu'on allait sur la page, il vérifiait si il y avait plus de 24H passés.
Message supprimé par son auteur.
Le désavantage de la cron c'est que si quelqu'un s'amuse à refresh ta page, tu charges ton serveur & les serveurs d'ankama.
Si vous pouvez faire des restrictions via IP et que vous êtes sous Linux, il suffit de créer une page refreshladder.php, avec un .htaccess ou seul votre IP peut y accéder. Puis une cron(voir une .bat sous windows, mais je connais pas bien) qui visite la page à 04:57 du matin
Message supprimé par son auteur.
Si c'est un service de cron, la page est sur ton site web -> quelqu'un peut la trouver...
C'est ce que je voulais dire. Parce que le script de mise à jour est pas super rapide, *le nombres de persos...
*s'incruste dans la conversation*

Dans ton script qui se connecte aux webservices Ankama, si tu utilises une base de données (je pense qu'on peut dire que c'est un moindre mal) tu peux faire une vérification sur la date de la dernière mise à jour effectuée sur le perso concerné.
Dans le code ci-dessous, j'ai rajouté un champ "lastupdate" à la table qui contient les infos du perso (lvl, nom, id, metiers...).
Au passage, il ne faut pas oublier de prendre en compte le cas où le compte n'est plus abonné (et n'apparaît donc plus dans le ladder).

Code:
<?php
include('config.php');
include('common.php');

function GetNewFromLadder($pseudo) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://www.dofus.com/requests/ladder_versus');
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, 'na='.$pseudo);
    $json = curl_exec($ch);
    curl_close($ch);
    $j = json_decode($json, true);
    return $j;
}

$nonabo = array();

// Recuperation de la liste des persos a mettre a jour dans la base
connect_db();
$reqpersos = mysql_query("SELECT name FROM persos WHERE lastupdate < DATE_SUB(CONCAT(CURDATE(), ' 00:00:00'), INTERVAL 1 DAY)") or die('Erreur de connexion a la base...');
while($tabpersos = mysql_fetch_assoc($reqpersos))
{
 // Recupere les donnees sur le webservice Ankama
 echo 'Recuperation des infos de '.$tabpersos['name'].'...<br />'."\n";
 $nonabo[$tabpersos['name']]="'".$tabpersos['name']."'";

 $perso = GetNewFromLadder($tabpersos['name']);
 //on vérifie qu'on a bien un résultat
 if ($perso != null)
 {
    foreach($perso as $p=>$infos)
    {
       if ($infos['hs'] == $USER_server)
       {
         $perso = $infos;
         unset($nonabo[$tabpersos['name']]);
         // table PERSOS
         mysql_query("UPDATE persos SET
         id='".$perso['id']."',
         classe='".intval($perso['br'])."',
         metier1='".intval($perso['j1i'])."',
         metier2='".intval($perso['j2i'])."',
         metier3='".intval($perso['j3i'])."',
         metier4='".intval($perso['j4i'])."',
         metier5='".intval($perso['j5i'])."',
         metier6='".intval($perso['j6i'])."',
         xpmetier1='".intval($perso['j1l'])."',
         xpmetier2='".intval($perso['j2l'])."',
         xpmetier3='".intval($perso['j3l'])."',
         xpmetier4='".intval($perso['j4l'])."',
         xpmetier5='".intval($perso['j5l'])."',
         xpmetier6='".intval($perso['j6l'])."',
         isabo=1,
         lastupdate=NOW()
         WHERE name='".$perso['na']."'") or die('Erreur BDD avec perso '.$perso['na']);
         
         // table HISTORY_XP
         mysql_query("INSERT INTO history_xp(nameperso,dateupd,level) VALUES('".$tabpersos['name']."',NOW(),'".$perso['le']."')");

       }
    }
 }
}
// on met a jour le lastupdate des persos non trouves (non-abo)
if(count($nonabo)>0)
{
 mysql_query("UPDATE persos SET lastupdate=NOW(),isabo=0 WHERE name IN (".implode(',',$nonabo).")") or die(mysql_error());
}
 echo 'Mise a jour effectuee.<br />';
 echo '[<a href="index.php">Retour</a>]';
?>
Concernant ceux qui disent que ça fonctionne sous Free.fr, je veux bien qu'on m'explique comment ^^' J'ai fini par passer sur prophp (merci pour vos conseils d'ailleurs !) à force de m'arracher les cheveux sur free (passer en php5.1 avec un htaccess concenant "php 5" et utiliser le fonctions json ne fonctionne pas). Il semblerait simplement qu'Ankama ait bloqué les requêtes provenant des sites persos free.fr.
Merci pour toutes ces infos, grâce à ça j'ai pu faire un petit système pour des signatures sur mesure.

http://sufod.net76.net/sign.php?id=37204600019&amp;t=01
Avec l'apparition des pages perso, je me permets de remonter un peu ce topic.

Certains ont-ils déjà trouvé un moyen de récupérer encore plus d'info sur un personnage, ou même une guilde complète?

J'ai fait mon ladder de guilde (ladder.zone-bouffe.com), mais si l'ajout de personne pouvait se faire automatiquement je dirai pas non

Avis aux amateurs.

Bouffe
Rien d'exceptionnel, ils ont juste reliés les pages persos avec le ladder, normal. C'est l'invention des pages persos qui était l'attraction dernièrement. Le ladder...bah bof, rien de sensas'
hum c'est vrai que ces pages perso ça va permettre de finir le ladder.

Je migre vendredi et vais regarder cela ce WE je pense.
Mais si quelqu'un a des pistes d'ici la je dis pas non
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés