Quotes bash et bashfr

Soyez le premier à donner votre avis sur cette source.

Snippet vu 45 797 fois - Téléchargée 16 fois

Contenu du snippet

Ce script permet d'afficher les quotes du site bashfr.org et bash.org sur le salon.
les commandes sont:
!bashfr [X] : affiche la quote numéro X
!bashfr last : affiche la dernière quote
!bashfr : affiche une quote au hasard
même chose pour bash.org:
!bash [X]
!bash last
!bash

Explication : le script récupère le code source de la page par socket et l'enregistre dans un fichier "perle.txt" avant de commencer à "parser" le code et à dégager la quote du reste.
L'alias strip_html ,comme son nom l'indique, remplace les codes HTML des caractères (ex: > -> >, © -> ® ).

Source / Exemple :


alias bash {
  if (%quote_lang = fr) {
    if (%quote_num = aléatoire) set %link http://www.bashfr.org/?sort=random2
    elseif (%quote_num = last) set %link http://www.bashfr.org/?sort=latest    
    else set %link http://www.bashfr.org/? $+ %quote_num
  }
  else {
    if (%quote_num = aléatoire) set %link http://www.bash.org/?random1
    elseif (%quote_num = last) set %link http://www.bash.org/?latest
    else set %link http://www.bash.org/?quote= $+ %quote_num
  }
  write -c perle.txt 
  sockclose bash
  if ( %quote_lang = fr ) sockopen bash 212.85.158.124 80
  else sockopen bash www.bash.org 80
  if ($sockerr > 0) { echo -ag 4 Error on openning socket. }
}
on *:sockopen:bash:{
  if $sockerr {
    if ($sockerr = 3) echo -ag 15Erreur de connection
    halt
    return
  }
  sockwrite -n $sockname GET %link HTTP/1.1
  if ( %quote_lang = fr ) sockwrite -nt $sockname Host : 212.85.158.124
  else sockwrite -nt $sockname Host : www.bash.org
  sockwrite $sockname $crlf
}
on *:sockread:bash: {
  sockread %perle
  write perle.txt %perle
  if (%perle = </html>) {
    if ( %quote_lang = fr ) treatfr
    else treateng
    sockclose bash
  }
}

alias treateng {
  var %q_start = $read(perle.txt,w,<p class="quote">*)
  if ($readn = 0) {
    if (%quote_num = aléatoire) bash
    else msg %quote_chan 5&#164; Quote7 %quote_num 5inexistante &#164;
    halt
  }
  var %q_debut = $readn
  var %parse_num = $regex(num,%q_start,<p class="quote"><a href="\?([0-9]*?)")
  %parse_num = $regml(num,1)
  var %strip_quote = $regex(strip,%q_start,.*<p class="qt">(.*))
  var %quote = $regml(strip,1)

  msg %quote_chan 5&#164; Quote7 $iif((%quote_num = aléatoire) || (%quote_num = last),%parse_num,%quote_num) 5&#164;
  msg %quote_chan $strip_html(%quote)

  inc %q_debut
  var %lol = $read(perle.txt,w,*</p>)
  var %q_fin = $readn

  while (%q_debut <= %q_fin) {
    %quote = $read(perle.txt,%q_debut)
    msg %quote_chan $strip_html(%quote)
    inc %q_debut
  }

  msg %quote_chan 5&#164; 14www.bash.org 5&#164;

}

alias treatfr {
  var %lol = $read(perle.txt,w,*<div class="quote1">*)
  var %parse_num = $regex(num,%lol,.*?<div class="quote1">#<a href="\?([0-9]*?)")
  %parse_num = $regml(num,1)

  if ($readn = 0) {
    if (%quote_num = aléatoire) bash
    else msg %quote_chan 5&#164; Quote7 %quote_num 5inexistante &#164;
    halt
  }
  var %quote_strip = $regex(strip,%lol,.*<br />(.*)<br />)
  var %quote = $regml(strip,1)

  msg %quote_chan 5&#164; Quote7 $iif((%quote_num = aléatoire) || (%quote_num = last),%parse_num,%quote_num) 5&#164;
  msg %quote_chan $strip_html(%quote)

  var %q_debut = $readn
  inc %q_debut
  var %lol = $read(perle.txt,w,</div><div class="adsense">*)
  var %q_fin = $readn

  while (%q_debut < %q_fin) {
    %quote = $read(perle.txt,%q_debut)
    msg %quote_chan $strip_html(%quote)
    inc %q_debut
  }
  msg %quote_chan 5&#164; 14www.bashfr.org 5&#164;
}

on *:TEXT:!bash*:#: {
  set %quote_chan $chan
  if ($1 = !bashfr) {
    if ($2 isnum) set %quote_num $2
    elseif (($2 = last) || ($2 = dernière)) set %quote_num last
    else set %quote_num aléatoire
    set %quote_lang fr
    bash
  }
  if ($1 =!bash) {
    if ($2 isnum) set %quote_num $2
    elseif ($2 = last || $2 = dernière) set %quote_num last
    else set %quote_num aléatoire
    set %quote_lang eng
    bash
  }
}

on *:input:*: {
  if ($1 = !bashfr) {
    if ($2 isnum) set %quote_num $2
    elseif (($2 = last) || ($2 = dernière)) set %quote_num last
    else set %quote_num aléatoire
    set %quote_chan $active
    set %quote_lang fr
    bash
  }
  if ($1 = !bash) {
    if ($2 isnum) set %quote_num $2
    elseif (($2 = last) || ($2 = dernière)) set %quote_num last
    else set %quote_num aléatoire
    set %quote_chan $active
    set %quote_lang eng
    bash
  }
}
alias strip_html {
  var %strip = $replace($1-,<br />,,</p>,)

  while (*&*;* iswm %strip) {
    var %escape_html = $regex(html,%strip,.*(&(.*?);).*)
    if ( $right($regml(html,2),3) isnum ) var %escaped_chr = $chr($right($regml(html,2),3))
    else {
      if (gt = $regml(html,2)) var %escaped_chr = >
      if (lt = $regml(html,2)) var %escaped_chr = <
      if (quot = $regml(html,2)) var %escaped_chr = "
      if (agrave = $regml(html,2)) var %escaped_chr = à
      if (egrave = $regml(html,2)) var %escaped_chr = è
      if (eacute = $regml(html,2)) var %escaped_chr = é
      if (ccedil = $regml(html,2)) var %escaped_chr = ç
      if (acirc = $regml(html,2)) var %escaped_chr = â
      if (ocirc = $regml(html,2)) var %escaped_chr = ô
      if (ucirc = $regml(html,2)) var %escaped_chr = û
      if (icirc = $regml(html,2)) var %escaped_chr = î
      if (auml = $regml(html,2)) var %escaped_chr = ä
      if (iuml = $regml(html,2)) var %escaped_chr = ï
      if (ouml = $regml(html,2)) var %escaped_chr = ö
      if (uuml = $regml(html,2)) var %escaped_chr = ü
      if (ugrave = $regml(html,2)) var %escaped_chr = ù
      else return
    }
    %strip = $replace(%strip,$regml(html,1),%escaped_chr)
  }
  return %strip
}

Conclusion :


Remarque: on peut faire "!bashfr last" ou "!bashfr dernière" celà revient au même.
Sinon le site de bash.org est assez lent, donc l'obtention de la quote avec !bash est un peu lente.

S'il y a un bug ou si vous avez des propositions, n'hésitez pas à en faire part; je règlerais ça dès que possible ;]

A voir également

Ajouter un commentaire

Commentaires

RCA ArKanis
Messages postés
1287
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
21 février 2009
-
j'suis pas fan de ce qui suit :


while (...) {
if () {

}
else {
if ()
if ()
}
else {

}

deux else alignés ? t'es sûr que ça fonctionne ? ^^

je suis sûr que ton code est largement optimisable, et tu devrais à mon avis directement parser le code de la page plutôt que de le stocker dans un .txt
Flyswat
Messages postés
8
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
21 juillet 2008
-
salut,
tu as raison il y a des trucs plutôt foireux dans l'alias strip_html en plus du fait que l'expression régulière devrait être comme ça pour pas prendre les chaînes contenant des espaces: .*(&(\S*?);).*)
et puis le "else return" que j'ai déplacé n'a pas sa place là...
bref, je les corrigerais bientôt et merci pour ta remarque.
cs_Tuni23
Messages postés
3
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
30 août 2008
-
finalement c'est de la pub pour http://www.bashfr.org/ non?
ZeroOo
Messages postés
24
Date d'inscription
mercredi 15 juin 2005
Statut
Membre
Dernière intervention
21 avril 2009
-
Tuni23 : tu crois vraiment que ces deux sites ont encore besoin de pub ?

A propos de la source :
- regroupe tes var sur une même ligne (var %a bla, %b bla)
- le "halt return" (dans l'aliase /bash) je ne vois pas trop à quoi ça sert.
- la série de if pourrait être optimisée il me semble
- travailler directement sur le code de la page serait une meilleure idée comme l'a dit ArKanis. Ceci dit, si tu restes avec un document texte, utilise le file handling plutôt que le /write vu que tu vas écrire pas mal de chose dans ledit doc'.

Sinon c'est un bon exemple d'utilisation des sockets,

bonne continuation
Flyswat
Messages postés
8
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
21 juillet 2008
-
Bonjour,
tout d'abord je tiens à te remercier ZERO0O pour tes conseils; le code est assez "moche" je l'avoue, à refaire donc.
puis pour Tuni23, non ce n'est pas de la pub; quelqu'un a ouvert un thread sur le forum ( http://www.ircfr.com/infomsg_BESOIN-PRO_781007.aspx ) où il demandait comment on pouvait s'y prendre pour afficher les quotes de bash[fr] et comme justement j'en avais fait un pour moi j'ai voulu partager la source.

Bonne programmation à tous.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.