News pc inpact (bis)

Contenu du snippet

Deja desolé de poster cette source alors qu'une 'similaire' a été postée il n'y a pas longtemps
mais depuis le temps que je script, je n'avais jamais fait une vrai source avec socket, donc l'erreur est reparée
on peut a la fois choisir les news (celles du jours comme des plus anciens, jusqu'a 100 jours) mais egalement les lire.
tout commentaire ou suggestion est bienvenue
et si vous voyez des bugs, dites le moi

Source / Exemple :


dialog pci {
  title "News PC INpact.com"
  size -1 -1 185 199
  option dbu
  list 1, 11 34 167 127, result size hsbar vsbar
  button "Chercher", 2, 77 17 33 12
  combo 3, 11 18 56 50, size drop edit
  text "Selectionnez ou rentrez la date souhaitée :", 4, 10 5 104 8
  text "Double-cliquez sur la new qui vous interresse pour la lire", 5, 25 166 137 10, disable
  box "", 6, 7 176 171 4
  button "Fermer", 7, 77 184 36 12, ok
}

dialog pci_new {
  title ""
  size -1 -1 212 229
  option dbu
  list 1, 7 5 197 205, extsel size hsbar vsbar
  button "Fermer", 2, 110 214 37 12, ok
  button "Sauver", 3, 70 214 37 12
  link "Aller sur le site", 4, 165 218 60 20
}

on *:sockopen:pci:{
  if ($sockerr) { .timerpci 1 1 error }
  else { 
    if (!%pci.s) { wait | sockwrite -n pci GET http://www.pcinpact.com/actu/archive.php?f=0&nbjour=100&cat=0&rub=0 HTTP/1.0 | sockwrite -n pci $crlf | set %link 0 }
    else { wait | sockwrite -n pci GET $+(http://www.pcinpact.com,$hget(links,$did(pci,1).sel)) HTTP/1.0 | sockwrite -n pci $crlf }
  }
}

on *:sockread:pci:{
  sockread %a
  if (!%pci.s) {
    if ($datefr($did(pci,3)) isin %a) { set %p g }
    if (/actu/news/ isin %a && %p) {
      var %tmp $notag(%a) | tokenize 32 %tmp | did -a pci 1 $1- [ $+ [ $calc($0 - 2) ] ]
      inc %link | hadd -m links %link $lien(%a)
    }
    if (<tr><td colspan isin %a && $did(pci,1).lines != 0) { unset %a | unset %p | sockclose pci }
    did -z pci 1 | window -c @waiting
  }
  else { 
    tokenize 32 $did(pci,1).seltext
    if (span class isin %a) { inc %pci.cpt }
    if (%pci.cpt == 1) { var %nt $notag(%a)
      if ($left(%nt,3) == $+($chr(9),$chr(9),$chr(9)) && $mid(%nt,4,1)) { $frac($right(%nt,-3)) }
      if (%nt && $left(%nt,1) != $chr(9)) { $frac(%nt) }
    }
    did -z pci_new 1 | window -c @waiting
  }
  unset %a
}

on *:sockclose:pci:{ if (!$did(pci,1).lines) { .timerpci 1 1 error 1 } | unset %link }

on *:dialog:*:*:*:{
  if ($dname == pci) {
    if ($devent == init) { did -a $dname 3 $date }
    elseif ($devent == sclick) { 
      if ($did == 2 && $did(3)) { 
        if ($verifdate($did(3))) { set %pci.s 0 | did -r $dname 1 | if ($did(3) != $date) { did -a $dname 3 $v1 } | pci  }
        else { error 2 }
      }
    }
    elseif ($devent == dclick && $did == 1 && $did(1).seltext) {
      if ($dialog(pci_new)) { did -r pci_new 1 | unset %pci.cpt | dialog -v pci_new pci_new } 
      else { pci_n_d }
      set %pci.s 1 | pci 
      tokenize 32 $did($dname,1).seltext | dialog -t pci_new New : $2- [ $+ [ $0 ] ]
    }
    elseif ($devent == close) { if ($hget(links)) hfree links | if ($dialog(pci_new)) { dialog -x pci_new | unset %pci.cpt | sockclose pci } | unset %pci.* | unset %link } 
  }
  elseif ($dname == pci_new) {
    if ($devent == close) { unset %pci.cpt | sockclose pci }
    elseif ($devent == sclick) {
      if ($did == 3) {
        var %filename $+(",$mircdir $+ $remove($replace($dialog(pci_new).title,$chr(32),_),?,:,/,>,<,|,*,\) $+ .txt,")
        .fopen -n file %filename
        var %i 1 | while (%i <= $did($dname,1).lines) { .fwrite -n file $iif(!$did($dname,1,%i),$cr,$did($dname,1,%i)) | inc %i }
        .fclose file | .echo -q $input(La new a bien été sauvegardée dans $cr %filename,doi,Sauvegarde terminée)
      }
      elseif ($did == 4) {
        url -n $+(http://www.pcinpact.com,$hget(links,$did(pci,1).sel))
      }
    }
  }
}

alias pci_d { dialog -m pci pci }
alias -l pci_n_d { dialog -m pci_new pci_new }
alias -l notag { var %î, %ù = $regsub($1-,/<[^>]+>/g,,%î) | return %î }
alias -l lien { var %r = $regex($1-,(?i)<a .*href=["']?([^\s'"]+).*>([^<]+)</a>) | return $iif($prop == text,$regml(2),$regml(1)) }
alias -l datefr { tokenize 47 $1 | return $1 $replace($2,01,janvier,02,février,03,mars,04,avril,05,mai,06,juin,07,juillet,08,août,09,septembre,10,octobre,11,novembre,12,décembre) $3 }
alias -l pci { sockclose pci | sockopen pci www.pcinpact.com 80 }
alias -l wait { window -adk0phoC +b @waiting -1 -1 225 85 | drawtext @waiting 1 arial 15 10 20 RECEPTION DES DONNEES | drawtext @waiting 1 arial 15 65 45 EN COURS... }
alias -l error { 
  if ($1 == 1) { .echo -q $input(Aucun résultat trouvé. $cr Vérifiez que vous avez bien rentré une date valide. $crlf [note] Vous ne pouvez cherchez des news que jusqu'à 100 jours précedent aujourd'hui.,io,Fin de la recherche) }
  elseif ($1 == 2) { .echo -q $input(La date rentrée n'est pas de format correct (jj/mm/aaaa),wo,Erreur) | did -d1 pci 3 . }
  else { .echo -q $input(La socket n'a pas pu s'initialiser $crlf Veuillez reessayer ultérieurement,io,Echec de la connexion) }
}
alias -l verifdate { tokenize 47 $1 | if ($1 isnum 01-31 && $2 isnum 01-12 && $3 isnum 1900-2010) { return $1-3 } else { return 0 } }

alias -l frac {
  var %i 1 | tokenize 32 $1
  while (%i <= $0) { 
    var %tmp %tmp $ [ $+ [ %i ] ]  
  if ($len(%tmp) > 66) { did -a pci_new 1 %tmp | var %tmp $null } | inc %i }
  did -a pci_new 1 %tmp
}

Conclusion :


pour s'en servir
/pci_d
la date a rentrer dans le combo doit etre du format jj/mm/nnnn (ex 05/04/2005) sinon ça ne fonctionnera pas

A voir également

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.