def get_courses(): '''Navigates to Premain Gets all courses ''' session = Session() r = s.get('https://edux.pjwstk.edu.pl/Premain.aspx') r.raise_for_status() new_announcements = [] for i, (course_id, name, url) in enumerate(extract_courses(r.content)): course = session.query(Course). \ filter_by(course_id=course_id). \ first() if course is None: print u'Add new course "{}"'.format(name) course = Course( course_id=course_id, title=name) session.add(course) print course.title # Get inside the course r = s.get(url) r.raise_for_status() session.expunge(course) course_content = r.content if 'Announcements.aspx' in course_content: print 'There are announcements' # Get announcement for this course for (timestamp, announcement) in get_announcements(course, url): new_announcements.append((course.title, timestamp, announcement)) if 'Quiz.aspx' in course_content: print 'There are quizes' get_quiz(course) if 'Folder.aspx' in course_content: print 'There are folders' get_folders(course) # Prepare email stuff from gathered data subject = 'You have {0} new announcements on EDUX'.format( len(new_announcements)) body = u'' # Sort new announcements so highest date (newer) will be on top sorted_announcements = sorted(new_announcements, key=operator.itemgetter(1), reverse=True) # TODO: Use some templating here for i, (course, timestamp, announcement) in enumerate(sorted_announcements, 1): body += u'{0}. {1} at {2}\n{3}\n\n'.format( i, timestamp, course, announcement) # Cant send empty body because mailgun throws HTTP400s. send_notify(subject, body) session.commit()