莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理

          改了下rss-reader,支持atom了

          Posted on 2007-07-11 16:50 dennis 閱讀(478) 評論(0)  編輯  收藏 所屬分類: 動態(tài)語言
              發(fā)現(xiàn)gigix新的blog是支持atom的,也讓這個小工具支持下atom,去rubyforge找了圈,有個叫atom的lib簡單易用,就選他了。
              首先,gem install atom,安裝一下
              其次,稍微修改下代碼:
          def blog_info(url)
            str
          =open(url).read
            feed 
          = RSS::Parser.parse(str, false)
            
          unless feed
              feed
          =Atom::Feed.new(str)
              blog
          =Blog.new(feed.title,url,feed.entries)
            
          else
              blog
          =Blog.new(feed.channel.title,url,feed.items)
            end
          end
          先嘗試用RSS模塊去讀,失敗的話就用Atom模塊,運(yùn)行下,問題出來了,這個atom lib的entries數(shù)組中是一個一個的Atom:Entry對象,而這個Entry類并沒有我在模板文件中定義的link,取而代之的是一個links數(shù)組,links數(shù)組中的Link對象href屬性才是我想要的,那么,修改模板文件?或者修改atom lib的源碼?No,No,都不用,ruby天然的open class特性讓你隨心所欲,我們打開Atom:Entry類,給它添加個link方法就OK:
          class Atom::Entry
            def 
          link
              links[
          0].href
            end
          end
          這樣一來,模板文件也不用改了,更不用去修改atom lib的源碼,實(shí)在是夠爽,現(xiàn)在完整的rss-reader是這樣:
          require 'rss/2.0'
          require 'open-uri'
          require 'erb'
          require 'atom'
          # author dennis
          # email killme2008@gmail.com

          class Atom::Entry
            def 
          link
              links[
          0].href
            end
          end
          class Blog
            attr_accessor
          :title,:url,:items
            def initialize(title
          ,url,items=[])
              
          @title=title
              
          @url=url
              
          @items=items
            end
          end
          def blog_info(url)
            str
          =open(url).read
            feed 
          = RSS::Parser.parse(str, false)
            
          unless feed
              feed
          =Atom::Feed.new(str)
              blog
          =Blog.new(feed.title,url,feed.entries)
            
          else
              blog
          =Blog.new(feed.channel.title,url,feed.items)
            end
          end
          def rss_read
            urls
          =['http://www.aygfsteel.com/canonical/rss','http://dreamhead.blogbus.com/index.rdf',
                  
          'http://michael.nona.name/rss','http://blog.csdn.net/mozilla/Rss.aspx','http://blog.csdn.net/g9yuayon/Rss.aspx']
            urls
          .collect do |blog_url|
              blog_info(blog_url)
            end  
          end
          if $0==__FILE__
            blogs
          =rss_read()
            
          #讀取模板文件
            template=IO.read(File.dirname(__FILE__)+"/blogs.html")
            message
          =ERB.new(template)
            
          #輸出結(jié)果文件
            File.open("today.html","w+"){|file| file.puts message.result}
          end


          主站蜘蛛池模板: 托克托县| 固阳县| 佳木斯市| 安陆市| 丹凤县| 凌源市| 汤阴县| 阿拉善右旗| 大化| 高碑店市| 防城港市| 沐川县| 社旗县| 宣武区| 忻城县| 和田县| 洮南市| 浏阳市| 顺平县| 团风县| 科尔| 鄂尔多斯市| 东宁县| 华坪县| 天峻县| 高尔夫| 宁海县| 郎溪县| 宁阳县| 舟山市| 湘乡市| 汤原县| 陇南市| 连云港市| 澄江县| 宣城市| 东方市| 洪洞县| 甘谷县| 衡阳县| 丹凤县|