示例#1
0
        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));
        }
示例#2
0
        public static SessionizeData Cleanse(SessionizeData sessionizeData)
        {
            sessionizeData = CleanseLevels(sessionizeData);
            sessionizeData = CleanseSessionFormats(sessionizeData);
            sessionizeData = CleanseRooms(sessionizeData);

            return(sessionizeData);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        /// <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);
        }
示例#6
0
        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();
        }
示例#7
0
        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);
        }
示例#16
0
        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);
        }