[Socket] recuperation d'information

Résolu
UnderCore Messages postés 16 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 22 janvier 2008 - 21 janv. 2008 à 20:11
laxpo Messages postés 2 Date d'inscription mercredi 18 août 2010 Statut Membre Dernière intervention 18 août 2010 - 18 août 2010 à 03:04
Bien le bonjour/soir,

Ma requête concerne comme cité au-dessus la recherche d'information precise dans un document html/xhtml.

Mon maigre niveau de connaissance dans l'histoire du socket ne me permet que de récupéré la page en question, mes lacunes son au fait que je ne sache pas comment extraire de ce document uniquement ce qui m'intéresse.

En ayant explorer plusieurs source j'ai trouver (je suppose) qu'il faut utiliser la fonction $remove()

je poste la page en question, les informations que je veut récupéré sont celle-ci :
- X joueur connectés
- X GM connextée
- total X comptes sur le serveur
- total X personnages sur le serveur
- total X GM sur le serveur



Informations sur le serveur

Bakacraft Status est En ligne

[index.php?module= connectes Il y a 28 joueurs de connectés]
Il y a 2 GM de connectés
Il y au total 15580 comptes sur le serveur
Il y au total 14191 personnages sur le serveur
Il y au total 67 GM sur le serveur

Heure du serveur
19:58:17 21-janvier-2008

Serveur en ligne depuis :
00h20m01s



La page complette


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Bienvenue sur Bakacraft</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script src="http://www.lootup.com/inc/popup.js" type="text/javascript"></script>
<script src="scripts/sorttable.js"></script>
<link rel="stylesheet" type="text/css" href="http://www.lootup.com/styles/default.css" />
<link rel="stylesheet" href="style/ff.css" type="text/css" />
<!--[if lt IE 7]>
<link rel="stylesheet" href="style/ie6.css" type="text/css" />
<script src="scripts/menu.js" type="text/javascript"></script>
<![endif]-->
<!--[if IE 7]>
<link rel="stylesheet" href="style/ie7.css" type="text/css" />
<![endif]-->
<link rel="SHORTCUT ICON" href="images/icon/wow.ico" />
<link rel="stylesheet" href="style/menu.css" type="text/css" />
</head>



<center></center>



<comment>

</comment>
<!--[if IE 7]>

<![endif]-->





Bienvenue sur Bakacraft


























<li>[index.php Accueil]</li>
<li>[ Interactif]

<li>[index.php?module=armurerie L'armurerie]</li>
<li>[index.php?module=vente L'hôtel des ventes]</li>
<li>[index.php?module=gamers Les persos du serveur]</li>
<li>[index.php?module=info Information sur le serveur]</li>
<li>[map/map.php La carte des joueurs]</li>
<li>[index.php?module=connectes Les joueurs connectés]</li>
<li>[index.php?module=honneur Les points d'honneur]</li>
<li>[index.php?module=skill Talents des personnages]</li>
<li>[index.php?module=guildes Les guildes du serveur]</li>
<li>[index.php?module=teamspeak Notre serveur teamspeak]</li>

</li>
<li>[ Communauté]

<li>[ Forum]</li>

</li>
<li>[ Compte]

<li>[index.php?module=compte Créer un compte]</li>

</li>











































Informations sur le serveur

Bakacraft Status est En ligne

[index.php?module =connectes Il y a 28 joueurs de connectés]
Il y a 2 GM de connectés
Il y au total 15580 comptes sur le serveur
Il y au total 14191 personnages sur le serveur
Il y au total 67 GM sur le serveur

Heure du serveur
19:58:17 21-janvier-2008

Serveur en ligne depuis :
00h20m01s





























Warning: require(footer.php) [function.require]: failed to open stream: No such file or directory in C:\wamp\www\test\index.php on line 80



Fatal error: require() [function.require]: Failed opening required 'footer.php' (include_path='.;C:\php5\pear') in C:\wamp\www\test\index.php on line 80




Merci de votre aide

13 réponses

cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
21 janv. 2008 à 21:00
Tu aurais du donner le code que tu as déja actuelement pour qu'on puisse t'aidé..
Ici, un $remove, c'est franchement bourrin, le mieux c'est d'utiliser, sois un alias qui te supprime tout ce qui est contenu entre les balises (trouvable sur scriptsdb.org)  et ensuite d'utiliser les token genre $gettok, sois un $regex :) :

en assumant que tu rempli le buffer avec une %var :

on *:sockread:nom:{
var %s | sockread %s
if ($regex(%s,/il y a (\d+) joueur/) echo -a \1 joueurs
elseif ($regex(%s,/il y a (\d+) GM/) echo -a \1 GM
elseif ($regex(%s,/il y au total (\d+) comptes/) echo -a \1 comptes total
elseif ($regex(%s,/il y au total (\d+) personnages/) echo -a \1 personnages total
elseif ($regex(%s,/il y au total (\d+) GM/) echo -a \1 GM total
}

ça devrait fonctionner :)
3
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
22 janv. 2008 à 07:24
Son code capture déjà ce qu'il faut, rendant inutiles les aliases que tu cites...
3
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
22 janv. 2008 à 09:24
Il suffit de regarder la ligne 11
if ($regex(%s,/il y a (\d+) joueur/) echo -a \1 joueurs

Et de compter attentivement les parenthèses ...

:-)
3
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
22 janv. 2008 à 12:56
Aucun souci ;)
Ton quote me parait correct à première vue (sans avoir testé donc), peut-être que mIRC gauffre à cause de la parenthèse qui suit "personnages total". Mais là on entre dans le côté sombre du parsing mIRC comme disait sax :-)
Bon courage !
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
UnderCore Messages postés 16 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 22 janvier 2008
21 janv. 2008 à 21:08
oui pardon j'ai oublier de montré le début du code :


alias ssu {
sockclose ssu
sockopen ssu 82.243.193.106 60
}

on *:sockopen:ssu:{
sockwrite -n ssu GET http://82.243.193.106:60/test/index.php?module=info
}



Si je suis ce que tu a écrit cela devrai donner :



alias ssu {
sockclose ssu
sockopen ssu 82.243.193.106 60
}

on *:sockopen:ssu:{
sockwrite -n ssu GET http://82.243.193.106:60/test/index.php?module=info
}
on *:sockread:ssu:{
var %s | sockread %s
if ($regex(%s,/il y a (\d+) joueur/) echo -a \1 joueurs
elseif ($regex(%s,/il y a (\d+) GM/) echo -a \1 GM
elseif ($regex(%s,/il y au total (\d+) comptes/) echo -a \1 comptes total
elseif ($regex(%s,/il y au total (\d+) personnages/) echo -a \1 personnages total
elseif ($regex(%s,/il y au total (\d+) GM/) echo -a \1 GM total
}


ici j'obtien une erreur


* /if: format erroné (ligne 11, script.mrc)
0
UnderCore Messages postés 16 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 22 janvier 2008
21 janv. 2008 à 21:19
Ah manque l'alias j'ai est trouver deux qui paraissent intéressent

le 1er

alias rembalise {
var %a, %tmp = $regsub($$1-,/(<.+>)/Ug,$null,%a)
if (!$prop) return %a
if ($prop == num) return %tmp
}


et le 2nd

alias regb {
; Si un paramêtre est manquant
if !$2 { halt }
; Savoir s'il y a du texte entre les-dites balises...
var %a = $regex($1,/< $+ $2 $+ >([^*]+)/i))
; Si l'on veut connaître le texte qui il y a entre les-dites balises...
if $prop text { var %a $regml(%a) }
; Retour du texte...
return %a }


comment je les places dans ton code?
0
UnderCore Messages postés 16 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 22 janvier 2008
22 janv. 2008 à 09:20
oui c'est vrai j'ai remarquer cela plus tard dans la soiré, mais ceci n'explique pas :


* /if: format erroné (ligne 11, script.mrc)
0
UnderCore Messages postés 16 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 22 janvier 2008
22 janv. 2008 à 09:32
oui j'ai remarquer qu'un parenthèse était manquante, j'ai essayer de la mètre a la fin.


var %s | sockread %s
if ($regex(%s,/il y a (\d+) joueur/)) echo -a \1 joueurs
elseif ($regex(%s,/il y a (\d+) GM/)) echo -a \1 GM
elseif ($regex(%s,/il y au total (\d+) comptes/)) echo -a \1 comptes total
elseif ($regex(%s,/il y au total (\d+) personnages/)) echo -a \1 personnages total )
elseif ($regex(%s,/il y au total (\d+) GM/)) echo -a \1 GM total



cela ne fonctionne pas, j'ai bien essayer ailleurs. Je ne connaissais pas la fonction $regex avent hier soir
0
UnderCore Messages postés 16 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 22 janvier 2008
22 janv. 2008 à 13:36
Bien merci a vous deux pour votre aides en fait le code de Wims étrangement ne fonctionnai pas je me suis donc servi de son début de code avec ce que j'ai pu trouver sur le net.

Apres mes modification cela donne :


on *:sockread:ssu:{
var %s | sockread %s
if ($regex(%s,/Il y a (\d+) joueurs/i)) { set %jonline $regml(1) }
if ($regex(%s,/Il y a (\d+) GM/i)) { set %gmonline $regml(1) }
if ($regex(%s,/Il y a au total (\d+) comptes/i)) { set %comptetotal $regml(1) }
if ($regex(%s,/il y a au total (\d+) personnages/i)) { set %joueurtotal $regml(1) }
if ($regex(%s,/(\d+)h(\d+)m(\d+)s/)) { set %servup $regml(1) | set %servup1 $regml(2) | set %servup2 $regml(3) }
}


Bon évidement ce n'est pas parfait mais ça ma permis de remarquer que si la page contient un espace en trop le $regex ne fonctionne plus ( a mon point de vu d'amateur) et donc de corriger cette espace après quoi le code cité ci dessus fonctionne très bien pour son utilisation


Merci encore a vous
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
22 janv. 2008 à 19:03
Le regex choper ce que tu lui dis de chopper donc c'est normal (pour l'espace).
Et pour expliquer le pourquoi du comment, si tu regardes ton premier post, on remarque des fautes dans la page elle même (plusieurs "il y au total" au lieu de "il y a au total") donc moi j'ai fait le regex en fonction des fautes, hormis les parenthèses de fin manquante,mon code étais juste je pense.
Si on regarde le nouveau code que tu donnes étant juste, tu as a corrigé la fautes dans le code, donc je suppose que dans la page elle même aussi...
A ce sujet, je sais pas si c'est un cas possible mais si tu n'as qu'un joueur et si la page renvoi "1 joueur" ton regex ne marchera plus car tu demandes de choppé "joueurs", cela est valable pour chaque infos que tu veux récupéré ^^
0
UnderCore Messages postés 16 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 22 janvier 2008
22 janv. 2008 à 20:29
pour le moment de 0 à 82 pas d'erreur on ne va pas s'en plaindre, merci pour tes lumière ça m'a vraiment aider
0
laxpo Messages postés 2 Date d'inscription mercredi 18 août 2010 Statut Membre Dernière intervention 18 août 2010
18 août 2010 à 03:02
bonjour je susi nouveau
j'ai un lv 39 s5 rolreia .je dit mon problème un joueur vien de me passer lfr+9 il a fait accepter et moij'ai fait pas mais lfr avec moi et autre joueur ma dit qu'il est un hackeur alo je deco pour me faire pas hacker et je con au ch4 j'etait en ch1 et il ma dit donne moi lfr ou je dit GM alor je deco encor j'ai changée mot de passe pour sécurité et quand je passe 2minute je veu con a mein2.fr me dit passe incorrecte et quand je veux avoir mot de passe par msn me dit ce compte et désactivé??
alor stp je veux rendre j'ai perdu un perso lv 45 et mnt je veu pas perdre ce compte stp du l'aide vite urgent je t'attend votre repponse stp..
0
laxpo Messages postés 2 Date d'inscription mercredi 18 août 2010 Statut Membre Dernière intervention 18 août 2010
18 août 2010 à 03:04
c'est uregent ça j'ai perdu mnt 18/08/2010 stp je veux rendre
0
Rejoignez-nous