Estuve buscando en la web algun codigo en TCL para poder obtener el titulo y los meta description y keywords de una lista de sitios, pero no encontre nada concreto, asi que me puse a escribir yo mismo.
Para comenzar necesitaba obtener el codigo html de la pagina, asi que hice una funcion getPage que toma como parametro la URL y devuelve un string con el codigo HTML.
Luego necesitaba parsear ese codigo HTML para obtener el titulo y los metas. Podia simplemente parsear el string, buscando los simbolos y textos, o hacer algo mejor utilizando la libreria TCLDOM. Me decidi por esto ultimo, que si bien no conocia, una vez aprendido es mas sencillo y con menos probabilidades de fallos.
No esperen prolijidad ni comentarios, el codigo es el siguiente:
#Script para Obtener Title, Description y Keywords
#By JCA
package require http
package require tdom
proc getPage { url } {
::http::config -useragent “Mozilla/5.0 (Windows; U; Windows NT 5.0; es-ES; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1″
if {[catch {set token [::http::geturl $url]} msg]} {
set data “fallado”
} else {
set data [::http::data $token]
::http::cleanup $token
}
return $data
}
proc getInfo { url } {
puts “– —————————————-”
set codigo [getPage $url]
set doc [dom parse -html $codigo]
set root [$doc documentElement]
set nodo [$root selectNodes /html/head/title/text()]
set titulo [$nodo data]
set description “”
set keywords “”
foreach meta [$root getElementsByTagName meta] {
set type [$meta nodeType]
set name [$meta nodeName]
set nombre “”
foreach atributo [$meta attributes] {
set dato [$meta getAttribute $atributo]
if {$atributo == “name”} {
set nombre $dato
}
}
if {$nombre!=”"} {
if {$nombre==”description”} { set description [$meta getAttribute content] }
if {$nombre==”keywords”} { set keywords [$meta getAttribute content] }
}
}
puts ” URL: $url”
puts “TITLE: $titulo”
puts “DESCR: $description”
puts “KEYWD: $keywords”
puts “——————————————”
}
getInfo “http://www.kristinspencer.com/”