2007-04-18 00:56:25 +02:00
|
|
|
#!/usr/bin/env ruby
|
|
|
|
|
|
|
|
require 'rexml/document'
|
|
|
|
require 'uri'
|
|
|
|
require 'net/http'
|
|
|
|
|
|
|
|
|
|
|
|
def verify_url(url)
|
|
|
|
uri = URI::parse(url)
|
|
|
|
|
|
|
|
response = Net::HTTP::start(uri.host, uri.port) { |http|
|
|
|
|
http.head(uri.request_uri)
|
|
|
|
}
|
|
|
|
|
|
|
|
class << response
|
|
|
|
attr_reader :header
|
|
|
|
end
|
|
|
|
|
|
|
|
if response.kind_of? Net::HTTPOK
|
|
|
|
response['content-length'].to_s.to_i
|
|
|
|
else
|
|
|
|
raise response.class.to_s
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def verify_resource(resource)
|
|
|
|
url = resource.attributes['url']
|
|
|
|
size = resource.attributes['size'].to_i
|
|
|
|
print "#{url} "
|
|
|
|
$stdout.flush
|
|
|
|
begin
|
|
|
|
content_length = verify_url url
|
|
|
|
if content_length != 0 and content_length != size
|
|
|
|
puts "#{content_length}(remote) != #{size}(resource)"
|
|
|
|
else
|
|
|
|
puts "Ok (#{content_length} B)"
|
|
|
|
end
|
|
|
|
rescue
|
|
|
|
puts $!.to_s
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
Dir::chdir(File::dirname(__FILE__) + "/..")
|
|
|
|
|
|
|
|
NEWSDIR = "content/news"
|
|
|
|
Dir.entries(NEWSDIR).each do |file|
|
|
|
|
next if file =~ /^\./
|
|
|
|
|
2010-08-16 01:55:33 +02:00
|
|
|
fn = "#{NEWSDIR}/#{file}"
|
|
|
|
begin
|
|
|
|
item = REXML::Document.new(File.new(fn)).root
|
2007-04-18 00:56:25 +02:00
|
|
|
|
2010-08-16 01:55:33 +02:00
|
|
|
raise unless item.name == 'item'
|
|
|
|
item.each_element('resource') { |r|
|
|
|
|
verify_resource r
|
2007-04-18 00:56:25 +02:00
|
|
|
|
2010-08-16 01:55:33 +02:00
|
|
|
r.each_element('alternative') { |a|
|
|
|
|
verify_resource a
|
|
|
|
}
|
2007-04-18 00:56:25 +02:00
|
|
|
}
|
2010-08-16 01:55:33 +02:00
|
|
|
|
|
|
|
rescue Exception => e
|
|
|
|
puts "#{fn} is invalid: #{e}"
|
|
|
|
end
|
2007-04-18 00:56:25 +02:00
|
|
|
end
|