[Recherche] TCL pour récupérer des infos sur un site
#1
Bonjour

A la demande de CrazyCat je viens poster ma demande d'aide d'un autre forum et annoncer les avancées

Citation :Bonjour

Support : UnrealIRCD
Service : Anope
Eggdrop : eggdrop1.6.21

Je cherche un tcl me permettant de réccupérer des infos txt de sites internet.

J'ai testé rss-synd.tcl mais ce n'est pas parfait.
Le probleme du RSS est que ce n'est pas actualisé assez rapidement. Hors je cherche à afficher des infos dans la minute.

Pour les traduire et les dispatcher sur les channels je devrai me débrouiller mais je cale pour les chercher directement sur les sites.

Suis preneur de toute idée, merci

Than

Edit : apparemment je peux également réccupérer des infos par telnet mais j'ai peur que ça tire trop sur le client

Contexte code : ça fait 10 ans que je n'avais pas touché ni un ircd ni un egg ni un tcl, donc redémarrage un peu hard

Il a été proposé du code python mais je ne suis pas familier du tout.

Pour l'instant Harakiri m'a proposé un truc + en rapport avec mes connaissance
Code :
wget http://www.dxscape.com/wwcw.html -O /tmp/frequences.html -o /dev/null ; cat /tmp/frequences.html | perl -e'while(<>){if(/<\/pre>/){$a=0;$b=1;}if($a){print}if(/<pre>/){$a=1;}if($b==1){exit}}' | tail -n +2 > ~/TXT/frequences.txt

Donc création d'un fichier txt, je compte créer un tcl qui va :
- lire ce txt
- le trier pour dispatcher suivant les salons concernés
- enregistrer la derniere ligne lue
- relancer le crontab de la création du fichier
- relire le fichier la ligne qui va s'afficher après la derniere ligne enregistrée

Précision par rapport au site web d'origine : Lors du rafraichissement de la page html, elle n'est pas changé entierement, parfois aucune ligne ne sont rajoutées, parfois 10 ou 30 en une minute.

Vu le week end et la semaine qui arrive je ne pourrai pas trop bosser dessus mais j'indiquerai tout progrès.

Suis preneur de tout conseil évidement et je vous en remercie par avance

Thana
Nick F4GUG, Fantasio et Thanatos97, 73 all
Répondre Avertir
#2
Je pense que déjà, il faudrait savoir quels sont les éléments qui permettent de dire qu'une ligne est nouvelle, et aussi en fonction de quoi les infos seront envoyées sur un canal ou un autre.
Ensuite, comparer les anciennes données et les nouvelles, ça ne me semble pas bien difficile à faire, mais j'attendrai tes infos pour m'avancer plus.
Répondre
#3
les lignes sont actualisées à chaque fois qu'arrive un spot (une nouvelle ligne)

http://www.dxscape.com/wwcw.html (site de l'exemple qui ne sera peut etre pas le définitif)
Citation :de gauche à droite :
indicatif spoté
heure
fréquence
commentaire
indicatif spoteur (c'est lui qui fait l'annonce, donc le commentaire)

la fréquence (en metre en général) est classée par bande:
Citation :KF9KV 2120Z 18100.0 BPSK31,TNX ON2ZZA
BY4IIG 2120Z 7100.0 swl 5/8 on my portable PD2RKG
DK8SV 2120Z 14163.0 GE TNX 2ND QSO MANFRED JA5AQC

18100.0 = 18mhz = 17metre
7100 = 7 mhz = 40metre
14163 = 14mhz = 20metre

L'idée de départ est soit un salon par fréquence (10m, 40m etc), soit un salon par bande (exemple hf=3 - 30 MHz ou vhf=30 - 300 MHz) mais ça ne change pas réellement le tcl.
Le script va devoir lire en premier la fréquence (18100 7100 14163) pour ensuite ecrire la phrase complete dans le channel concerné

A chaque actualisation donc il faut que j'enregistre la derniere ligne du fichier txt créée, comme ça à la suivante actualisation, cette derniere ligne aura peut etre reculée de 3 ou 10 lignes dans la liste.
Si c'est de 10 lignes, le tcl va lire la variable, voir que c'est la 10eme ligne et donc trier à partir de la 9eme ligne jusqu'à la 1ere.

Je suis pas sûr d'etre bien clair car moi même je me sens un peu hs désolé Smile

Le gros progrès pour moi est d'avoir l'astuce de créer le txt car je ne connaissais pas du tout.

L'egg n'est pas forcement la bonne méthode, et peut etre meme pas la méthode que j'utiliserai au final vu que beaucoup d'avis donnés parle d'un script en python.
Mais j'ai envie de batir le tcl, histoire de me remettre dans le bain et surtout ça me prendra moins de temps je pense de contruire le tcl que de me mettre au python pour galérer ensuite à chaque fois qu'il faudra faire une adaptation.
Nick F4GUG, Fantasio et Thanatos97, 73 all
Répondre Avertir
#4
Petit bilan:
j'arrive à lire le fichier, ligne par ligne, j'ai isolé la variable de fréquence pour trier sur les channels respectifs

Origine :
Citation :K7XB 808Z 7022.0 solid S9+10 in Bali Len YB9/DJ7

Après triage
Citation : [18:42] <Gargouille> Time GMT : 14H08 [Spot: K7XB] by [YB9/DJ7] [Freq => 7,022.0 Mhz] Msg: solid S9+10 in Bali Len


Je suis pour l'instant bloqué pour l'enregistrement de la variable de référence :
En fait j'enregistre la derniere ligne au lieu de la 1ere.

Ancien fichier :
Citation :G4JCZ 1409Z 21279.9 TNX TONY JH1OBS-#
YD1DDB 1409Z 21010.0 DJ6TF
5B4AHY 1409Z 28120.0 DAVID BPSK-31 EA5FIF
K7XB 808Z 7022.0 solid S9+10 in Bali Len YB9/DJ7

Nouveau fichier : les lignes nouvelles se rajoutent au début :
Citation :BY8AC 0704Z 28019.2 Cq'ng IS0AFM
Z81B 0704Z 28475.0 TA2TR
SP6HTQ 0703Z 28090.5 cq test SP6HTQ
ZS2DL 0704Z 28499.0 5/5 TA2TR
G4JCZ 1409Z 21279.9 TNX TONY JH1OBS-#
YD1DDB 1409Z 21010.0 DJ6TF
5B4AHY 1409Z 28120.0 DAVID BPSK-31 EA5FIF
K7XB 808Z 7022.0 solid S9+10 in Bali Len YB9/DJ7

Je précise que suivant l'heure du jour ou de la nuit il peut ne pas y avoir de nouvelles lignes

Est ce que je dois fermer le fichier à la fin pour le rouvrir et chercher uniquement la 1ere ligne ou c'est possible dans l'ouverture de lecture svp ?

D'où 2eme question : comment lire uniquement la 1ere ligne svp ?

merci
Nick F4GUG, Fantasio et Thanatos97, 73 all
Répondre Avertir
#5
Est-ce que tu pourrais nous montrer ton script pour qu'on voye comment tu as fait et qu'on puisse t'aider ?
Sinon, pour lire la première ligne d'un fichier, c'est assez simple:
tcl
set fs [open fichier.txt]
set ligne [gets $fs]
close $fs
putserv "PRIVMSG $chan :$ligne"


Répondre
#6
Merci je testerai demain ou ce soir si j'ai un peu de temps

Voici actuellement le tcl, qui est créé sur une base trouvée sur eggdrop.fr pour la partie lecture de fichier :

tcl
set freq(CHANNEL) "#opers"
set freq(fichierTXT) "/home/ham/TXT/frequences.txt"

#ras
set freq(NEW) "" 
set freq(OLD) "xx"  
 
########################################################################
# test commande chan (a virer)
bind pub - "!dx" commandechan
proc commandechan {nick uhost handle chan args} {   
global freq
 
set fi [open $freq(fichierTXT) r]
set line [read -nonewline $fi] 
 
  foreach line [split $line "\n"] {
    # var nouvelle ligne
    set freq(NEW) "$line"

    #tri pour channel   (voir 1 ou plusieurs bots - faire hf vhf uhf etc ou par bande)
    set freq(TRI) [lindex $line 2]
    #ligne d'annonce frequence
    set freq(LINE)  "[string range [lindex $line 2] 0 end-5],[string range [lindex $line 2] end-4 end]"
    #var en test
    set freq(TIME)    "[string range [lindex $line 1] 0 end-3]H[string range [lindex $line 1] end-2 end-1] "
    putserv "PRIVMSG $freq(CHANNEL) :\00310\[\02$freq(LINE) Mhz\02\]\00301 Time GMT : $freq(TIME) \00304 \[Spot:\02 [lindex $line 0]\02\] \00301 by \00303\[\02[lindex $line end]\02\]\00301 Msg: [lrange $line 3 end-1]  "
    # var ancienne ligne
    set freq(OLD) "$line"  
 
 
  }
  close $fi
}
########################################################################
#timer
bind time - "* * * * *" annoncespot 
proc annoncespot {min h d m y} {
global freq 
timechan
}

########################################################################
# lecture
# tri
# annonce
# enregistrement 1ere ligne
# wget
proc timechan {} {   
global freq
 
set fi [open $freq(fichierTXT) r]
set line [read -nonewline $fi] 
 
  foreach line [split $line "\n"] {
    # var nouvelle ligne
    set freq(NEW) "$line"

    #tri pour channel
    set freq(TRI) [lindex $line 2]
    #ligne d'annonce frequence
    set freq(LINE)  "[string range [lindex $line 2] 0 end-5],[string range [lindex $line 2] end-4 end]"
    #var en test
    set freq(TIME)    "[string range [lindex $line 1] 0 end-3]H[string range [lindex $line 1] end-2 end-1] "
    putserv "PRIVMSG $freq(CHANNEL) :\00310\[\02$freq(LINE) Mhz\02\]\00301 Time GMT : $freq(TIME) \00304 \[Spot:\02 [lindex $line 0]\02\] \00301 by \00303\[\02[lindex $line end]\02\]\00301 Msg: [lrange $line 3 end-1]  "
    # var ancienne ligne
    set freq(OLD) "$line"  
 
 
  }
  close $fi
}
########################################################################
putlog "dx1.tcl loaded"



Je précise que ce n'est pas la derniere version où je tente d'enregistrer la 1ere ligne car trop en bordel pour la montrer ici.

Je précise également pour lever les doutes : les sources des tcl ou des sites qui me servent seront affichés sur le site du serveur, tout comme le LEA (de tisma je crois) qui ne sert pas officiellement mais que j'ai quand meme installé pour avoir le débug

Je me demande si je ne vais pas faire parler l'egg dans les salons sans y etre, histoire de pas le faire souffrir en cas de massjoin.
Mais sur unrealIRCD de mémoire on ne peut pas (sauf si les modes sont réglés), qqun peut confirmer svp ?

merci de l'aide
Nick F4GUG, Fantasio et Thanatos97, 73 all
Répondre Avertir
#7
je suis bloqué pour le exec que je dois inclure dans le tcl

Code :
wget http://www.dxscape.com/ww10cw.html -O /tmp/frequences.html -o /dev/null ; cat /tmp/frequences.html | perl -e'while(<>){if(/<\/pre>/){$a=0;$b=1;}if($a){print}if(/<pre>/){$a=1;}if($b==1){exit}}' | tail -n +2 > ~/TXT/frequences.txt
ce code fonctionne dans putty (qui m'aime lui à défaut de mon bot)

inclu dans le tcl ou en tapant .tcl [exec etc... dans la party line le probleme revient toujours
- variable "a" inconnue, sans doute celle ci {$a=0;$b=1;}
ou
- Tcl error: invalid command name "cat"

j'ai collé dans le proc set a "" puis set a"1" puis set a "0" mais sans changement à chaque fois
une idée ?
un marteau ?

- création d'un fichier "cronTXT" directement via le shell avec pico où j'ai mis la ligne wget etc
- chmode -x cronTXT

Sur le tcl :[exec /home/ham/cronTXT]

Reste un probleme de regsub quand un des arguments comporte certains signes mais c'est désormais opérationnel

Merci Harakiri, Damien, Crazycat et le café Maxwell
Nick F4GUG, Fantasio et Thanatos97, 73 all
Répondre Avertir
#8
Si vraiment tu ne veux pas t'embêter, tu fais un .sh qui contient ça, et tu appelles juste ce script.
Répondre
#9
un .sh ?

J'ai eu 2 bugs qui sont apparus :
- invalid command name "" : quand il n'y avait rien dans un des arguments : remplacé rien par "."
- <a href="webjump.cgi?call=8Q7KP" target="_blank">8Q7KP</a> quand l'indicatif etait avec un lien à cliquer

Résolu par :vdm_fetcher.tcl
Code :
###
    set line [string map -nocase {
        "&agrave;"            "à"        "&agrave;"            "à"        "&aacute;"            "á"        "&acirc;"            "â"
        "&atilde;"            "ã"        "&auml;"            "ä"        "&aring;"            "å"        "&aelig;"            "æ"
        "&ccedil;"            "ç"        "&egrave;"            "è"        "&eacute;"            "é"        "&ecirc;"            "ê"
        "&euml;"            "ë"        "&igrave;"            "ì"        "&iacute;"            "í"        "&icirc;"            "î"
        "&iuml;"            "ï"        "&eth;"                "ð"        "&ntilde;"            "ñ"        "&ograve;"            "ò"
        "&oacute;"            "ó"        "&ocirc;"            "ô"        "&otilde;"            "õ"        "&ouml;"            "ö"
        "&divide;"            "÷"        "&oslash;"            "ø"        "&ugrave;"            "ù"        "&uacute;"            "ú"
        "&ucirc;"            "û"        "&uuml;"            "ü"        "&yacute;"            "ý"        "&thorn;"            "þ"
        "&yuml;"            "ÿ"        "&quot;"            "\""    "&amp;"                "&"        "&euro;"            "€"
        "&oelig;"            "œ"        "&Yuml;"            "Ÿ"        "&nbsp;"            " "        "&iexcl;"            "¡"
        "&cent;"            "¢"        "&pound;"            "£"        "&curren;"            "¤"        "&yen;"                "¥"
        "&brvbar;"            "¦"        "&brkbar;"            "¦"        "&sect;"            "§"        "&uml;"                "¨"
        "&die;"                "¨"        "&copy;"            "©"        "&ordf;"            "ª"        "&laquo;"            "«"
        "&not;"                "¬"        "&shy;"                "­-"    "&reg;"                "®"        "&macr;"            "¯"
        "&hibar;"            "¯"        "&deg;"                "°"        "&plusmn;"            "±"        "&sup2;"            "²"
        "&sup3;"            "³"        "&acute;"            "´"        "&micro;"            "µ"        "&para;"            "¶"
        "&middot;"            "·"        "&cedil;"            "¸"        "&sup1;"            "¹"        "&ordm;"            "º"
        "&raquo;"            "»"        "&frac14;"            "¼"        "&frac12;"            "½"        "&frac34;"            "¾"
        "&iquest;"            "¿"        "&Agrave;"            "À"        "&Aacute;"            "Á"        "&Acirc;"            "Â"
        "&Atilde;"            "Ã"        "&Auml;"            "Ä"        "&Aring;"            "Å"        "&AElig;"            "Æ"
        "&Ccedil;"            "Ç"        "&Egrave;"            "È"        "&Eacute;"            "É"        "&Ecirc;"            "Ê"
        "&Euml;"            "Ë"        "&Igrave;"            "Ì"        "&Iacute;"            "Í"        "&Icirc;"            "Î"
        "&Iuml;"            "Ï"        "&ETH;"                "Ð"        "&Dstrok;"            "Ð"        "&Ntilde;"            "Ñ"
        "&Ograve;"            "Ò"        "&Oacute;"            "Ó"        "&Ocirc;"            "Ô"        "&Otilde;"            "Õ"
        "&Ouml;"            "Ö"        "&times;"            "×"        "&Oslash;"            "Ø"        "&Ugrave;"            "Ù"
        "&Uacute;"            "Ú"        "&Ucirc;"            "Û"        "&Uuml;"            "Ü"        "&Yacute;"            "Ý"
        "&THORN;"            "Þ"        "&szlig;"            "ß"        "\r"                ""        "\t"                ""
        "&apos;"      "\'"  "'"      "\'"  "'"       "\'" "&gt;"                ">"        "&lt;"                "<"
        """                "\'"    "&"                "&"        "#91;"                "\("    "\"                "\/"
        "]"                ")"        "{"            "("        "}"            ")"        "£"            "£"
        "¨"            "¨"        "©"            "©"        "«"            "«"        "­"            "­"
        "®"            "®"        "´"            "´"        "·"            "·"        "¹"            "¹"
        "»"            "»"        "¼"            "¼"        "½"            "½"        "¾"            "¾"
        "À"            "À"        "Á"            "Á"        "Â"            "Â"        "Ã"            "Ã"
        "Ä"            "Ä"        "Å"            "Å"        "Æ"            "Æ"        "Ç"            "Ç"
        "È"            "È"        "É"            "É"        "Ê"            "Ê"        "Ë"            "Ë"
        "Ì"            "Ì"        "Í"            "Í"        "Î"            "Î"        "Ï"            "Ï"
        "Ð"            "Ð"        "Ñ"            "Ñ"        "Ò"            "Ò"        "Ó"            "Ó"
        "Ô"            "Ô"        "Õ"            "Õ"        "Ö"            "Ö"        "×"            "×"
        "Ø"            "Ø"        "Ù"            "Ù"        "Ú"            "Ú"        "Û"            "Û"
        "Ü"            "Ü"        "Ý"            "Ý"        "Þ"            "Þ"        "ß"            "ß"
        "à"            "à"        "á"            "á"        "â"            "â"        "ã"            "ã"
        "ä"            "ä"        "å"            "å"        "æ"            "æ"        "ç"            "ç"
        "è"            "è"        "é"            "é"        "ê"            "ê"        "ë"            "ë"
        "ì"            "ì"        "í"            "í"        "î"            "î"        "ï"            "ï"
        "ð"            "ð"        "ñ"            "ñ"        "ò"            "ò"        "ó"            "ó"
        "ô"            "ô"        "õ"            "õ"        "ö"            "ö"        "÷"            "÷"
        "ø"            "ø"        "ù"            "ù"        "ú"            "ú"        "û"            "û"
        "ü"            "ü"        "ý"            "ý"        "þ"            "þ"        
        
    } $line]

    regsub -all {<br />} $line " " line
    regsub -all {<[^>]+>} $line "" line
    #regsub -all {\n} $line " " line
###
regsub -all {\\} $line {\\\\} line
regsub -all {\{} $line {\{} line
regsub -all {\}} $line {\}} line
regsub -all {\]} $line {\]} line
regsub -all {\[} $line {\[} line
regsub -all {\`} $line {\`} line
regsub -all {\~} $line {\~} line
###

J'ai juste fermé la ligne : #regsub -all {\n} $line " " line

J'ai encore 2 soucis :
- toujours invalid command name "" : je pense aux crochets, ça ce n'est pas trop grave
- plantage d'enregistrement de la ligne de référence
Au bout d'un moment, quelques heures après le restart, le bot affiche les memes lignes comme si il n'y avait rien de neuf, ce qui n'est pas le cas.
Faut que je regarde le log voir si ce n'est pas encore un truc dans le dernier argument (comme les crochets ou les espaces) qui merde

Enfin ça sent la fin Smile
Citation :[07:52] <DXspot02> [14,009.0 Mhz] Time GMT : 05H39 [Spot: PA4VHF] by [KH6OO] Msg: CQ CQ
[07:52] <DXspot02> [10,115.0 Mhz] Time GMT : 05H39 [Spot: TM0SI] by [AB9CN] Msg: .
[07:52] <DXspot02> [14,210.0 Mhz] Time GMT : 05H39 [Spot: 9A4A] by [F4FQY] Msg: .
[07:52] <DXspot02> [14,002.0 Mhz] Time GMT : 05H37 [Spot: W7XA] by [M0OXD] Msg: .
[07:52] <DXspot02> [14,071.0 Mhz] Time GMT : 05H38 [Spot: FK8GX] by [W7SPY] Msg: .
[07:52] <DXspot02> [21,014.0 Mhz] Time GMT : 05H50 [Spot: DU1/R6AF/P] by [R7GR] Msg: tnx QSO Up1
[07:52] <DXspot02> [14,211.0 Mhz] Time GMT : 05H50 [Spot: 7X5ST] by [WY7KY] Msg: Tnx Saad!!
[07:52] <DXspot02> [10,114.0 Mhz] Time GMT : 05H49 [Spot: TM0SI] by [F4EEK] Msg: .
[07:52] <DXspot02> [14,218.0 Mhz] Time GMT : 05H48 [Spot: E79D] by [UT1HA] Msg: .
[07:53] <DXspot02> [7,083.0 Mhz] Time GMT : 05H51 [Spot: IA5A] by [IZ0JGE] Msg: Giglio Is. {EU-028}
Nick F4GUG, Fantasio et Thanatos97, 73 all
Répondre Avertir
#10
TCL terminé, un grand merci à tous pour l'aide reçu.
Il y a beaucoup dessus à finaliser mais il est opérationnel et a déjà surpris qques contacts chez nous Smile

merci et à charge de revanche

Thana
Nick F4GUG, Fantasio et Thanatos97, 73 all
Répondre Avertir
#11
Bonjour

J'ai isolé 2 erreurs :

1) [06:01:00] Tcl error [annoncespot]: unmatched open quote in list
provient de :
***************** 2013/05/03 00:00:02 UTC NOW!! *****************
Comme je ne me rappelle pas comme rechercher le caractere *, j'ai fait un match = sur l'argument UTC donc ça doit etre réglé je verrai demain au réveil

2) [11:44] <DXwatch> [11:44:00] Tcl error [annoncespot]: list element in quotes followed by "." instead of space

là parcontre je ne vois pas du tout le souci; ni surtout de quelle ligne ça peut provenir

Sachant que ça met en l'air l'enregistrement de la variable de référence entre 2 lecture du txt, le robot lit donc toujours les memes infos et ne va pas recréer le txt : genant

Je vais faire une détection PL de la phrase "error [annoncespot] etc" pour lancer un effacement des txt et faireun rehash, mais si qqun a une idée de ce qui peut provoquer "list element in quotes followed by "." instead of space" je suis preneur, merci
Nick F4GUG, Fantasio et Thanatos97, 73 all
Répondre Avertir
#12
intégration de mon tcl dans celui de tisma eva.tcl
maintenant c'est le socket qui annonce, et ça prend 2 secondes au lieu de parfois une minute
le fichier txt est désormais effacé après chaque enregistrement de la variable de référence
on verra demain le bilan
* Maxwell croise les doigts
Nick F4GUG, Fantasio et Thanatos97, 73 all
Répondre Avertir
#13
Bilan de la nuit : 2 time out (1 par bot et à des heures différentes

dernier motif : [09:44] <DXmoon> [09:44:42] (!) timer drift -- spun 14 minutes

Pour l'instant le socket est la meilleure solution par rapport à mes capacités technique mais l'eggdrop n'est pas la solution finale pour ce type de projet
Nick F4GUG, Fantasio et Thanatos97, 73 all
Répondre Avertir
#14
L'eggdrop travaille trop...

Je suis en train de revoir ton script (celui que tu m'avais passé par MP), et j'ai juste une petite question: sur la page web, les nouvelles fréquences (ou nouveaux spots ?) sont bien ajoutées au début de la page ? C'est à dire tout en haut ?
Répondre
#15
oui les "spots" (les nouvelles lignes) se rajoutent par le haut de la page.

Je viens de percuter un truc niveau timeout qui confirme ton point de vue, j'ai depuis le début installé Lea de Tisma, juste histoire de lui faire cracher sur le site le débug du serveur dans un salon Ircop.
Pour intégrer mon tcl je l'ai installé dans Eva.tcl qui est de Tisma aussi.
Le Lea n'est pas tombé depuis son dernier lancement il y a 15jours alors qu'un des 2 eva qui balance les spots et qui est sur le meme hébergement tombe assez souvent depuis 1 heure
je t'envoie le lien du dernier tcl où j'avais réduis le probleme de la variable

merci
Nick F4GUG, Fantasio et Thanatos97, 73 all
Répondre Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté