Exploiter le nouveau ladder

Répondre
Partager Rechercher
Bonsoir.

Hier soir, j'ai cherché un peu du coté de cURL pour récupérer les pages qui nécessite d'être identifié.

Et j'ai rapidement trouvé.
Un seul soucis, c'est que l'identification se fait comme celle de la petite boîte bleue sur le site officiel, cad non sécurisé (http) et avec transmission en clair des identifiants via un POST :s J'ai essayé d'utiliser l'identification disponible à https://secure.dofus.com mais ça coince encore.

Un autre problème, c'est la duré de vie de la session/cookies, digne de celle d'un tofu anorexique, mais bon, on peut pas y faire grand chose... Ca oblige à refaire une identification à chaque fois

Pour info, car je pense que ça doit en intéresser plus d'un, voici le p'tit code php:

Code PHP:

$post_data = array(
'userlogin' => 'votre_identifiant',
'userpassword' => 'votre_mot_de_passe_en_clair_><',
'postback' => "1",
'f' => "/fr/guilde/rykke-errel/tles-glands-guelliers-196300016" // de la pub :D
// mais permet de récupérer dès la première connexion la page désirée.
// f de from
);
$post_data=http_build_query($post_data);

// création du fichier cookie à vide
file_put_contents('cookie.txt','');

//première page : login sur le site et récupération du cookie et de la page d'ou on vient
$curl curl_init();
curl_setopt($curlCURLOPT_URL"http://www.dofus.com/fr");
curl_setopt($curlCURLOPT_POST1);
curl_setopt($curlCURLOPT_POSTFIELDS$post_data);
curl_setopt($curlCURLOPT_RETURNTRANSFER1);
curl_setopt($curlCURLOPT_FOLLOWLOCATION,1);
curl_setopt($curlCURLOPT_COOKIEJAR,'cookie.txt');
curl_setopt($curlCURLOPT_USERAGENT'PHP');
$page=curl_exec($curl);
$info curl_getinfo($curl); //optionnel
curl_close($curl);
// et voila. y'a le cookies d'enregistré, et la page 'f' dans $page (normalement) 
Et si jamais vous voulez d'autres pages:
Code PHP:

//deuxième page : 
 
$url "http://www.dofus.com/fr/guilde/rykke-errel/tles-glands-guelliers-196300016/membres";  // url de la page désirée
$curl2 curl_init();
curl_setopt($curl2CURLOPT_URL$url);
curl_setopt($curl2CURLOPT_RETURNTRANSFER1);
curl_setopt($curl2CURLOPT_FOLLOWLOCATION,1);
curl_setopt($curl2CURLOPT_COOKIEFILE'testcookie.txt');
curl_setopt($curl2CURLOPT_USERAGENT'PHP');
$page=curl_exec($curl2);
$info curl_getinfo($curl2);
curl_close($curl2);
// commande similaire donc, mais pas de données POST
// il est aussi possible de simplement reprendre le premier $curl, en lui donnant une nouvelle adresse. 
Voila. En espérant que ça aide du monde.

Reste plus qu'a Parser le contenu de $page. Pour cela, y'a a priori le domDocument de php5+, j'ai pas encore trop regardé, mais vu la gueule des pages guildes, je pense pas que ça soit le mieux, donc si vous avez une idée... (J'ai pas regardé du coté de javascript, mais c'est probablement mieux et moins de risque de time-out)

Edit:
http://simplehtmldom.sourceforge.net/ semble faire l'affaire
Plus clairement? Certains points manquent-ils de détails?
Ou y'a-t'il des choses que tu n'arrive pas à faire avec les scripts déjà fournis?

Sinon, non, je ne me suis pas plus penché que ca sur la connexion plus "sécurisé".
En fait si je comprends bien $page contient le contenu de la page que l'on aura donné dans 'f' et la fonction file_get_html($page) nous permet de récupérer le code HTML de la page?

Si c'est bien ça, j'ai un soucis.

Déjà je n'ai pas l'impression qu'il arrive à se connecter et qu'il ne récupère que la moitié du code HTML.

Code PHP:

Warning:  file_get_contents(<!DOCTYPE html PUBLIC "-//W3C//DTD  XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"  lang="fr"> <head>   <title>MMORPG DOFUS :: Jeu de rôle massivement multijoueur sur  Internet</title>   <meta name="description" content="Plusieurs milliers de joueurs  dans le monde. DOFUS est un jeu de rôle massivement multijoueur où le  but est de retrouver les 6 précieux Dofus pour devenir maître d'Amakna."  />   <meta name="keywords" content="" />   <meta name="Identifier-URL" content="www.dofus.com" />   <meta name="robots" content="Index,Follow" />   <meta name="language" content="fr" />   <meta http-equiv="imagetoolbar" content="no" />   <meta http-equiv="content-type in /homez.358/xxxx/www/test/simple_html_dom.php  on line 39 

Ca fait depuis un mois ou deux que je me suis pas penché dessus, mais il me semble que $page contient les infos du ladder au format json, et que c'est à toi de les interprêter correctement afin d'extraire les données de cette chaîne json et de les afficher à ta guise.
$page contient effectivement le contenu de la page passé en 'f', c'est à dire, son code html.

il faut donc 'parser' $page.

Dans mon cas, je l'enregistre sous un fichier texte, avant de recharger ce fichier avec simplehtmldom.

Par exemple, pour récupérer un dict des membre de la guilde et de leur rang:

Code PHP:

$html file_get_html('guildemembres.txt'); // on charge le fichier txt dans le parser
// ou $html = str_get_html($page); // si tu veux le faire directement
// (et c'est là où je pense que tu as fait une erreur, file_get_html récupère l'html à partir d'un ficher, et str_get_html à partir d'une string, ce qu'est $page)
$html_membre $html->find('div.table_result2 div');  // on recupère les div qui sont sous le div qui a pour id "table_result2", cad, las lignes intéressantes de la page membre
$i 0;
foreach(
$html_membre as $element){ // pour chaque div
  
if ($i 0){                     // sauf le premier (en-tête du 'tableau')
    
$rangguilde[$element->find('span a',0)->innertext] = $element->find('span',4)->innertext// on remplit le dict rang guilde
  
}
  
$i $i+1;     

On initialise/reset les variables avant si besoin.
Y'a sûrement plus classe, mais ça a le mérite de marcher (j'pense notamment à un recherche sur les div de class="ligne_style0" et class="ligne_style1", mais bon...)

Fe développe un peu le "$element->find('span a',0)->innertext":
Dans notre cas, $element, c'est un div, par exemple:

Code HTML:
<div class="ligne_style0">
<span class="nom_guilde">
   <span class="picto_persos osamodasf"></span>
  <a title="Asami" href="/fr/perso/rykke-errel/Asami-24714000016">Asami</a
  </span>
<span class="niveau2">200</span>
<span class="serveur">Osamodas</span>
<span class="nb_membre">Meneur</span>
</div>
donc "$element->find('span a',0)" va renvoyer le premier element <a> contenu dans un span de $element. et innertext est ce qu'il y a entre <a> et </a>, ici, Asami.
et "$element->find('span',4)->innertext" va renvoyer ce le contenu du 4° span de $element, soit le rang.

Après, ceci reste spécifique à simplehtmldom, un des premiers parser que j'ai trouvé qui permettait une recherche simple compte tenu des pages persos / guilde.

J'espère t'avoir aidé, mais si y'a des questions, n'hésite pas.
Mais comment je peux être sur qu'il a réussi à se connecter ?
Là l'array $rangguilde ne contient rien à la fin du script.

Déjà quand j'essaie de me connecter manuellement au site via le cadre bleu ça ne marche pas, il faut que je me connecte via celui du haut
Le site actuel bug bien en ce moment, entre l'impossibilité de se connecter via le cadre bleu et la page qui ne se charge pas deux fois sur trois je ne pense pas que ce soit le bon moment de faire des tests .
Oui, tout a fait, le site ne marche pas/mal.

Et pour savoir si page contient bien la page, tu peux faire un

Code PHP:

echo $page
C'est bourrin, mais normalement, tu dois avoir une copie de la page récupérée.

ou encore un
Code PHP:

file_put_contents('page.txt',$page); 

puis visualiser le fichier texte.

J'ajouterai que le script pour avoir les rangs suppose que la page chargée est la bonne. Dans le cas contraire, le résultat est imprévisible. A toi de rajouter les vérifications nécéssaires.
Au passage, le ladder donne des résultats assez étranges ce matin. Plus spécifiquement, le classement des persos n'est pas en ordre décroissant des niveaux. Il me semble (par rapport aux niveaux de mes persos) que les niveaux sont corrects, mais le classement pourrait être celui d'il y a quelques jours - ma Crâ a pris 4 niveaux, du 135 au 139, hier, et son niveau est correctement reflété mais elle est au milieu de persos affichant le niveau 135.
Ce qui serait bien c'est de réussir a récupérer l'illustration des personnages de la page.

Mais la je sèche complètement. C'est dommage de devoir garder les anciens sprites du coup et de ne pas pouvoir utiliser les couleurs automatiques avec les nouveaux persos.

Si quelqu'un a des idées je suis preneur. Si je trouve je vous fais signe
Si tu arrive à te log (via cURL ou autre) ce que je n'ai pas encore réussi depuis mon précédent message (pas trop cherché en fait X) tout est là:
Code HTML:
<div class="bg_persos">
  <object style="visibility: visible;" id="perso_avatar" data="http://staticns.ankama.com/dofus/www/swf/pages_persos/DofusPersos.swf" type="application/x-shockwave-flash" height="100" width="100"><param value="always" name="allowscriptaccess"><param value="align=TL&amp;render=direct&amp;focus=face&amp;look={1|21,1136,1131,988|5=16777215,2=10149018,4=16777215,1=16759376,3=14221325|125|1@0={451|||80}}" name="flashvars"><param value="transparent" name="wmode"><param value="false" name="menu"></object>
  [...]
</div>
L'objet correspond à la tête qui s'affiche dans le portrait, sans le cadre.
Si tu veux le personnage en entier, il suffit d'enlever focus=face des paramètres.
Le familier équipé s'affiche.
Avec ca, tu dois pouvoir faire ce que tu veux.

Après, en bidouillant look={1|21,1136,1131,988|5=16777215,2=10149018,4=16777215,1=16759376,3=14221325|125|1@0={451|||80}} tu peux changer la classe, la coiffe, la cape, le familier et les couleurs du personnage.

J'ai "perdu" le fichier qui m'disait à quoi correspond chaque variables, alors de tête (je te conseille de faire quelques essais pour vérifier tout ça):
- 1 : skin, ici Osa femelle
- les 4 nombres qui suivent, c'est les vêtements,
- les 1,2,3,4 et 5 = sont les couleurs
- 125, c'est la taille du perso, en % (ca c'est sur) de la taille d'origine du swf (je suppose).
- 1@0={451|||80} ca c'est la familier: 1 pour dire qu'il y en a un, puis la structure est la même que pour le personnage: skin, 2 valeurs qui servent pas pour familier, et taille (en %age d'une taille de base).

J'espère avoir été utile.

Asami.
quel est votre but final concernant ces scripts ? que voulez vous récupérer comme données, et pour faire quoi ?

pour ma part, j'ai arrêter de requêter le ladder ou les pages persos, je me suis penché du côté des modules, je trouve que c'est bcp mieux, mais après cela dépend ce que vous souhaitez faire.
Message supprimé par son auteur.
Ceux qu on est sensé pouvoir developper avec dofus 2.0... dans 5 ans.
Le but c est d integrer un ladder guilde dans un site ou un forum de guilde.
Message supprimé par son auteur.
Citation :
Publié par Garfunk
Je saisis pas. Tu as eu accès aux API pour créer les modules Dofus ? Ou tu parles d'un truc que tu as créé toi-même from scratch ? Si c'est le cas, il doit bien requester le site off de la même manière que ce qui est proposé ici non ?
je parles bien des API pour créer des modules.
je viens de finir mon 1er module, qui est une synchronisation de mes inventaires (mm si j'ai encore un soucis pour identifier les coffres de maison), mais pas de pb pour l'inventaire du perso, la dinde et la banque. J'ai aussi accès à toutes les informations de mon perso (level, classe, sexe, etc.)
Je vais bientôt regarder du côté de la récupération de la liste des membres de la guilde, pour synchroniser celle ci egalement.
Citation :
Publié par phoenix_stealer
[ Je rappelle aimablement que ce genre de développement est encore interdit par les CGU, actuellement. Merci d'éviter d'en faire la promotion. ]
Dsl je n'étais pas au courant, et d'ailleurs, si jamais tu peux m'indiquer où cela est écrit, cela m'intéresse, pcq sincèrement j'ai beau chercher, j'ai pas trouvé
je retrouve le message que j'ai reçu, après avoir essayé d'en faire autant ^^'

Bon, j'ai retrouvé le message sur gmail, donc c'est un peu brut de décoffrage.

Citation :
---Citation (Posté par phoenix_stealer)---
Hello,

j'avais une petite question quand au développement de modules dofus 2.0.


Actuellement, on a déjà la possibilité de faire quelques petits modules de tests, en tripatouillant un peu la bétâ de dofus 2.0.

Par exemple, je me suis permis "d'installer" le module qui avait été présenté à la convention n°4, qui permettait d'afficher les kamas gagnés à la minutes.

Ma question est la suivante : a-t-on le droit de faire ça, ou cela pose un problème ?

Dans mon cas, je pensais bidouiller un peu ce module, et observer les autres modules (officiels) pour en comprendre le fonctionnement et m'amuser un peu à tenter de dév des petits modules. Cela pose-t-il un problème pour Ankama ?


Merci de ta réponse,

bonne journée,

phoenix_stealer.
réponse :
Citation :
Bonjour,

pour l'instant, l'utilisation de modules est contraire à nos CGU, que tu peux lire à l'installation de Dofus 2.

Bonne journée

Sili
Les choses ont peut être changé depuis la sortie de la 2.0 officielle, mais je suis loin d'en être sur (je suis sur du contraire même).

(j'ai d'ailleurs qu'une seule hâte, que l'on on donne enfin ce droit )
Répondre

Connectés sur ce fil

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