def __call__(self, list_manager): soup = load_soup(url_opener(_main_page_url)) master_list = list_manager.get_or_create_managed_list_by_name("Daily Info") for ical_link in soup.xpath("//@href[contains(., 'generate_ics')]"): ical_uri = absolute_url(_main_page_url, ical_link) for event in load_ical(url_opener(ical_uri), master_list=master_list, url_for_logging=_main_page_url): yield event
def __call__(self, list_manager): with ThreadPoolExecutor(max_workers=8) as executor: waiting_futures = [] master_list = list_manager.get_or_create_managed_list_by_name("Oxford University What's On") soup = load_soup(url_opener(url)) for event_element in soup.xpath("//div[@id='primary-content']//ul/li//div[@class='content']"): event_page_path, = event_element.xpath(".//@href[contains(., 'go.rm')]") series, = event_element.xpath("p[1]") series = list_manager.get_or_create_managed_list_by_name(render_html_text(series)) lists = [master_list, series] event_page_url = absolute_url(url, event_page_path) waiting_futures.append(executor.submit(load_events, event_page_url, master_list, lists)) for finished_future in as_completed(waiting_futures): for talk in finished_future.result(): yield talk
def load_events(event_page_url, master_list, lists): try: event_page_soup = load_soup(url_opener(event_page_url)) description_nodes = event_page_soup.xpath("//div[@class='description']") if len(description_nodes) > 0: description_node = description_nodes[0] description = render_html_text(description_node) else: description = "" description = "%s\nLoaded from \"%s\":%s" % (description, event_page_url, event_page_url) ical_path, = event_page_soup.xpath("//a/@href[contains(., 'add_event_to_calendar')]") ical_link = absolute_url(event_page_url, ical_path) results = [] for event in load_ical(url_opener(ical_link), raw_hacks=[munge_character], master_list=master_list, lists=lists): results.append(event.clone_with_modifications(description=description, start=munge_dst(event.start), end=munge_dst(event.end))) return results except Exception: log_exception_via(logger.warning, "Failed loading event from %s" % event_page_url) return []