Socket

mr_orus1 Messages postés 89 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 9 avril 2008 - 19 mai 2006 à 00:40
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008 - 2 juin 2006 à 09:59
Hello,

voilà, j'essaie de recuperer des infos precise sur un site via socket.
J'ai réussi a bidouillé un code qui fonctionne aujourd'hui, en fait je "triche" en cherchant juste une ligne precise, mais il est posible que demain, l'info change de ligne.

Voici mon code
alias vire { var %i,%a $1-,%b $regsub(%a,/<[^>]+>/g,,%i) | return %i }
alias webo {
  sockclose webo
  sockopen webo vote.weborama.fr 80
}
on *:sockopen:webo:{
  if ($sockerr) { echo -a Connexion Impossible. | halt }
  echo -a Socket connecté.
  sockwrite -nt $sockname GET http://www.weborama.fr/cgi-bin/resultat_vote.cgi?ID=205012   
  sockwrite -nt $sockname $crlf
  sockwrite -nt $sockname $crlf
}
on *:sockread:webo:{
  sockread $vire(%z) 
  write weborus.txt $vire(%z)
  unset $vire(%z)
}
on *:sockclose:webo:{
  echo -a Socket fermé.  
  set %vote. $+ $read(weborus.txt,80)
  set %vote. $+ $read(weborus.txt,81)
  var %vote = %vote. $+ $read(weborus.txt,80)
  var %vote1 = %vote. $+ $read(weborus.txt,81)
  msg $msn.get($cid,fullroom) Nombre de vote sur 90 jours : %vote , Nombre pour aujourd'hui %vote1 | unset %vote* | remove weborus.txt
}
on *:text:*webo:#:webo


si quelqu'un peut m'expliquer merci ;)


 


Orus

11 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
19 mai 2006 à 20:38
Tu set la meme variable deux fois et tu ne respecte pas la syntaxe du /set, ca doit crée des erreurs non  ?


  set %vote. $+ $read(weborus.txt,80)

  set %vote. $+ $read(weborus.txt,81)


D'apres le fichier je ne crois pas que les lignes changent de place.
0
AgoRa_ScripT Messages postés 136 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 20 octobre 2007
21 mai 2006 à 13:51
oui normalement il n'y pas de problemes. c'est la disposition du texte
sur cette page du site weborama ne change pas, il n'y pas de raisons
pour que ton cote ne marche plus.

par contre enleve les caractéres $chr(9) des variables %vote.


il existe différentes méthodes pour afficher les données d'un site sur
mIRC, personnellement je trouve que la tienne passe par une étape loin
d'être obligatoire: write weborus.txt $vire(%z) et mon mIRC freeze
environ 2 secondes le temps d'écrire dans weborus.txt.
0
AgoRa_ScripT Messages postés 136 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 20 octobre 2007
21 mai 2006 à 13:54
si la disposition du texte sur cette page du site weborama ne change pas*

dsl
0
mr_orus1 Messages postés 89 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 9 avril 2008
21 mai 2006 à 21:12
Hello,

Tout 'abord merci de vos reponses .

Maintenant j'ai une question qui va vous sembler "idiote"

j'ai "fini" mon code, mais le truc, comme le dis agora, c'est que c'est assez long, je sais qu'il est possible d'optimiser des codes, mais je ne vois vraiment pas comment.

le voici :
#votealias vire { var %i,%a $1-,%b $regsub(%a,/<[^>]+>/g,,%i) | return %i }
alias webo.1 {
  sockclose webo.1
  sockopen webo.1 vote.weborama.fr 80
}
alias sock.ephe1 {
  sockclose sock.ephe1
  sockopen sock.ephe1 ephemeride.com 80
}
on *:sockopen:*: {
  if ($sockname == webo.1) {
    if ($sockerr) { echo -a Connexion Impossible. | halt }
    echo -a Socket connecté.
    sockwrite -nt $sockname GET http://www.weborama.fr/cgi-bin/resultat_vote.cgi?ID=205012   
    sockwrite -nt $sockname $crlf
    sockwrite -nt $sockname $crlf
  }
  elseif ($sockname == sock.ephe1) {
    if ($sockerr) { echo -a Connexion Impossible. | halt }
    echo -a Socket connecté.
    sockwrite -nt $sockname GET http://www.ephemeride.com
    sockwrite -nt $sockname $crlf
    sockwrite -nt $sockname $crlf
  }
}


on *:sockread:*:{
  if ($sockname == webo.1) {
    sockread $vire(%q) 
    write weborus.txt $remove($vire(%q),$chr(9))
    unset $vire(%q)
  }
  elseif ($sockname == sock.ephe1) {
    sockread $vire(%z) 
    write ephem.txt $remove($vire(%z),$chr(9))
    unset $vire(%z)
  }


}
on *:sockclose:*:{
  if ($sockname == webo.1) {
    echo -a Socket fermé.   
    var %vote2 = $read(weborus.txt,16)
    var %vote = $read(weborus.txt,17)
    var %vote1 = $read(weborus.txt,18)
    msg $msn.get($cid,fullroom) â?© %vote2 â?© Nombre de votes sur 90 jours : %vote â?© Nombre de votes pour aujourd'hui : %vote1 | unset %vote* | .remove weborus.txt 
  }
  elseif ($sockname == sock.ephe1) {
    echo -a Socket Ephémère fermé.  
    var %ep = $read(ephem.txt,47)
    msg $msn.get($cid,fullroom) â?© %ep
    remove ephem.txt | unset %ep
  }


}
alias sock.ephe1 {
  sockclose sock.ephe1
  sockopen sock.ephe ephemeride.com 80
}
on *:TEXT:*vote:#:sock.ephe1 | timer 1 1 webo.1
#vote off

De quelle maniere pourrais je l'optimiser pour qu'il aille un peu plus "vite"

Merci par avance

Orus
0

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

Posez votre question
AgoRa_ScripT Messages postés 136 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 20 octobre 2007
25 mai 2006 à 21:40
au lieu de t'embêter avec un fichier txt, tu analyses ce que reçoit ton socket avec sockread.


on *:sockread:*:{

  if ($sockname = = webo.1) {

    sockread %q

  if ( blabla isin %q) { echo -a $vire(%q) }

  }

  elseif ($sockname == sock.ephe1) {

    sockread %z

    if ( blabla isin %z) { echo -a $vire(%z) }

  }


à la place de blabla tu met ce que tu veux trouver dans %k ou %z qui appartiennent à une ligne du code de la page web.

http://www.ircfr.com/codes/DERNIERES-INFOS-NET-SITE-PC-INPACT_34584.aspx

il est fait en picwin, mais la méthode que je t'explique plus haut est dans ce code.


tes unset sont inutiles, vu que le sockread agit comme un /set sur la variable.


si tu décide de garder ta méthode avec ton fichier txt,

    var %vote2 = $read(weborus.txt,16)

    var %vote = $read(weborus.txt,17)

    var %vote1 $read(weborus.txt,18)> var %vote2 $read(weborus.txt,16),%vote $read(weborus.txt,17),%vote1 $read(weborus.txt,18)


    sockwrite -nt $sockname $crlf

    sockwrite -nt $sockname $crlf

=> sockwrite -nt $sockname $str($crlf,2)


et met un $remove($chr(9)) dans tes variables %vote et %vote1 sinon des carrés apparaissent dans le msg.
0
mr_orus1 Messages postés 89 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 9 avril 2008
26 mai 2006 à 13:20
Hello,

Tout d'abord, merci, ça m'a bien eclairé, donc je fais des test et des tests...

Voilà où j'en suis :

alias webo.o {
  sockclose webo.o
  sockopen webo.o vote.weborama.fr 80
}
on *:sockopen:webo.o:{
  if ($sockerr) { echo -a Connexion Impossible. | halt }
  echo -a Socket connecté.
  sockwrite -nt $sockname GET http://www.weborama.fr/cgi-bin/resultat_vote.cgi?ID=238438  
  sockwrite -nt $sockname $str($crlf,2)


}
on *:sockread:webo.o:{
  if (td colspan='2' style="width:290px; height:18px; padding-left:5px" bgcolor='#FFFFFF'><span class='BigRed' isin %q) { msg $msn.get($cid,fullroom) $remove($vire(%q),$chr(9)) } 
  sockread %q


}
on *:sockclose:webo.o:{
  if ($sockname == webo.o) {
    echo -a Socket fermé.


  }
}

Ici le soucis, c'est que ça me retourne 3 ligne
en fait 3 classement different, et je voudrais juste prendre la premiere ligne, mais je n'arrive pas a trouver de repere supplementaire pour simplement isoler la premiere..

Si quelqu'un peut m'eclairer .

Merci par avance
0
mr_orus1 Messages postés 89 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 9 avril 2008
26 mai 2006 à 13:28
on *:sockclose:webo.o:{
  if ($sockname == webo.o) {
    echo -a Socket fermé.
  }
}
lol ici j'ai fait un non sens je viens de voir :s:s
0
AgoRa_ScripT Messages postés 136 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 20 octobre 2007
26 mai 2006 à 14:39
tu veux afficher quelle ligne précisemment tu site ?
0
mr_orus1 Messages postés 89 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 9 avril 2008
26 mai 2006 à 14:41
dans un premier temps je veux afficher la ligne qui dit :

58 Blog Orus guide pratique

pour le moment en retour j'ai ça :
<dir>Mystigri_ :

58 Blog Orus guide pratique

_Mystigri_ : 350 Blog Orus guide pratique

_Mystigri_ : 2320 Blog Orus guide pratique</dir>merci ;)

The-Real-Orus-style
0
AgoRa_ScripT Messages postés 136 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 20 octobre 2007
26 mai 2006 à 15:02
si le chiffre 58 qui est en face de 58 Blog Orus guide pratique ne
change jamais, alors le problème est vite régler. tu met comme
condition dans ton if, que "58" doit être dans %q et ça retournera la
ligne que tu voulais.

si ce chiffre change souvent, ça se corse un peu plus. en plus les
lignes html de cette page web sont quasiment les mêmes, c'est pour ça
que le code te retourne 3 lignes au lieu d'une.

essaye de trouver ce qui est différent dans la ligne que tu veux, par rapport à toutes les autres.

n'hésite pas à mettre plusieurs conditions. ( if (blabla isin %q && blabla2 %q) { ... } )
0
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
2 juin 2006 à 09:59
J'ai pas tout matté, mais si tu veux en faite récupéré la premiere ligne sur plusieures qui sont trés similaires quand meme tu pourais tout betement ( si la ligne est fixée ) te faire un declenchement sur la premiere de la facon suivante, au debut de ton alias de lancement de socket tu te set une variable genre set %1erelignerecu non ensuite tu te fais tes conditions pour choper cette ligne en ajoutant dedans (%1erlignerecu == non) et dans l'action associée tu unset ta var ou la met sur "oui" et comme ca t'auras la premiere.
Fin c'est une idée comme ca si jamais la position de la ligne est connue :)
ISoKa
0
Rejoignez-nous