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文件,可以独立运行。

下载proxyserver.zip - 4.32MB

运行后会在本机启动一个代理服务,在浏览器中把代理服务器设置成localhost:9999,再看新闻时就可以看到过期的评论。

最近在看《Agile Web Development with Rails, 4th Edition》,RoR真的是很强,ActiveRecord的OR Mapping设计的很好,自动生成Scaffolding代码,使用erb生成HTML,用Sass生成CSS,用CoffeeScript生成Javascript,完全让人工作在一个更高的层次上。RoR有很多的插件可用,常用的功能都有现成的实现。居然有这么多好用的工具,以前的眼界确实太窄了,有种想把自己的网站用RoR重写一次的冲动。

posted @ 2012-11-04 15:30 刘俊峰 阅读(...) 评论(...) 编辑 收藏