Codice LunaRss 0_2

Vedi tutte le pagine e le modifiche recenti o scarica i sorgenti nella pagina


LunaRss v0.2 – modificata da Chiaroscuro

Codice LunaRss 0_3 – refactoring AntonioCarpentieri

Commenti

#!/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 channel_title_pattern

   titolo = []
   i = 0   
   data.scan item_title_pattern do |x|
     titolo[i] = x
     i += 1
   end

   link = []
   i = 0   
   data.scan item_links_pattern do |x|
     link[i] = x
     i += 1
   end

   descrizione = []
   i = 0   
   data.scan item_description_pattern do |x|
     descrizione[i] = x
     i += 1
   end

   return { 
     'titoli'       => titolo,
     'links'        => link,
     'descrizioni'  => descrizione,
     'canali'       => canale            
   }

 end

private
 def channel_title_pattern
   %r{<channel(?!s).*?>.*?(?:<title>(?:<!\[CDATA\[)*(.*?)(?:\]\]>)*</title>.*?)?</channel>}m
 end

 def item_title_pattern
   %r{<item(?!s).*?>.*?(?:<title>(?:<!\[CDATA\[)*(.*?)(?:\]\]>)*</title>.*?)?</item>}m 
 end

 def item_links_pattern
   %r{<item(?!s).*?>.*?(?:<link>(?:<!\[CDATA\[)*(.*?)(?:\]\]>)*</link>.*?)?</item>}m
 end

 def item_description_pattern
   %r{<item(?!s).*?>.*?(?:<description>(?:<!\[CDATA\[)*(.*?)(?:\]\]>)*</description>.*?)?</item>}m
 end

end

##############################

class RssMaker
  def header
  <<-HTML
Content-type: text/html\r\n\r\n
<html>
<body>
  HTML
  end

  def footer
  <<-HTML
</body>
</html>
  HTML
  end

  def channel name
  <<-HTML
<h3>#{name}</h3>
  HTML
  end

  def entry titolo, descrizione, link
  <<-HTML
<strong>
  <a href=\"#{link}\"> #{titolo} </a>
</strong><br/>

<font size=\"-1\"> #{descrizione} </font>
<p/>
  HTML
  end

end

##############################

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'
]

rss_make = RssMaker.new

puts rss_make.header

elenco_rss.each do |rss_file|

 rss_da_parsare = Rss_parser.new rss_file

 dati = {}
 dati = rss_da_parsare.esegui_parsing

 canale      = dati['canali']
 titolo      = dati['titoli']
 link        = dati['links'] 
 descrizione = dati['descrizioni']

 puts rss_make.channel( canale )

 0.upto titolo.length do|i|
   puts rss_make.entry( titolo[i], descrizione[i], link[i] )
 end

end

puts rss_make.footer

Updated on May 03, 2006 10:21 by Antonio Carpentieri (213.140.19.203)