Récuperer le code source d'une page html via mirc

[Résolu]
Signaler
Messages postés
33
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
22 juillet 2007
-
 lespagnol9393 -
Bonjour à tous.

Dans le cadre d'un petit projet personnel, je souhaiterai, suite à une commade tapée sur un channel irc, comme par exemple !getsource , récuperer dans un fichier texte le code source de la page html passée en paramètre.

Cela est-il faisable ?

Bien évidement , je ne demande pas un script tout fait, mais de petites pistes pour y arriver
Merci à tous ceux qui prendront la peine et le temps de m'aider.

64 réponses

Messages postés
33
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
22 juillet 2007

Merci Wims de t'être donné tant de mal ;)
En gros il faut maintenant juste réussir à dégager l'en tête HTML contenue dans la variable &a, et après bwrite.

Plus facile à dire qu'a faire :)

Up Up Up !
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
J'ai déja réussis a faire cela, en passant par les variables simple mais ça ne marche pas, ce qu'il faut c'est trouvé la place de content-type dans la binvar &a et commencé a bwrite apres le $crlf ou le $cr ou le $lf (j'sais plus) et ensuite bwrite la fin, je n'y arrive pas :]
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
Bon, après une petite nuit blanche et 2 3h dessus, j'ai finis par trouvé =/ :

on *:sockread:cinemotions: {
  sockread &a 
;Si la variable existe, c'est la deuxieme fois que on /sockread et il faut toutes les données
if (%bwrite) bwrite cinemotions.gif -1 -1 &a
;sinon, alors il faut copié la partie de la binvar &a a partir de la place ou l'on trouve ;'content-type: '. le +27 correspond au fait que il y est un petit peu de texte apres ce mot :
; "Content-Type: image/gif" + 2 $crlf et le -1 veux dire qu'on copy tout depuis cette ;position sur la binvar &b a la position 1, et ensuite on bwrite puis on stock; ;temporairement une var pour pouvoir validé le if plus haut
  else {
    bcopy &b 1 &a $calc($bfind(&a,1,content-type: ) + 27) -1
    bwrite cinemotions.gif  -1 -1 &b
    set -u5 %bwrite 1
  }
}

J'espere que la manière de disposer le texte marchera pour les commentaire,
Je doute que tu puisse comprendre le code mais en tout cas, pour une fois qu'on demande pas un on text et que ya du boulot derrière :)
Messages postés
33
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
22 juillet 2007

Je testerai tout ça cette après midi, une fois rentré du boulot, et je te dirai, j'espère, que tout est  parfait, ou du moins ce qu'il en est :)
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
Le fait est que j'ai déj testé, et que ça marche ;)
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
5
"

Bon, après une petite nuit blanche et 2 3h dessus, j'ai finis par trouvé =/ "

Ahahah :p Si j'ai bien compris, c'est pour savoir où couper et à partir d'où /bwrite pour virer les en-têtes HTTP de réponse...
J'avais inclus une soluce dans ma source "Aspirateur de sites" dispo ici, ca t'aurait épargné une nuit blanche peut-être. Et si ca n'est pas la même façon de faire (je regarderai ce soir), ca serait intéressant de comparer !

Bonne journée à tous..

PaDa
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
Nop, tu as tout a fait raison, c'est exactement le même principe : en mattant ton code, j'ai trouvé ça

<li> ;coupure des en têtes
</li><li> if $bfind(&a, 1,$+($cr,$lf,$cr,$lf)) {
</li><li> bcopy -z &b 1 &a $calc($ifmatch + 4) -1
</li><li> bunset &a
</li><li> if $bvar(&b,0) {
</li><li> bcopy &a 1 &b 1 -1</li>

En fait, j'ai beaucoup cherché ce qu'étais ce char mystique entre les entête et les valeur que l'on veut, ce n'est qu'apres un echo sur une partie de la binvar que mirc ma affiché les 4 carré correspondant au $crlf,$crlf, mais j'ai fait une autre methode, au lieu de me basé sur ce $crlf,$crlf, jme suis basé sur le texte avant et fait un calcul (+27,qui correspond a ton +4) en cherchant a taton jusqu'a tomber sur le bon truc après il suffit effectivement de copié la binvar (je suis surpris que bwrite ne permet pas directement cela) et de la bwrite.

Tkt pas pour la nuit blanche, elle devait se passé de toute façon donc autant que ça soit sur mirc, et ça m'a permis de taté les binvar, chose pas si simple :)
Messages postés
33
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
22 juillet 2007

C'est parfait ! ça marche parfaitement bien :D

Avec tous mes remerciements Wims !


C'était la première partie de mon script, je vais maintenant pouvoir passer au reste :)

Franchement c'est chouette. Merci
Messages postés
33
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
22 juillet 2007

Ha oui, une petite question. Pourquoi la même manip ne marche pas avec les .jpg ?
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
La même manip marcherais, mais le même code non, là j'ai fait en sorte que cela marche pour cette image spécifique, regarde avec l'aspirateur de Pada (sur ce meme site) si tu peux récup nimporte quel image (je pense qu'il va aussi pouvoir répondre ;))
Messages postés
33
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
22 juillet 2007

Parce que, en fait, j'était parti d'un cas précis, mais la finalité est
de réussir à enregistrer n'importe quelle image, et si possible .jpg
(que j'aurai au préalable passé en parametre...) ça se complique ?


Là c'est dejà génial, ça fonctionne avec un .gif :)
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
5
A priori, le mien fonctionne avec n'importe quel type d'image, puisque je cherche la fin des headers (le premier CR-LF-CR-LF) et que je coupe juste après. Donc ca ne dépend pas du contenu du header ni de la suite. A priori...

@Wims: ok ;o) j'trouve ca étonnant aussi que ce genre de chose ne soit pas inclus directement..

PaDa
Messages postés
33
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
22 juillet 2007

Bonsoir à vous deux :)


Pour conclure, j'ai jeté un pti coup d'oeil à ton code PaDa et il réponds exactement à ce que j'avais besoin.

Le code est dispo ici:

http://www.ircfr.com/codes/ASPIRATEUR-GALERIES-INTERNET_39066.aspx


Donc merci à toi et aussi un grand merci à Wims qui s'est pris la tête autant que moi pour coder un pti script fonctionnel.


:-)
Messages postés
33
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
22 juillet 2007

Une toute petite question encore, si je peux me le permettre PaDa.


Lors de la commande /dl_img <nom_sortie> , comment pourrai-je me débrouiller pour gerer les espaces ?


En effet, l'idéal serait pour moi <nom_sortie> = C:/Program Files/images/mon_image.jpg

Or il y a un espace entre "Program" et "Files" :/
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
Étant donné que le nom de sortie est le dernier params, cela nimporte peu qu'il y est des espace ou non, il suffit de trouvé l'endroit ou il /write ou /bwrite ou autre et de cherché le repertoire, qui devrais etre $3- .Peux être il n'y a que $3, peux être que c'est stocké en variable, faut mettre des " " autour du repertoire a espace, ( $qt() ), essaye de voir tout ça ;)
Messages postés
33
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
22 juillet 2007

En fait le nom de sortie doit être, pour être plus précis, C:/Program Files/EasyPHP1-8/www/mesimages/mon_image.jpg.


Je ne peux donc pas me permettre de mettre ces images dans un autre
repertoire, qui lui serait sans espaces, sinon le site web ne sera pas
capable d'aller les chercher.


Car en effet, "C:/Program Files/EasyPHP1-8/www/mesimages/mon_image.jpg" correspond à "http://127.0.0.1/mesimages/"


En ce qui concerne la fonction $qt, Wims, je n'ai pas réussit a trouver de la doc utile.

Et pour ce qui est des guillements, il me les prends comme u n caractère à part entière.

Même en essayant de bidouiller avec set %dest_path
$addtok(C:/Program,Files/EasyPHP1-8/TEMP/,32), ça met bien l'espace
mais le path n'est tjrs pas valide :)
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
colle ici l'alias que tu utilise, ou ce que tu utilise
Messages postés
33
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
22 juillet 2007

Fiouuuuu, tu risques de t'y perdre... C'est long hein ;)


####################################################


ON *:INPUT:#:{

  if ( !dl_img == $strip($1) ) {

    window @Echo

    set %img_source http://www.cinemotions.net/data/films/0052/26/1/w115/A0005226.jpg

    set %dest_path C:/Program Files/EasyPHP1-8/TEMP/

    set %dest_img %rlzIO $+ .jpg

    set %img_dest_path %dest_path $+ %rlzIO $+ .jpg

    get %img_source %img_dest_path

    echo @Echo - $+ $date(mm/dd) $+ - $+ $asctime(HH:nn)
$+ -�3;4 %rlzIO $+ .jpg �3;1enregistrée dans %dest_path | halt

  }

}


alias dl_img {

  sockclose dl_img

  h img_site $gettok($remove($$1,http://),1,47)

  h img_get $remove($1,http://,$h(img_site))

  h img_path $$2

  h img_end 0

  sockopen dl_img $h(img_site) 80

}

on *:sockopen:dl_img:{

  if ($sockerr) {

    echo -a * /dl_img : erreur de connexion au site ( $h(img_site) )

    return

  }

  echo 5 -s * Téléchargement de http:// $+ $h(img_site) $+ $h(img_get) ...

  .remove $h(img_path)

  sockwrite -n $sockname GET $h(img_get) HTTP/1.1

  sockwrite -nt $sockname Host: $h(img_site)

  sockwrite -nt $sockname Referer: http:// $+ $h(gal_site) $+ $h(gal_get)

  sockwrite -n $sockname

  .timerdl_img_end 1 5 dl_img_end

}

on *:sockread:dl_img:{

  if ($sockerr) {

    echo -a * /dl_img : erreur de transaction ( $h(img_site) )

    return

  }

  sockread &a

  ;coupure des en têtes

  if $bfind(&a, 1,$+($cr,$lf,$cr,$lf)) {

    bcopy -z &b 1 &a $calc($ifmatch + 4) -1

    bunset &a

    if $bvar(&b,0) {

      bcopy &a 1 &b 1 -1

    }

  }

  ;echo -s Debug : $bvar(&a,1,$bvar(&a,0)).text

  if $bvar(&a,0) {

    bwrite $h(img_path) -1 -1 &a

  }

  .timerdl_img_end 1 5 dl_img_end

}

on *:sockclose:dl_img:{

  dl_img_end

}

alias dl_img_end {

  if !$h(img_end) {

    h img_end 1

    sockclose dl_img

    .timerdl_img_end off

    echo 5 -s * Téléchargement terminé.

  }

}


####################################################


Je précise que c'est en grande partie le code de Pada (dont on peux retrouver le lien un peu plus haut dans la discussion)
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
bwrite $h(img_path) -1 -1 &a
C'est ici qu'il bwrite donc $h(img_path) represente le repertoire, donc il me faudrait l'alias h qui va avec car c'est dans cette alias qu'on modifie la chose ^^
Messages postés
33
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
22 juillet 2007

Le voici:


#########################


Alias h {

  if $isid { return $hget(DL_Gallery,$$1) }

  elseif ($2 == $null) { hdel DL_Gallery $$1 }

  else { hadd -m DL_Gallery $$1 $2- }

}


#########################