完善后的代码
require 'open-url'
require 'nokogiri'
class Facebook
def self.query_likes
puts 'this is run time => ' + Time.now.to_s
begin
url = "http://api.facebook.com/method/fql.query?query='select like_count from XXX where url = XXX/XX/$S'"
Dialog.order("id desc").each do |d|
path = url.gsub("$S",d.id.to_s)
open(path) do |f|
tparse = Nokogiri::XML(f)
d.likes = tparse.css("like_count").text.to_i
d.save
end
rescue => err
puts err
end
end
end
测试代码
require 'spec_helper'
describe Facebook do
before do
添加数据
end
#使用mock进行假数据封装
it "Facebook to get likes" do
url = "https://api.facebook........."#定义open的url
Facebook.should_receive(:open).with(url.gsub("$S",@dialog.id.to_s)).orderd.and_yield("<xml><like_count>10</like_count></xml>")#封装open的返回对象
Facebook.query_likes #调用测试方法
@dialog,reload.likes.should == 10 #判断测试值
end
end
写完后,可以在命令行里执行测试命令了 rspec spec/models/facebook_spec.rb
如果没有报错的话,这个功能就测试成功了。
下面添加定时
定时采用的是 whenever 插件
安装方法请参考http://www.xiaoyangsheng.com/2011/04/ruby-on-rails%E9%87%8C%E7%94%A8whenever-gem%E7%AE%A1%E7%90%86cron%E4%BB%BB%E5%8A%A1/
或者
http://blog.zool.it/posts/Tasks-plug-in-whenever-the-timing-rails
这两个人写的还是比较好的,英文的看不懂 所以,,,啊哈 今天天气真不错。。。
安装成功后 在config目录下 会有一个schedule.rb的文件打开后编辑
every 15.minute do
runner "Facebook.query_likes"
end
将这段代码插入其中
在命令行里执行
whenever --set environment=development --update-crontab
执行后可以使用
crontab -l 查看正在运行的定时器
crontab -r 关闭运行的定时器(这里有个问题,我的定时器关闭后,还一直在执行。正在纠结中,找到原因后在来说明吧)
1669

被折叠的 条评论
为什么被折叠?



