Listing 1. skokie-lookup.rb #!/usr/bin/ruby require 'net/http' if ARGV.length == 0 puts "#{$0}: You must enter at least one argument." exit end output = "" # Set up our regular expressions not_in_collection_re = /class="yourEntryWouldBeHereData"/ix on_shelf_re = /CHECK SHELF/ix checked_out_re = /DUE /ix # Iterate through each of our arguments ARGV.each do |isbn| # Ignore non-ISBN arguments if not isbn.match(/[0-9xX]{10}/) output << "ISBN #{isbn} is invalid.\n" next end # Ask the library what it knows about our ISBN response = Net::HTTP.get_response('catalog.skokie.lib.il.us', "/search~S4/i?SEARCH=#{isbn}") # Check our regular expressions against the HTML response if not_in_collection_re.match(response.body) output << "ISBN #{isbn} is not in the Skokie collection.\n" elsif on_shelf_re.match(response.body) output << "ISBN #{isbn} is on the shelf.\n" elsif checked_out_re.match(response.body) output << "ISBN #{isbn} is currently checked out.\n" else output << "ISBN #{isbn} response: Unparseable!\n" end end # Show everyone what we've learned puts output