フィードを全文取得するpraggerプラグイン(を作りたい)

pragger練習中。まだ全然公開レベルじゃないのですけど、とりあえずフィード全文公開してないアレな人たちのアレをうまい具合に効率よく読みたいと思うわけで。

    • Hpricotが必要れす。

plugin/zenbun.rb

## feed zenbun kakutoku                                                                    
#    for                                                                                   
#       hatenadiary                                                                        
#       amebablog                                                                          
#       livedoorblog                                                                       
#                                                                                          
require 'rubygems'                                                                         
require 'hpricot'                                                                          
                                                                                           
def perse_other(uri)                                                                       
   doc = Hpricot(open(uri))                                                                
   elem = doc.search("div.contents") # get contents                                        
   elem.inner_html                   # retrun contents                                     
end                                                                                        
                                                                                           
def perse_ameblo(uri)                                                                      
   perse_other(uri)                                                                        
end                                                                                        
                                                                                           
def perse_hatena(uri)                                                                      
   doc = Hpricot(open(uri))                                                                
   elem = doc.search("div.body")     # get contents                                        
   elem.inner_html                   # retrun contents                                     
end                                                                                        
                                                                                           
def perse_livedoor(uri)                                                                    
   doc = Hpricot(open(uri))                                                                
   elem = doc.search("div.main")     # get contents                                        
   elem.inner_html                   # retrun contents                                     
end                                                                                        
                                                                                           
def perse_nifty(uri)                                                                       
   doc = Hpricot(open(uri))                                                                
   elem = doc.search("div.entry-body") # get contents                                      
   elem.inner_html                     # retrun contents                                   
end                                                                                        
                                                                                           
def get_zenbun(uri)                                                                        
   return perse_livedoor(uri) if uri =~ /livedoor/                                         
   return perse_hatena(uri)   if uri =~ /http:\/\/d\.hatena\.ne\.jp/                       
   return perse_ameblo(uri)   if uri =~ /http:\/\/ameblo\.jp/                              
   return perse_nifty(uri)    if uri =~ /cocolog-nifty/                                    
   perse_other(uri)                                                                        
end                                                                                        
                                                                                           
def zenbun(config, data)                                                                   
   data.each do |element|                                                                  
    #   pp element                                                                         
      element.description = NKF.nkf('-w',get_zenbun(element.link) )                        
      element.content_encoded = element.description.dup if element.content_encoded         
   end                                                                                     
end         

config.yaml

- module: load_rss
  config:
#   url: http://ameblo.jp/satoeritimes/rss20.xml
    url: http://blog.livedoor.jp/dankogai/index.rdf
#    url: http://chika.typepad.com/blog/index.rdf
#    url: http://column.chbox.jp/home/kiri/archives/blog/main/rss.rdf
- module: zenbun
- module: save_rss
  config:
    filename: test.rdf
    title: test.title
    link: test.link

todo

  • 複数URI(入力)に対応したい
  • 入力に応じて出力するファイルネームを変えたい。
  • 真鍋タンのココログも読みたい
  • 以前に獲得したフィードがある場合は、全部処理するのじゃなくて新着だけにしたい。
  • RSSですごい数を配信しているとこ(隊長とか)用に、1ヶ月ぐらい以降の新着フィードだけ処理したい
  • ていうかもうちょっと考えて作ろう。

追記

  • とりあえず、content_encorded追加(07/04/03)
  • ココログ追加(07/04/03)
  • 複数URI入力には対応せずに、ほしいフィードの数だけconfig.yamlを書いたほうがいい気がした(07/04/03)