diff --git a/lib/ingestors/event_ingestion.rb b/lib/ingestors/event_ingestion.rb index c8722e9ea..87c94b91f 100644 --- a/lib/ingestors/event_ingestion.rb +++ b/lib/ingestors/event_ingestion.rb @@ -22,6 +22,37 @@ def convert_location(input) input end + def parse_audience(description) + audience_mapping = { + 'post-docs': 'researchers', + "PhD's candidate": 'researchers', + 'PhD student': 'researchers', + 'principal investigator': 'researchers', + 'professor': 'researchers', + 'scientist': 'researchers', + 'library staff': 'research support staff', + 'research librarian': 'research support staff', + 'information specialist': 'research support staff', + 'archivist': 'research support staff', + 'repository manager': 'research support staff', + 'data steward': 'research support staff', + 'data manager': 'research support staff', + 'data professional': 'research support staff', + 'data engineer': 'research support staff', + 'software engineer': 'research support staff', + 'data librarian': 'research support staff', + 'bachelor': 'students', + 'master': 'students', + 'teacher': 'trainers', + 'coaches': 'trainers', + 'educator': 'trainers', + } + audience_mapping + .select{ |key, val| description.downcase.include?(key.to_s.downcase) } + .values + .uniq + end + def parse_dates(input, timezone = nil) Time.use_zone(timezone) do # try to split on obvious interval markers diff --git a/lib/ingestors/taxila/dans_ingestor.rb b/lib/ingestors/taxila/dans_ingestor.rb index 4422b3f57..409f3ca70 100644 --- a/lib/ingestors/taxila/dans_ingestor.rb +++ b/lib/ingestors/taxila/dans_ingestor.rb @@ -64,6 +64,7 @@ def process_dans(url) event.source = 'DANS' event.timezone = 'Amsterdam' + event.target_audience = parse_audience(event.description) add_event(event) rescue Exception => e diff --git a/lib/ingestors/taxila/dtls_ingestor.rb b/lib/ingestors/taxila/dtls_ingestor.rb index 5df97cb78..ae8fc8f47 100644 --- a/lib/ingestors/taxila/dtls_ingestor.rb +++ b/lib/ingestors/taxila/dtls_ingestor.rb @@ -72,6 +72,7 @@ def process_dtls(url) event.set_default_times event.source = 'DTL' event.timezone = 'Amsterdam' + event.target_audience = parse_audience(event.description) add_event(event) rescue Exception => e @messages << "Extract event fields failed with: #{e.message}" diff --git a/lib/ingestors/taxila/han_ingestor.rb b/lib/ingestors/taxila/han_ingestor.rb index 07efd587c..1b3e3379f 100644 --- a/lib/ingestors/taxila/han_ingestor.rb +++ b/lib/ingestors/taxila/han_ingestor.rb @@ -50,6 +50,7 @@ def process_han(_url) event.venue = "#{venue_super_css.text} #{venue_sub_css.text}" event.source = "HAN" event.timezone = 'Amsterdam' + event.target_audience = parse_audience(event.description) add_event(event) rescue Exception => e diff --git a/lib/ingestors/taxila/lcrdm_ingestor.rb b/lib/ingestors/taxila/lcrdm_ingestor.rb index b9dd727f9..3d36d5a62 100644 --- a/lib/ingestors/taxila/lcrdm_ingestor.rb +++ b/lib/ingestors/taxila/lcrdm_ingestor.rb @@ -58,6 +58,7 @@ def process_lcrdm(url) event.source = 'LCRDM' event.timezone = 'Amsterdam' event.set_default_times + event.target_audience = parse_audience(event.description) add_event(event) rescue Exception => e diff --git a/lib/ingestors/taxila/leiden_ingestor.rb b/lib/ingestors/taxila/leiden_ingestor.rb index e418e1a53..cffe95d30 100644 --- a/lib/ingestors/taxila/leiden_ingestor.rb +++ b/lib/ingestors/taxila/leiden_ingestor.rb @@ -83,6 +83,7 @@ def process_leiden(url) # does TeSS support that? event.source = 'Universiteit Leiden' + event.target_audience = parse_audience(event.description) add_event(event) rescue Exception => e diff --git a/lib/ingestors/taxila/maastricht_ingestor.rb b/lib/ingestors/taxila/maastricht_ingestor.rb index 09d03ca26..f4840d490 100644 --- a/lib/ingestors/taxila/maastricht_ingestor.rb +++ b/lib/ingestors/taxila/maastricht_ingestor.rb @@ -58,6 +58,7 @@ def process_maastricht(url) event.timezone = 'Europe/Amsterdam' # how to get this from Icalendar Event object? event.source = 'Maastricht University' + event.target_audience = parse_audience(event.description) add_event(event) rescue Exception => e diff --git a/lib/ingestors/taxila/nwo_ingestor.rb b/lib/ingestors/taxila/nwo_ingestor.rb index 61c3cec8c..9a2811730 100644 --- a/lib/ingestors/taxila/nwo_ingestor.rb +++ b/lib/ingestors/taxila/nwo_ingestor.rb @@ -47,6 +47,7 @@ def process_nwo(url) event.url = "https://www.nwo.nl#{event_data.css('h3.card__title > a').attribute('href').value}" event.source = 'NWO' + event.target_audience = parse_audience(event.description) add_event(event) rescue Exception => e diff --git a/lib/ingestors/taxila/odissei_ingestor.rb b/lib/ingestors/taxila/odissei_ingestor.rb index 64fe7c1fd..ac47651ce 100644 --- a/lib/ingestors/taxila/odissei_ingestor.rb +++ b/lib/ingestors/taxila/odissei_ingestor.rb @@ -59,6 +59,7 @@ def process_odissei(_url) event.source = 'ODISSEI' event.timezone = 'Amsterdam' event.set_default_times + event.target_audience = parse_audience(event.description) add_event(event) rescue Exception => e @messages << "Extract event fields failed with: #{e.message}" diff --git a/lib/ingestors/taxila/oscd_ingestor.rb b/lib/ingestors/taxila/oscd_ingestor.rb index 13fc1f534..b7ab410c1 100644 --- a/lib/ingestors/taxila/oscd_ingestor.rb +++ b/lib/ingestors/taxila/oscd_ingestor.rb @@ -57,6 +57,7 @@ def process_oscd(url) end if div&.next_sibling&.next_sibling.nil? || (div&.next_sibling&.next_sibling&.name == 'h1') event.set_default_times + event.target_audience = parse_audience(event.description) add_event(event) end end diff --git a/lib/ingestors/taxila/oscm_ingestor.rb b/lib/ingestors/taxila/oscm_ingestor.rb index ea68207e6..f3d4127dd 100644 --- a/lib/ingestors/taxila/oscm_ingestor.rb +++ b/lib/ingestors/taxila/oscm_ingestor.rb @@ -57,6 +57,7 @@ def process_oscm(url) # it's not really needed since dtstart and dtend contain timezone information event.source = 'OSCM' event.online = true + event.target_audience = parse_audience(event.description) # add event to events array add_event(event) diff --git a/lib/ingestors/taxila/rdnl_ingestor.rb b/lib/ingestors/taxila/rdnl_ingestor.rb index 9ada2d466..68cda3c5c 100644 --- a/lib/ingestors/taxila/rdnl_ingestor.rb +++ b/lib/ingestors/taxila/rdnl_ingestor.rb @@ -56,6 +56,7 @@ def process_rdnl(url) event.source = 'RDNL' event.timezone = 'Amsterdam' event.set_default_times + event.target_audience = parse_audience(event.description) add_event(event) rescue Exception => e diff --git a/lib/ingestors/taxila/rug_ingestor.rb b/lib/ingestors/taxila/rug_ingestor.rb index 1bdfbd051..7707d1cf4 100644 --- a/lib/ingestors/taxila/rug_ingestor.rb +++ b/lib/ingestors/taxila/rug_ingestor.rb @@ -50,6 +50,7 @@ def process_rug(url) event.source = 'RUG' event.timezone = 'Amsterdam' event.set_default_times + event.target_audience = parse_audience(event.description) add_event(event) rescue Exception => e diff --git a/lib/ingestors/taxila/surf_ingestor.rb b/lib/ingestors/taxila/surf_ingestor.rb index 8188d1f07..7bcf10879 100644 --- a/lib/ingestors/taxila/surf_ingestor.rb +++ b/lib/ingestors/taxila/surf_ingestor.rb @@ -56,6 +56,7 @@ def process_surf(url) event.source = 'SURF' event.online = true event.timezone = 'Amsterdam' + event.target_audience = parse_audience(event.description) # add event to events array add_event(event) diff --git a/lib/ingestors/taxila/tdcc_ingestor.rb b/lib/ingestors/taxila/tdcc_ingestor.rb index dd68d7ccd..0dd6429f8 100644 --- a/lib/ingestors/taxila/tdcc_ingestor.rb +++ b/lib/ingestors/taxila/tdcc_ingestor.rb @@ -59,6 +59,7 @@ def process_tdcc(url) event.start += 1.year event.end += 1.year end + event.target_audience = parse_audience(event.description) add_event(event) rescue Exception => e diff --git a/lib/ingestors/taxila/utwente_ingestor.rb b/lib/ingestors/taxila/utwente_ingestor.rb index 76941ff82..2b77a0b61 100644 --- a/lib/ingestors/taxila/utwente_ingestor.rb +++ b/lib/ingestors/taxila/utwente_ingestor.rb @@ -52,6 +52,7 @@ def process_utwente(url) event.timezone = 'Amsterdam' event.organizer = 'University of Twente' event.source = 'University of Twente' + event.target_audience = parse_audience(event.description) add_event(event) rescue Exception => e @messages << "Extract event fields failed with: #{e.message}" diff --git a/lib/ingestors/taxila/uu_ingestor.rb b/lib/ingestors/taxila/uu_ingestor.rb index 3fd16ab3d..f5e0a00fd 100644 --- a/lib/ingestors/taxila/uu_ingestor.rb +++ b/lib/ingestors/taxila/uu_ingestor.rb @@ -106,6 +106,7 @@ def process_uu(url) event.timezone = 'Amsterdam' # UU wants opt-in instead of opt-out for this scraper event.visible = false + event.target_audience = parse_audience(event.description) # the below code allows fetching the long description, at the cost of a # page load per event. diff --git a/lib/ingestors/taxila/uva_ingestor.rb b/lib/ingestors/taxila/uva_ingestor.rb index f0fd5b0ba..382fc8ea8 100644 --- a/lib/ingestors/taxila/uva_ingestor.rb +++ b/lib/ingestors/taxila/uva_ingestor.rb @@ -57,6 +57,7 @@ def process_uva(url) event.keywords = attr.fetch('taxonomy', []).map(&:values).flatten event.event_types = attr.fetch('eventType', []).map { |t| convert_event_types(t) } + event.target_audience = parse_audience(event.description) # add event to events array add_event(event) diff --git a/lib/ingestors/taxila/wur_ingestor.rb b/lib/ingestors/taxila/wur_ingestor.rb index 3f39c6ef5..d303ed0df 100644 --- a/lib/ingestors/taxila/wur_ingestor.rb +++ b/lib/ingestors/taxila/wur_ingestor.rb @@ -82,6 +82,7 @@ def process_wur(url) event.set_default_times event.source = 'WUR' event.timezone = 'Amsterdam' + event.target_audience = parse_audience(event.description) add_event(event) rescue Exception => e