Epguides : sorties des séries

5/5 (32 avis)

Vue 11 543 fois - Téléchargée 104 fois

Description

Cet utilitaire est principalement destiné aux fans des séries (Prison Break, Heroes, Lost, Gossip Girl, ...)
Il permet de connaître très rapidement et très simplement les dates de sorties des prochains épisodes ou de consulter toutes les dates de sortie en donnant le nom de l'épisode et le n° correspondant.

Je ne me suis pas foulé sur l'interface graphique ... j'ai simplement utilisé les fonctions "menu" de base fournies avec mIRC. Cela me permet entre autres de n'avoir qu'un fichier (plutôt que d'utiliser mon GUI)

Pour l'installation, collez simplement ce code ou charger le dans vos remotes : alt + r, file, new (si c/c) / load (si téléchargé)

Une fois installé, tapez /epguides si rien ne s'est produit.

En ce qui concerne l'ajout de séries, le code essayera de "formatter" le nom de votre série afin que l'URL demandée soit valide.
Par exemple :
prison break sera transformé en PrisonBreak
gossip girl en GossipGirl
knight rider (2008) en KnightRider_2008

pour tout problème de lien, allez sur le site epguides.com et essayez de voir lequel est utilisé

Autres particularités :
- ajouts illimités
- suppression simple
- possibilité de vérifier automatiquement au lancement de mIRC si des épisodes sont sortis la veille ou sortent aujourd'hui
- détail concernant une série en cliquant sur son nom depuis le menu, Séries

Source / Exemple :


;****************
;    EpGuides
;   By ArKanis
; www.arkanis.eu
;****************

;version 1.2

on *:start:.epguides check

alias -l epguides.aide {
  epguides.disp $chr(3)
  epguides.disp * %ss : le guide des sorties des séries !
  epguides.disp Cet outil vous permettra d'être à jour au niveau des séries que vous aimez tant ! Il se base sur le site $+($epguides.b(http://epguides.com),.)
  epguides.disp Il intègre une fonction de vérification qui se lance en même temps que mIRC et qui permet de vous informer d'une sortie d'un épisode de la veille ou du jour même.
  epguides.disp A noter que cette fonction peut facilement être désactivée depuis le menu.
  epguides.disp $epguides.u(Utilisation) :
  epguides.disp -> /epguides pour scanner toutes les séries
  epguides.disp -> Clic droit sur la fenêtre @EpGuides pour ajouter, supprimer, consulter tous les épisodes d'une série, ...
  epguides.disp $chr(3)
}

alias -l epguides.check {
  if ($readini(EpGuides.ini,Config,DisabledAutoCheck)) return
  var %s = EpGuides
  if ($sock(%s)) sockclose %s
  if ($hget(%s)) hfree %s
  var %t = 1, %m = $ini(EpGuides.ini,Séries,0)
  if (!%m) return
  while %t <= %m {
    hadd -m %s Liste $addtok($hget(%s,Liste),$ini(EpGuides.ini,Séries,%t),32)
    inc %t
  }
  if (!$show) hadd -m %s DontShow 1
  hadd -m %s Compteur 1
  hadd -m %s Mode 2
  sockopen %s epguides.com 80
}

alias epguides {
  var %s = EpGuides
  if (!$readini(EpGuides.ini,Config,Launched)) {
    epguides.aide
    if ($input(Pour commencer voulez-vous ajouter une série ?,yn)) {
      epguides.add
      epguides
    }
    writeini -n EpGuides.ini Config Launched 1
    return
  }
  elseif ($1 == check) {
    $+($iif(!$show,.),epguides.check)
    return
  }
  if ($sock(%s)) sockclose %s
  if ($hget(%s)) hfree %s
  var %t = 1, %m = $ini(EpGuides.ini,Séries,0)
  if (!%m) {
    epguides.disp * Aucune série n'est dans la base. Veuillez en ajouter une (clic droit).
    return
  }
  while %t <= %m {
    hadd -m %s Liste $addtok($hget(%s,Liste),$ini(EpGuides.ini,Séries,%t),32)
    inc %t
  }
  hadd -m %s Compteur 1
  hadd -m %s Mode 0
  sockopen %s epguides.com 80
}

on *:sockopen:EpGuides:{
  if ($sockerr) return
  var %s = $sockname
  sockwrite -n %s GET $+(http://epguides.com/,$gettok($hget(%s,Liste),$hget(%s,Compteur),32),/) HTTP/1.0
  if ($hget(%s,Mode) != 2) {
    epguides.disp $chr(3)
    epguides.disp * * Récupération des données de $+(http://epguides.com/,$gettok($hget(%s,Liste),$hget(%s,Compteur),32),/)
  }
  if ($hget(%s,Last)) hdel %s Last
  sockwrite -n %s Host: $+(epguides.com,$str($crlf,2))
}
alias -l epguides.desc {
  var %n = $regsubex($gettok($hget($1,Liste),$hget($1,Compteur),32),/([A-Z])/g,$+($chr(32),\t))
  epguides.disp * $epguides.u(Série) : $epguides.b($regsubex(%n,/_(\S+)/g,$+($chr(32),$chr(40),\t,$chr(41))))
  if (!$1-) epguides.disp Pas de dernier épisode sorti
  else {
    var %duree = $int($calc(($ctime - $ctime($2)) /86400))
    if (%duree == 1) var %tp = hier
    elseif (%duree == 0) var %tp = aujourd'hui
    else var %tp = il y a %duree jours
    epguides.disp Dernier épisode sorti $+($chr(40),S,$3,E,$4,$chr(41)) le $2 $+($chr(40),%tp,$chr(41)) : $5-
  }
}
on *:sockread:EpGuides:{
  var %a, %s = $sockname, %o
  sockread %a
  if ($regex(%s,%a,/(?:\s*)(\d+\.)(?:\s+)(\d+)-(?:\s?)(\d+)(?:\s+)(?:[a-zA-Z\-\d\(\)]*)(?:\s*)(\d+)(?:\s+)([A-Za-z]{3})(?:\s+)(\d{2})(?:\s+)<a target="_blank" href="([^\"]+)">([^<]+)</a>.*/U)) {
    var %date = $+($base($regml(%s,4),10,10,2),/,$base($findtok(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec,$regml(%s,5),1,32),10,10,2),/,$regml(%s,6)), %sn = $base($regml(%s,2),10,10,2), %en = $base($regml(%s,3),10,10,2)
    var %titre = $regsubex($replacex($regml(%s,8),&amp;,&),/&#([0-9A-Fx]+);/Ug,$chr($iif($left(\t,1) == x,$base($right(\t,-1),16,10),\t)))
    ;le lien est stocké dans $regml(%s,7)
    if ($hget(%s,Mode) == 1) {
      if (!$sock(%s).mark) epguides.disp * $epguides.u(Série) : $epguides.b($regsubex($hget(%s,Liste),/_(\S+)/g,$+($chr(32),$chr(40),\t,$chr(41))))
      sockmark %s 1
      var %duree = $int($calc(($ctime(%date) - $ctime) /86400))
      if (%duree > 0) var %p = dans
      else var %p = il y a, %duree = $abs(%duree)
      epguides.disp Épisode $regml(%s,1) $+($chr(40),S,%sn,E,%en,$chr(41)) le %date $+($chr(40),%p %duree jour,$iif(%duree > 1,s),$chr(41)) : %titre
    }
    elseif ($hget(%s,Mode) == 2) {
      var %n = $epguides.b($regsubex($regsubex($gettok($hget(%s,Liste),$hget(%s,Compteur),32),/([A-Z])/g,$+($chr(32),\t)),/_(\S+)/g,$+($chr(32),$chr(40),\t,$chr(41))))
      var %duree = $int($calc(($ctime(%date) - $ctime) /86400))
      if (%duree == -1) epguides.disp L'épisode $regml(%s,1) $+($chr(40),S,%sn,E,%en,$chr(41)) de %n est sorti $epguides.u(hier) : %titre
      elseif (!%duree) epguides.disp L'épisode $regml(%s,1) $+($chr(40),S,%sn,E,%en,$chr(41)) de %n sort $epguides.u(aujourd'hui) : %titre
      if ($istok(-1 0,%duree,32)) hadd -m %s DontShow 0
    }
    elseif ($ctime(%date) > $ctime) {
      epguides.desc %s $hget(%s,Last)
      var %duree = $int($calc(($ctime(%date) - $ctime) /86400))
      if (%duree == 1) epguides.disp Prochain épisode $+($chr(40),S,%sn,E,%en,$chr(41)) le %date (demain) : $iif(%titre,$v1,?!)
      else epguides.disp Prochain épisode $+($chr(40),S,%sn,E,%en,$chr(41)) le %date (dans %duree jours) : $iif(%titre,$v1,?!)
      var %o = 2
    }
    else hadd -m %s Last %date %sn %en $regml(%s,8)
  }
  elseif (%a == </pre>) {
    if ($hget(%s,Mode)) var %o = $v1
    else {
      var %o = 2
      epguides.desc %s $hget(%s,Last)
      epguides.disp Pas de date donnée pour le prochain épisode.
    }
  }
  if (%o) {
    sockclose $sockname
    if (%o > 1) {
      hinc %s Compteur
      if ($hget(%s,Compteur) <= $numtok($hget(%s,Liste),32)) sockopen %s epguides.com 80
      else {
        if (($hget(%s,Mode) == 2) && (!$hget(%s,DontShow))) epguides.disp * Fin de la vérification
        hfree %s
      }
    }
  }
}

on *:sockclose:EpGuides:{
  var %s = $sockname
  hinc %s Compteur
  if ($hget(%s,Compteur) <= $numtok($hget(%s,Liste),32)) .timer 1 1 sockopen EpGuides epguides.com 80
  else {
    if (($hget(%s,Mode) == 2) && (!$hget(%s,DontShow))) epguides.disp * Fin de la vérification
    hfree %s
  }
}

alias -l epguides.u return $+($chr(31),$iif($left($1,1) == $chr(32),$right($1-,-1),$1-),$chr(31))
alias -l epguides.b return $+($chr(2),$iif($left($1,1) == $chr(32),$right($1-,-1),$1-),$chr(2))

alias -l epguides.disp {
  if (!$window(@EpGuides)) window -ae @EpGuides
  echo -t @EpGuides $$1-
}

menu @EpGuides {
  Nettoyer:clear @EpGuides
  Aide:epguides.aide
  -
  Tout développer:epguides
  Voir les sorties d'aujourd'hui ou de hier:epguides.check
  $iif($readini(EpGuides.ini,Config,DisabledAutoCheck),$style(1)) Désactiver la vérification au démarrage:writeini -n EpGuides.ini Config DisabledAutoCheck $iif($readini(EpGuides.ini,Config,DisabledAutoCheck),0,1)
  -
  Séries
  .$submenu($epguides.sub($1))
  -
  Visiter epguides.com:url -n http://epguides.com
  À propos:epguides.about
  Fermer:window -c @EpGuides
}

alias -l epguides.sub {
  if ($1 == begin) return -
  elseif ($1 == end) return -
  elseif ($1 == 1) return Ajouter:epguides.subadd
  elseif ($1 == 2) return Supprimer:epguides.subdel
  elseif ($1 == 3) return -
  elseif ($ini(EpGuides.ini,Séries,$calc($1 - 3))) {
    var %n = $regsubex($regsubex($v1,/([A-Z])/g,$+($chr(32),\t)),/_(\S+)/g,$+($chr(32),$chr(40),\t,$chr(41)))
    return $+(.,$calc($1 - 3),.,$chr(9),%n,:,epguides.aff $v1)
  }
}

alias -l epguides.subadd {
  var %ss = $input(Donnez le nom de la série à ajouter,e), %n = $remove($regsubex(%ss,/(?:^|\s)([a-z])/g,$upper(\t)),$chr(32))
  if ($chr(40) isin %n) {
    var %n = $regsubex(%n,/ ?\((.+)\)/Ug,$+(_,\t))
  }
  if ((!%n) || ($readini(EpGuides.ini,Séries,%n))) {
    epguides.disp * Erreur : nom vide ou nom déjà utilisé
    return
  }
  writeini -n EpGuides.ini Séries %n 1
  epguides.disp * Série $epguides.b(%ss) ajoutée $+($chr(40),lien : http://epguides.com/,%n,/,$chr(41))
}
alias -l epguides.subdel {
  var %ss = $input(Donnez le nom de la série à supprimer,e), %n = $remove($regsubex(%ss,/(?:^|\s)([a-z])/g,$upper(\t)),$chr(32))
  if ((!%n) || (!$readini(EpGuides.ini,Séries,%n))) {
    epguides.disp * Erreur : nom vide ou inexistant dans la base
    return
  }
  remini EpGuides.ini Séries %n
  epguides.disp * Série $epguides.b(%ss) supprimée
}

alias -l epguides.aff {
  if (!$1) return
  var %s = EpGuides
  if ($hget(%s)) hfree %s
  if ($sock(%s)) sockclose %s
  hadd -m %s Compteur 1
  hadd -m %s Liste $1
  hadd -m %s Mode 1
  var %n = $regsubex($1,/([A-Z])/g,$+($chr(32),\t))
  sockopen %s epguides.com 80
}

alias -l epguides.about {
  epguides.disp $chr(3)
  epguides.disp * $epguides.u(À propos)
  epguides.disp Cet utilitaire a été conçu par ArKanis pour www.ircfr.com
  epguides.disp Il utilise le site http://epguides.com qui détient toutes les infos concernant les séries.
  epguides.disp Pour télécharger d'autres sources du même auteur, visitez www.arkanis.eu
  epguides.disp $chr(3)
}

;End Of File

Conclusion :


Bugs pour l'instant non connus ... j'ai commencé ce code au milieu de cette après-midi et je n'en ai pas vu pour l'instant ...

Le code ne vous est certainement pas très lisible, je ne l'ai pas fait à caractère éducatif mais le plus court et simple possible (pour moi xD)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 6
4 oct. 2008 à 20:01
GG, rien à redire. Et je trouve ça plutôt lisible et bien organisé :-)
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
4 oct. 2008 à 20:41
merci, ça me touche vraiment ;)
ça faisait un bon moment que je n'avais pas posté de code et j'avais peur que mon retour ne soit pas à la hauteur de mon dernier code (la belote ...)
je n'ai pas dit que le code ici présent était à la hauteur de celui de la belote, juste le retour :D

sinon, ce qui m'a pris le plus de temps, c'est les regex (en particulier celui de la ligne 89). Celui là est réellement illisible !

bon et bah, à dans un an pour le prochain code !

Niveau utilité, tu penses t'en servir pour de vrai PaDa ? :p
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 6
4 oct. 2008 à 21:09
Honnêtement, non, je suis pas accroc aux séries à ce point, et je n'ouvre presque plus mIRC (juste pour prototyper des trucs au boulot ou traiter des .txt, rien de très folichon). Par contre j'ai deux potes qui sont complètement tarés là-dessus, ils sont à jour au jour près, alors je vais leur transmettre :-)
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
8 oct. 2008 à 00:34
Bon je suis pas un accro non plus sur les séries, mais c'est vrai que même au niveau du code, ya pas grand chose a dire, a part des groupes de () inutiles sur les conditions (je sais qu'elle sont là par habitude).Un truc que j'ai trouvé super louche, dans un des alias epguide.u ou .b, tu chech si $left($1,1) est un espace, cmt est ce que tu passes un paramètre a un alias qui commence par un espace ?
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
8 oct. 2008 à 07:25
parce que des fois je l'appelle avec un $regsubex qui met un espace devant chaque majuscule
si je l'ai mis, c'est que je m'étais aperçu qu'un double espace avait été placé :p

les (), c'est effectivement par habitude

merci pour ton commentaire :)

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.