让Nokogiri看看日期是否正确?

时间:2014-05-18 09:10:36

标签: ruby

所以我想从某个网站提取下一集的日期。唯一的问题是,如果下一集是今天,我用来获取日期的选择器从“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”替换为“权力游戏”(今晚播出)来测试它。

1 个答案:

答案 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