From: mathew
Date: 2005-07-14T03:00:51+09:00
Subject: Re: how to get a http directory listing
Carlos Diaz wrote:
> However, I'm trying to automate this script to go out and look at the
> contents of this directory and do something for each file in there. For
> example, I want to do something like this:
>
> Dir.foreach("http://username:password@172.16.1.1/logs") {|x| logic here>}
>
> However, I'm not sure if there is a simple way to do something like this
> in Ruby. Anyone encountered this before?
I assume you're talking about the normal automatically-generated
directory page, where Apache generates a list of files with links to
each file. In which case...
require 'uri'
require 'open-uri'
require 'html/htmltokenizer'
class WebPage
attr_reader :links # URLs of all links on page
# Get a web page from a specified URL
def get(url)
@uri = URI.parse(url)
open(url) {|result| @body = result.read }
end
# Parse the web page, extracting links
def parse
if !@body
return
end
tokenizer = HTMLTokenizer.new(@body)
@links = Array.new
while tag = tokenizer.getTag('a')
# Normalize to a full URL
url = tag.attr_hash['href']
uri = @uri.merge(url)
@links.push(uri.to_s)
end
end
end
wp = WebPage.new
wp.get('http://www.example.com/')
wp.parse
for link in wp.links
puts link
end
You'll find HTMLTokenizer at
. You could also do it
with REXML, of course, but the code would probably be a little harder to
follow.
Making the above code robust to things like elements with no href is
left as an exercise for the reader :-)
mathew