所以我想从某个网站提取下一集的日期。唯一的问题是,如果下一集是今天,我用来获取日期的选择器从“MM / DD / YYYY”变为“TONIGHT”。
这是我目前的代码(我提前提出额外的提前日期,向您展示它是如何变化的)
require 'nokogiri'
require 'open-uri'
def epnext(siteadd)
url = siteadd
nextep = Nokogiri::HTML(open(url))
title = nextep.at_css('h1').text
date = nextep.at_css('.next_episode .highlight_date').text[/\d{1,2}\/\d{1,2}\/\d{4}/]
date = date.to_s
if date.length < 10
date[0,0] = "0"
end
puts date
if date =~ [/\d{1,2}\/\d{1,2}\/\d{4}/]
date = date
else
date = DateTime.now.strftime("%D")
end
puts title
puts date
end
epnext('http://www.tv.com/shows/continuum-2012/episodes/')
这将输出: 05/23/2014&lt; -before if statement 连续 2014年5月18日&lt; - if if statement
基本上我希望它解释if语句,这样如果它得到的只是一个日期,它应该将日期变量更改为今天的日期。 您可以通过将“continuum-2012”替换为“权力游戏”(今晚播出)来测试它。
答案 0 :(得分:0)
你犯了一个错误(可能是复制粘贴错误)
if date =~ /\d{1,2}\/\d{1,2}\/\d{4}/ # here I removed [], which you put, causing wrong output
date = date
else
date = DateTime.now.strftime("%D")
end
改进建议:
你可能还没注意到的另一件事,那就是你写作的原因是 - date = date.to_s
。这不是必需的,因为data
已经拥有字符串对象。 Nokogiri::XML::Node#text
始终提供字符串对象。因此,您无需以任何方式申请#to_s
。
我认为,您的方法可以重写为: -
require 'nokogiri'
require 'open-uri'
def epnext(siteadd)
nextep = Nokogiri::HTML(open(siteadd))
title = nextep.at_css('h1').text
date = nextep.at_css('.next_episode .highlight_date').text[/\d{1,2}\/\d{1,2}\/\d{4}/]
puts date
date = DateTime.now.strftime("%D") unless date =~ /\d{1,2}\/\d{1,2}\/\d{4}/
puts title
puts date
end
epnext('http://www.tv.com/shows/continuum-2012/episodes/')
# >> 05/23/2014
# >> Continuum
# >> 05/23/2014