public IActionResult Run( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] PopulateCfpModel model) { if (model == null) { return(new BadRequestResult()); } SessionizeData sessionizeData = _scraper.Scrape(new Uri(model.CfpUrl)); var cfpModel = new CfpBaseModel { CfpUrl = model.CfpUrl, CfpEndDate = sessionizeData.CfpEndDate, CfpStartDate = sessionizeData.CfpStartDate, EventLocationName = sessionizeData.Location, EventName = sessionizeData.EventName, EventEndDate = sessionizeData.EventEndDate, EventStartDate = sessionizeData.EventStartDate //ProvidesAccommodation = sessionizeData.Accommodation, //ProvidesTravelAssistance = sessionizeData.Travel }; return(new OkObjectResult(cfpModel)); }
public static SessionizeData Cleanse(SessionizeData sessionizeData) { sessionizeData = CleanseLevels(sessionizeData); sessionizeData = CleanseSessionFormats(sessionizeData); sessionizeData = CleanseRooms(sessionizeData); return(sessionizeData); }
private static SessionizeData CleanseLevels(SessionizeData sessionizeData) { var levels = sessionizeData.Categories.Where(x => x.Title == "Level").SelectMany(x => x.Items).ToList(); var introLevel = levels.FirstOrDefault(x => x.Name == "Introductory and overview"); if (introLevel != null) { introLevel.Name = "Introductory/Overview"; } return(sessionizeData); }
private static SessionizeData CleanseSessionFormats(SessionizeData sessionizeData) { var levels = sessionizeData.Categories.Where(x => x.Title == "Session format").SelectMany(x => x.Items).ToList(); var session = levels.FirstOrDefault(x => x.Name == "Session"); if (session != null) { session.Name = "Conference Sessions"; } var workshops = levels.FirstOrDefault(x => x.Name == "Workshop"); if (workshops != null) { workshops.Name = "Workshops"; } return(sessionizeData); }
/// <summary> /// Gets all of the Sessionize data from the passed in URL. /// </summary> /// <param name="url"><see cref="Uri"/> for the Sessionize CFP page.</param> /// <returns>A <see cref="SessionizeData"/> instance containing the data for the provided <paramref name="url"/>.</returns> /// <exception cref="ArgumentNullException">Thrown when <paramref name="url"/> is null.</exception> public SessionizeData Scrape(Uri url) { if (url == null) { throw new ArgumentNullException(nameof(url)); } var result = new SessionizeData(); var doc = new HtmlWeb().Load(url); var descendants = doc.DocumentNode.Descendants().ToList(); result.EventName = descendants.Where(d => d.HasClass(Constants.NAME_TITLE)).SelectMany(d => d.Descendants(Constants.NAME_HEADING4)).FirstOrDefault()?.InnerText; var contentRows = descendants.Where(d => d.HasClass(Constants.NAME_CONTENT)).ToList(); var leftColumn = contentRows.ElementAt(1); var rightColumn = contentRows.ElementAt(2); var leftHeaders = leftColumn.Descendants(Constants.NAME_HEADING2).ToList(); result.EventStartDate = ParseSessionizeDate(leftHeaders.ElementAt(0).InnerText); result.EventEndDate = ParseSessionizeDate(leftHeaders.ElementAt(1).InnerText); // TODO: parse location result.Location = string.Join(Constants.CARRIAGERETURN_LINEFEED, leftHeaders.ElementAt(2).Descendants(Constants.NAME_SPAN).Select(d => d.InnerText.Trim())); result.EventUrl = leftHeaders.ElementAt(3).Descendants(Constants.NAME_LINK).Single().Attributes[Constants.NAME_HREF].Value; var rightHeaders2 = rightColumn.Descendants(Constants.NAME_HEADING2).ToList(); result.CfpStartDate = ParseSessionizeDate(rightHeaders2.ElementAt(0).InnerText); result.CfpEndDate = ParseSessionizeDate(rightHeaders2.ElementAt(1).InnerText); var rightHeaders3 = rightColumn.Descendants(Constants.NAME_HEADING3).ToList(); rightHeaders3 = rightHeaders3.Skip(rightHeaders3.Count - 3).ToList(); result.Travel = rightHeaders3.ElementAt(0).NextSibling.NextSibling.InnerText; result.Accommodation = rightHeaders3.ElementAt(1).NextSibling.NextSibling.InnerText; result.EventFee = rightHeaders3.ElementAt(2).NextSibling.NextSibling.InnerText; return(result); }
static void Main(string[] args) { var sessionizeData = SessionizeData.Retreive(); MusicCityCodeDataImporter.Import(sessionizeData); //MusicCityAgileDataImporter.Import(sessionizeData); //MusicCityDataDataImporter.Import(sessionizeData); ////Order //// Conference //// Speakers //// SessionTimes //// Rooms //// Tracks (shouldn't be needed since we have difference conferences) //// Levels //// Tags //// SessionTypes //// Sessions ////Times are in UTC ////Sessions ////SessionType ////Surveys ////Add resources to a session??? ////Levels??? ////Audiences??? ////Resources??? ////Floor Plans??? Console.WriteLine("Done"); Console.ReadLine(); }
private static string BuildingName => "Student Life Center"; //TODO: Ask Gaines public static void Import(SessionizeData sessionizeData) { SessionizeDataImporter.Import(EventsXdConferenceId, SessionizeConferenceId, BuildingName, sessionizeData); }
private static void ImportSessionTimes(int eventsXdConferenceId, int sessionizeConferenceId, SessionizeData sessionizeData) { var codeSessions = sessionizeData.Sessions .Where(x => x.CategoryItems.Contains(sessionizeConferenceId)) .ToList(); var timeslots = codeSessions .Select(x => new Tuple <string, string>(x.StartsAt, x.EndsAt)) .Distinct() .Select(x => new Timeslot { StartTime = DateTime.Parse(x.Item1).AddHours(-4), EndTime = DateTime.Parse(x.Item2).AddHours(-4), Description = DateTime.Parse(x.Item1).ToString("dddd h:mm tt") }) .Select(x => new Timeslot { StartTime = x.StartTime, EndTime = x.EndTime, Description = $"{x.Description} {(x.EndTime.Subtract(x.StartTime).Hours > 2 ? "Workshop" : null)}".Trim() }).ToList(); foreach (var timeslot in timeslots) { Console.WriteLine(EventsXdService.SessionTimes.Add(eventsXdConferenceId, timeslot)); } }
private static void ImportSpeakers(int eventsXdConferenceId, int sessionizeConferenceId, SessionizeData sessionizeData) { //var codeSessions = sessionizeData.Sessions // .Where(x => x.CategoryItems.Contains(sessionizeConferenceId)) // .ToList(); //var codeSpeakers = ( // from speaker in sessionizeData.Speakers // let codeSessionsForSpeaker = codeSessions.Any(x => x.Speakers.Contains(speaker.Id)) // where codeSessionsForSpeaker // select speaker // ).ToList(); var speakers = sessionizeData.Speakers.ToList(); var eventsxdSpeakers = speakers .Select(x => new ConferenceSpeaker { FirstName = x.FirstName, LastName = x.LastName, Bio = x.Bio, Url = x.Links?.FirstOrDefault(y => y.LinkType == "Blog")?.Url ?? x.Links?.FirstOrDefault(y => y.LinkType == "Company_Website")?.Url ?? x.Links?.FirstOrDefault(y => y.LinkType == "Other")?.Url, ImageUrl = x.ProfilePicture, Twitter = x.Links?.FirstOrDefault(y => y.LinkType == "Twitter")?.Url, LinkedIn = x.Links?.FirstOrDefault(y => y.LinkType == "LinkedIn")?.Url, Title = x.TagLine, SpeakerImage = x.ProfilePicture }) .ToList(); foreach (var speaker in eventsxdSpeakers) { Console.WriteLine(EventsXdService.ConferenceSpeakers.Add(eventsXdConferenceId, speaker)); } }
private static void ImportSessions(int eventsXdConferenceId, int sessionizeConferenceId, SessionizeData sessionizeData) { var timeslots = EventsXdService.SessionTimes.GetAll(eventsXdConferenceId).FromJson <IList <Timeslot> >().ToList(); var rooms = EventsXdService.Rooms.GetAll(eventsXdConferenceId).FromJson <IList <Models.Room> >().ToList(); var levels = EventsXdService.Levels.GetAll(eventsXdConferenceId).FromJson <IList <Level> >().ToList(); var sessionTypes = EventsXdService.SessionTypes.GetAll(eventsXdConferenceId).FromJson <IList <SessionType> >().ToList(); var speakers = EventsXdService.ConferenceSpeakers.GetAll(eventsXdConferenceId).FromJson <IList <ConferenceSpeaker> >().ToList(); var tags = EventsXdService.Tags.GetAll(eventsXdConferenceId).FromJson <IList <Tag> >().ToList(); var tracks = EventsXdService.Tracks.GetAll(eventsXdConferenceId).FromJson <IList <Tag> >().ToList(); var workshopTrackId = tracks.FirstOrDefault(x => x.Name == "Workshops")?.Id; var audiences = EventsXdService.Audiences.GetAll(eventsXdConferenceId).FromJson <IList <Tag> >().ToList(); var allAccessAudienceId = audiences.FirstOrDefault(x => x.Name == "All Access")?.Id; var sessions = sessionizeData.Sessions //.Where(x => x.CategoryItems.Contains(sessionizeConferenceId)) //.Where(x => x.Id == "21437") .ToList(); var sessionizeSessionTypes = sessionizeData.Categories.Where(x => x.Title == "Session format").SelectMany(x => x.Items).ToList(); var sessionizeTags = sessionizeData.Categories.Where(x => x.Title == "Tags").SelectMany(x => x.Items).ToList(); var sessionizeLevels = sessionizeData.Categories.Where(x => x.Title == "Level").SelectMany(x => x.Items).ToList(); var sessionizeRooms = sessionizeData.Rooms.ToList(); var sessionizeConferences = sessionizeData.Categories.Where(x => x.Title == "Conference").SelectMany(x => x.Items).ToList(); var sessionizeSpeakers = ( from speaker in sessionizeData.Speakers let sessionsForSpeaker = sessions.Any(x => x.Speakers.Contains(speaker.Id)) where sessionsForSpeaker select speaker ).ToList(); foreach (var session in sessions) { var timeslotId = timeslots.FirstOrDefault(x => x.StartTime == DateTime.Parse(session.StartsAt))?.Id; var sessionizeLocation = sessionizeRooms.FirstOrDefault(x => x.Id == session.RoomId); var locationId = rooms.FirstOrDefault(x => x.Name == sessionizeLocation?.Name)?.Id; var sessionizeLevel = sessionizeLevels.FirstOrDefault(x => session.CategoryItems.Contains(x.Id)); var levelId = levels.FirstOrDefault(x => x.Name == sessionizeLevel?.Name)?.Id; var sessionizeSessionType = sessionizeSessionTypes.FirstOrDefault(x => session.CategoryItems.Contains(x.Id)); var sessionTypeId = sessionTypes.FirstOrDefault(x => x.Name == sessionizeSessionType?.Name)?.Id; var sessionizeSpeakersNames = sessionizeSpeakers.Where(x => session.Speakers.Contains(x.Id)).Select(x => x.FullName).ToList(); var speakerIds = speakers.Where(x => sessionizeSpeakersNames.Contains(x.FullName)).Select(x => x.Id).ToList(); var sessionizeTagsNames = sessionizeTags.Where(x => session.CategoryItems.Contains(x.Id)).Select(x => x.Name).ToList(); var tagIds = tags.Where(x => sessionizeTagsNames.Contains(x.Name)).Select(x => x.Id).ToList(); var conference = sessionizeConferences.FirstOrDefault(x => session.CategoryItems.Contains(x.Id)); var trackIds = new List <string> { tracks.FirstOrDefault(x => x.Name == conference?.Name)?.Id }; var addWorkshopTrack = sessionTypes.Any(x => x.Id == sessionTypeId && x.Name == "Workshops"); if (addWorkshopTrack) { trackIds.Add(workshopTrackId); } var audienceIds = new List <string> { audiences.FirstOrDefault(x => x.Name == conference?.Name)?.Id, allAccessAudienceId }; var newSession = new Models.Session { Name = session.Title, Description = session.Description, TimeslotId = timeslotId, LocationId = locationId, LevelId = levelId, IsSponsorSession = false, SessionTypeId = sessionTypeId, SpeakerIds = speakerIds, TrackIds = trackIds, AudienceIds = audienceIds, TagIds = tagIds }; EventsXdService.Sessions.Add(eventsXdConferenceId, newSession); Console.WriteLine($"Imported {newSession.Name}"); } }
private static void ImportSessionTypes(int eventsXdConferenceId, int sessionizeConferenceId, SessionizeData sessionizeData) { var allSessionTypes = sessionizeData.Categories .Where(x => x.Title == "Session format") .SelectMany(x => x.Items) .ToList(); var sessions = sessionizeData.Sessions .Where(x => x.CategoryItems.Contains(sessionizeConferenceId)) .ToList(); var sessionTypes = allSessionTypes .Where(x => sessions.Any(y => y.CategoryItems.Contains(x.Id))) .Select(x => new SessionType { Name = x.Name, ShowOnAgenda = true, HasSurvey = false }) .Distinct() .ToList(); foreach (var sessionType in sessionTypes) { Console.WriteLine(EventsXdService.SessionTypes.Add(eventsXdConferenceId, sessionType)); } }
private static void ImportTags(int eventsXdConferenceId, int sessionizeConferenceId, SessionizeData sessionizeData) { var allTags = sessionizeData.Categories .Where(x => x.Title == "Tags") .SelectMany(x => x.Items) .ToList(); var sessions = sessionizeData.Sessions //.Where(x => x.CategoryItems.Contains(sessionizeConferenceId)) .ToList(); var tags = allTags .Where(x => sessions.Any(y => y.CategoryItems.Contains(x.Id))) .Select(x => new Tag { Name = x.Name }) .Distinct() .ToList(); foreach (var tag in tags) { Console.WriteLine(EventsXdService.Tags.Add(eventsXdConferenceId, tag)); } }
private static void ImportLevels(int eventsXdConferenceId, int sessionizeConferenceId, SessionizeData sessionizeData) { var allLevels = sessionizeData.Categories .Where(x => x.Title == "Level") .SelectMany(x => x.Items) .ToList(); var sessions = sessionizeData.Sessions .Where(x => x.CategoryItems.Contains(sessionizeConferenceId)) .ToList(); var levels = allLevels .Where(x => sessions.Any(y => y.CategoryItems.Contains(x.Id))) .Select(x => new Level { Name = x.Name }) .ToList(); foreach (var level in levels) { Console.WriteLine(EventsXdService.Levels.Add(eventsXdConferenceId, level)); } }
private static void ImportRooms(int eventsXdConferenceId, int sessionizeConferenceId, string buildingName, SessionizeData sessionizeData) { var roomIds = sessionizeData.Sessions .Where(x => x.CategoryItems.Contains(sessionizeConferenceId)) .Select(x => x.RoomId) .Distinct() .ToList(); var rooms = sessionizeData.Rooms .Where(x => roomIds.Contains(x.Id)) .Select(x => new Models.Room { Name = x.Name, Building = buildingName }) .ToList(); foreach (var room in rooms) { Console.WriteLine(EventsXdService.Rooms.Add(eventsXdConferenceId, room)); } }
public static void Import(int eventsXdConferenceId, int sessionizeConferenceId, string buildingName, SessionizeData sessionizeData) { //ClearCurrentSpeakers(eventsXdConferenceId); //ImportSpeakers(eventsXdConferenceId, sessionizeConferenceId, sessionizeData); //ClearCurrentSessionTimes(eventsXdConferenceId); //ImportSessionTimes(eventsXdConferenceId, sessionizeConferenceId, sessionizeData); //ClearCurrentRooms(eventsXdConferenceId); //ImportRooms(eventsXdConferenceId, sessionizeConferenceId, buildingName, sessionizeData); //ClearCurrentLevels(eventsXdConferenceId); //ImportLevels(eventsXdConferenceId, sessionizeConferenceId, sessionizeData); //ClearCurrentTags(eventsXdConferenceId); //ImportTags(eventsXdConferenceId, sessionizeConferenceId, sessionizeData); //ClearCurrentSessionTypes(eventsXdConferenceId); //ImportSessionTypes(eventsXdConferenceId, sessionizeConferenceId, sessionizeData); //ClearCurrentSession(eventsXdConferenceId); ImportSessions(eventsXdConferenceId, sessionizeConferenceId, sessionizeData); }
private static SessionizeData CleanseRooms(SessionizeData sessionizeData) { var rooms = sessionizeData.Rooms.ToList(); var cinema = rooms.FirstOrDefault(x => x.Name == "Cinema"); if (cinema != null) { cinema.Name = "Sarratt 197 (Cinema)"; } var s216 = rooms.FirstOrDefault(x => x.Name == "S 216/220"); if (s216 != null) { s216.Name = "Sarratt 216/220"; } var s325 = rooms.FirstOrDefault(x => x.Name == "S 325/327"); if (s325 != null) { s325.Name = "Sarratt 325/327"; } var s361 = rooms.FirstOrDefault(x => x.Name == "S 361"); if (s361 != null) { s361.Name = "Sarratt 361"; } var s363 = rooms.FirstOrDefault(x => x.Name == "S 363"); if (s363 != null) { s363.Name = "Sarratt 363"; } var r308 = rooms.FirstOrDefault(x => x.Name == "R 308"); if (r308 != null) { r308.Name = "Rand 308"; } var a100 = rooms.FirstOrDefault(x => x.Name == "A 100"); if (a100 != null) { a100.Name = "Alumni 100 (Lounge)"; } var a201 = rooms.FirstOrDefault(x => x.Name == "A 201"); if (a201 != null) { a201.Name = "Alumni 201 (Classroom)"; } var a202 = rooms.FirstOrDefault(x => x.Name == "A 202"); if (a202 != null) { a202.Name = "Alumni 202 (Memorial Hall)"; } var a204 = rooms.FirstOrDefault(x => x.Name == "A 204/206"); if (a204 != null) { a204.Name = "Alumni 204/206 (Reading Room)"; } var slc008 = rooms.FirstOrDefault(x => x.Name == "SLC 008"); if (slc008 != null) { slc008.Name = "SLC 008"; } var slc010 = rooms.FirstOrDefault(x => x.Name == "SLC 010A"); if (slc010 != null) { slc010.Name = "SLC 010"; } var slc132A = rooms.FirstOrDefault(x => x.Name == "SLC 132 A"); if (slc132A != null) { slc132A.Name = "SLC 132 A"; } var slc132B = rooms.FirstOrDefault(x => x.Name == "SLC 132 B"); if (slc132B != null) { slc132B.Name = "SLC 132 B"; } var slc132C = rooms.FirstOrDefault(x => x.Name == "SLC 132 C"); if (slc132C != null) { slc132C.Name = "SLC 132 C"; } return(sessionizeData); }