On Wed, 1 Oct 2003, Zach Dennis wrote: > Ok, silly question. > > I am writing a script to determine my router's WAN ip address and then to > email me once an hour in case it changes. Currently I am running a web > server at work that returns a page with the client's ip address. I need to > parse out the info on the page so I can extract the ip address of my router > when my script/program connects. check out dyndns.org - they have scripts for just about every router that does this. > I am using the html-parser, sgml-parser and formatter ruby libraries > provided from raa and I have made the changes to the regexp regarding image > width and height. So I'm good there. > > In my test.rb file I say: > ------------------------------------------------ > h = Net::HTTP.new('www.zachstestip.com' , 80 ) > resp,data = h.get('/index.php' , nil ) > > w = DumbWriter.new > f = AbstractFormatter.new(w) > p = HTMLParser.new(f) > p.feed(data) > p.close > ------------------------------------------------ one thing i might point out here - i myself have spent hours trying to figure out weird bugs after naming a variable 'p'. worth a check... > Here comes the silly part. The function "feed" is inherited by sgml-parser > to html-parser. It passes "data" along to the sgml-parser function > "goahead". It prints everything to stdout or stderr( i dont know, but it > makes it to my screen =), but there is no print, put, etc... etc... call to > send it there!!! I cant for the life of me determine where in the feed or > goahead functions are outputting my parsed results from data! This is damn > silly of me to ask I know, but how is it getting to my CLI? > > In the "goahead" function there is a giant while loop. If i place a print or > puts statement at the right before the loop and right after the loop, then > nothing is outputted( except for my explicit print/puts statements). you could also try something like this to track the problem: alias __p p alias __print print alias __puts puts def p(*args);STDERR.p(caller.join("\n")); __p(*args);end def print(*args);STDERR.print(caller.join("\n")); __print(*args);end def puts(*args);STDERR.puts(caller.join("\n")); __puts(*args);end i'm note sure you'd need all three but... you get the picture. -a ==================================== | Ara Howard | NOAA Forecast Systems Laboratory | Information and Technology Services | Data Systems Group | R/FST 325 Broadway | Boulder, CO 80305-3328 | Email: ara.t.howard / noaa.gov | Phone: 303-497-7238 | Fax: 303-497-7259 | The difference between art and science is that science is what we understand | well enough to explain to a computer. Art is everything else. | -- Donald Knuth, "Discover" | ~ > /bin/sh -c 'for lang in ruby perl; do $lang -e "print \"\x3a\x2d\x29\x0a\""; done' ====================================