Note:
Testo rimosso dalla rev 2 e
Testo aggiunto nella rev3
LunaRss v0.1 – versione originale di Francesco Lunelli
Codice LunaRss 0_2 – refactoring Chiaroscuro
#!/usr/bin/env ruby
require 'net/http'
class Rss_parser
def initialize(url)
@url_completo=url
@url_no_http=@url_completo.gsub(/http\:\/\//,'')
@url_http=@url_no_http.gsub(/\/.*/,'')
@url_pagina="/"+@url_completo.gsub(%r{http:\/\/.*?\/},'')
end
def esegui_parsing
h=Net::HTTP.new(@url_http)
resp,data=h.get(@url_pagina,nil)
data.gsub!(/\0/,'')
canale=data.scan(%r{<channel(?!s).*?>.*?(?:<title>(?:<!\[CDATA\[)*(.*?)(?:\]\]>)*</title>.*?)?</channel>}m)
titolo=Array.new
i=0
data.scan(%r{<item(?!s).*?>.*?(?:<title>(?:<!\[CDATA\[)*(.*?)(?:\]\]>)*</title>.*?)?</item>}m) do |x|
titolo[i]=x
i+=1
end
link=Array.new
i=0
data.scan(%r{<item(?!s).*?>.*?(?:<link>(?:<!\[CDATA\[)*(.*?)(?:\]\]>)*</link>.*?)?</item>}m) do |x|
link[i]=x
i+=1
end
descrizione=Array.new
i=0
data.scan(%r{<item(?!s).*?>.*?(?:<description>(?:<!\[CDATA\[)*(.*?)(?:\]\]>)*</description>.*?)?</item>}m) do |x|
descrizione[i]=x
i+=1
end
dati={'titoli'=>titolo,'links'=>link,'descrizioni'=>descrizione,'canali'=>canale}
return dati
end
end
##############################
print "Content-type: text/html\r\n\r\n"
print "<html>"
print "<body>"
elenco_rss=['http://www.repubblica.it/rss/scienza_e_tecnologia/rss2.0.xml','http://programmazione.it/rss.xml','http://www.hwupgrade.it/rss_news.xml','http://www.hwupgrade.it/rss_articoli.xml','http://www.beppegrillo.it/index.xml']
elenco_rss.each do |rss_file|
rss_da_parsare=Rss_parser.new(rss_file)
dati=Hash.new
dati=rss_da_parsare.esegui_parsing
canale=dati['canali']
titolo=dati['titoli']
link=dati['links']
descrizione=dati['descrizioni']
print "<h3>#{canale}</h3>"
0.upto(titolo.length) do|i|
print "<strong><a href=\"#{link[i]}\">#{titolo[i]}</a></strong><br/><font size=\"-1\">#{descrizione[i]}</font><p/>"
end
end
print "</body>"
print "</html>"