cnBeta过期评论查看器,再次更新
首先说一下做这个软件的动机和用途。平时喜欢在cnBeta网站看新闻,但是有时候太忙了,不可能每天都去看,一般两三天或者四五天去一次,快速扫一下重要的新闻,遇到特别好的文章就收藏起来。唯一不爽的就是超过一天的新闻评论不显示了,所以一边学Ruby一边做了这个软件。
上一篇博客中使用的方法是在在浏览器中使用远程的代理服务器,然后就可以看到过期的评论。但是网页打开速度比较慢,图片加载慢,视频看不了。现在又用了一个新的方法,而且效果不错,代理服务器还是在本机运行,网页文本从远程服务器获取,其他的图片、视频等则不经过远程代理,从而达到了一个较好的使用体验。
代理服务器做成了比较通用的结构,可以挂载对多个网站的处理。
1class Website 2 @@sites = {} 3 attr_accessor :domain, :encoding 4 def initialize(domain, encoding) 5 @domain = domain 6 @encoding = encoding 7 @@sites[domain] = self 8 end 9 10 def self.get_site(domain) 11 @@sites[domain] 12 end 13 14 def self.all_sites 15 @@sites.values 16 end 17end 18 19class << Websites::Cnbeta 20 def need_collect_uri?(uri) 21 false 22 end 23 24 def process_uri(uri, downloader) 25 if match = uri.match(%r{http://www.cnbeta.com/articles/\w+\.htm}) 26 if data = downloader.get("http://116.255.235.62:88/get?url=#{uri}", nil, "ASCII-8BIT") 27 return data, 'text/html', true 28 end 29 end 30 return nil 31 end 32end 33 34server = OfflineProxyServer.new(ServerName: "localhost", Port: 9999) 35server.downloader = WebClient.new 36Signal.trap(:INT){ server.shutdown } 37server.start
相关的代码已经用OCRA(One-Click Ruby Application)工具打包成了一个exe文件,可以独立运行。
运行后会在本机启动一个代理服务,在浏览器中把代理服务器设置成localhost:9999,再看新闻时就可以看到过期的评论。
最近在看《Agile Web Development with Rails, 4th Edition》,RoR真的是很强,ActiveRecord的OR Mapping设计的很好,自动生成Scaffolding代码,使用erb生成HTML,用Sass生成CSS,用CoffeeScript生成Javascript,完全让人工作在一个更高的层次上。RoR有很多的插件可用,常用的功能都有现成的实现。居然有这么多好用的工具,以前的眼界确实太窄了,有种想把自己的网站用RoR重写一次的冲动。