@@ -7,9 +7,9 @@ module Taxila
77 class HanIngestor < Ingestor
88 def self . config
99 {
10- key : 'han_material ' ,
11- title : 'HAN Materials API' ,
12- category : :materials
10+ key : 'han_event ' ,
11+ title : 'HAN Events API' ,
12+ category : :events
1313 }
1414 end
1515
@@ -29,17 +29,53 @@ def read(url)
2929 def process_han ( _url )
3030 url = 'https://www.han.nl/studeren/scholing-voor-werkenden/laboratorium/'
3131
32- material_page = Nokogiri ::HTML5 . parse ( open_url ( url . to_s , raise : true ) ) . css ( '#content > .section--cards-skinny > .section-wrapper > .section__content > .cards-skinny > .cards-skinny-wrapper > .cards-skinny__item > .card-skinny > .card-skinny__content' )
33- material_page . each_with_index do |el , _idx |
34- material = OpenStruct . new
35- material . title = el . css ( '.card-skinny__content__title' ) . first . text
36- material . url = "https://www.han.nl#{ el . css ( '.card-skinny__content__buttons > .buttons > .buttons__button > a' ) . first . get_attribute ( 'href' ) } "
37- material . description = el . css ( '.card-skinny__content__body' ) . first . text
38- add_material ( material )
32+ event_page = Nokogiri ::HTML5 . parse ( open_url ( url . to_s , raise : true ) ) . css ( '#content > .section--cards-skinny > .section-wrapper > .section__content > .cards-skinny > .cards-skinny-wrapper > .cards-skinny__item > .card-skinny > .card-skinny__content' )
33+ event_page . each_with_index do |el , _idx |
34+ event = OpenStruct . new
35+ event . title = el . css ( '.card-skinny__content__title' ) . first . text
36+ event . url = "https://www.han.nl#{ el . css ( '.card-skinny__content__buttons > .buttons > .buttons__button > a' ) . first . get_attribute ( 'href' ) } "
37+ event . description = el . css ( '.card-skinny__content__body' ) . first . text
38+
39+ sleep ( 1 ) unless Rails . env . test? and File . exist? ( 'test/vcr_cassettes/ingestors/han.yml' )
40+ event_page2 = Nokogiri ::HTML5 . parse ( open_url ( event . url . to_s , raise : true ) )
41+ start_str = event_page2 . css ( "div[class='course-superhero__payoff__content']" ) [ 0 ] . css ( 'p > span.course-superhero__payoff__subtitle' ) [ 0 ] . text
42+ start_str = convert_months ( start_str )
43+ event . start = Time . zone . parse ( start_str . split ( 'en' ) [ 0 ] . strip )
44+ event . end = event . start
45+ event . set_default_times
46+
47+ course_details = event_page2 . css ( "div[class='course-details__sidebar__item']" ) [ 0 ]
48+ venue_sub_css = course_details . css ( "span[class='nav-subswitch__title__label__sub']" ) [ 0 ]
49+ venue_super_css = venue_sub_css . parent . css ( "strong.nav-subswitch__title__label__super" ) [ 0 ]
50+ event . venue = "#{ venue_super_css . text } #{ venue_sub_css . text } "
51+ event . source = "HAN"
52+ event . timezone = 'Amsterdam'
53+
54+ add_event ( event )
3955 rescue Exception => e
4056 @messages << "Extract event fields failed with: #{ e . message } "
4157 end
4258 end
59+
60+ def convert_months ( my_str )
61+ {
62+ 'januari' : 'january' ,
63+ 'februari' : 'february' ,
64+ 'maart' : 'march' ,
65+ 'april' : 'april' ,
66+ 'mei' : 'may' ,
67+ 'juni' : 'june' ,
68+ 'juli' : 'july' ,
69+ 'augustus' : 'august' ,
70+ 'september' : 'september' ,
71+ 'oktober' : 'october' ,
72+ 'november' : 'november' ,
73+ 'december' : 'december' ,
74+ } . each do |key , value |
75+ my_str = my_str . gsub ( key . to_s , value . to_s )
76+ end
77+ my_str
78+ end
4379 end
4480 end
45- end
81+ end
0 commit comments