30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
# File 'lib/boe_parser/parser.rb', line 30
def self.parse(doc)
return nil if doc.nil?
entries = []
boe = Hpricot(doc)
linea_numero = boe.at("h2").inner_html
numero = linea_numero.scan(/<\/abbr>(.*)<span>/).flatten.first.strip
boe.at('//a[@name="contenido"]').following_siblings.each do |elemento|
if elemento.name == 'h3'
@seccion_nivel1 = (elemento/"a").inner_html
@seccion_nivel2 = nil
@seccion_nivel3 = nil
end
if elemento.name == 'h4'
@seccion_nivel2 = (elemento/"a").inner_html
@seccion_nivel3 = nil
end
if elemento.name == 'h5'
@seccion_nivel3 = elemento.inner_html
end
if elemento.name == 'ul'
dispos = elemento.search("//li[@class='dispo']")
dispos.each do |d|
enlaces = d.search("//li[@class='puntoMas']/a")
next if enlaces.first.nil?
enlace_href = enlaces.first["href"]
enlace = "http://boe.es" + enlace_href
disposicion = enlace_href.scan(/\?id\=.*/).first.gsub('?id=', '')
(d/"div.enlacesDoc").remove
texto = d.inner_html.strip
entries << {
:boe_num => numero,
:summary => texto,
:link => enlace,
:reference => disposicion,
:level1_section => @seccion_nivel1,
:level2_section => @seccion_nivel2,
:level3_section => @seccion_nivel3
}
end
end
end
entries
end
|