我正在解析一些汇总某个城市正在发生的事情的RSS源。我只对今天发生的事情感兴趣。
目前我有这个:
require 'rubygems'
require 'rss/1.0'
require 'rss/2.0'
require 'open-uri'
require 'shorturl'
source = "http://rss.feed.com/example.xml"
content = ""
open(source) do |s| content = s.read end
rss = RSS::Parser.parse(content, false)
t = Time.now
day = t.day.to_s
month = t.strftime("%b")
rss.items.each do |rss|
if "#{rss.title}".include?(day)&&(month)
# does stuff with it
end
end
当然通过检查标题(我知道的事件包含以下格式的事件日期:“(4月2日)”)包含日期和月份(例如'2'和'May')I获取有关5月12日,5月20日发生的事件的信息,等等。我怎样才能让它变得万无一失,只能得到今天的活动?
以下是一个样本标题:“Diggin Deeper @ The Big Chill House(5月12日)”
答案 0 :(得分:1)
today = Time.now.strftime("%d:%b:%y")
if date_string =~ /(\d*).. (.*?) (\d\d)/
article_date = sprintf("%02i:%s:%s", $1.to_i, $2, $3)
if today == article_date
#this is today
else
#this is not today
end
else
raise("No date found in title.")
end
如果标题包含其他数字,则可能会出现问题。标题是否在日期周围有任何边界字符,例如日期之前的连字符或它周围的括号?将这些添加到正则表达式可以防止麻烦。你能举个例子吗? (另一种方法是使用Time#strftime创建一个字符串,该字符串与标题中显示的日期完全匹配,然后只使用字符串#include?与该字符串,但我不认为有一种优雅的方式放置当天的'th'/'nd'/'rd'/等。)
答案 1 :(得分:0)
使用类似的东西:
def check_day(date)
t = Time.now
day = t.day.to_s
month = t.strftime("%b")
if date =~ /^#{day}nd\s#{month}\s11/
puts "today!"
else
puts "not today!"
end
end
check_day "3nd May 11" #=> today!
check_day "13nd May 11" #=> not today!
check_day "30nd May 11" #=> not today!