Ejemplo n.º 1
0
def download_majors(username, password):
    # Create target URL
    college_pages = {}
    parameters = copy.copy(URL_PARAMS)
    url = SOURCE_URL + '?' + urllib.parse.urlencode(parameters)
    parameters['changeCollege'] = 'Next'
    parameters['call'] = '4'
    # Get viewstate
    s = cmu_auth.authenticate(url, username, password)
    for college in COLLEGES:
        parameters['college'] = college
        url = SOURCE_URL + '?' + urllib.parse.urlencode(parameters)

        export_page = s.get(url).content
        soup = bs4.BeautifulSoup(export_page)
        # _.map_(soup.select('option'),lambda x:print(_.strip_tags(x).split(' in ')))
        college_pages[college] = _.chain(
            soup.select('option')).map(lambda x: _.strip_tags(x)).map(
                lambda x: {
                    'name': x,
                    'department': x.split(' in ')[1],
                    'type': x.split(' in ')[0]
                }).value()

    return {'data': college_pages, 'auth': s}
Ejemplo n.º 2
0
def authenticate(username, password):
    # Login
    s = cmu_auth.authenticate(LOGIN_URL, username, password)
    login_page = s.get(LOGIN_URL)
    soup = bs4.BeautifulSoup(login_page.text)

    # Parse needed authenication token
    login_link = soup.find('a', {'id': 'HyperLink1'})['href']
    login_link_queries = urllib.parse.urlparse(login_link)[4]
    hdnPersonAuth = urllib.parse.parse_qs(login_link_queries)['a2e'][0]

    return hdnPersonAuth
Ejemplo n.º 3
0
def authenticate(username, password):
    # Login
    s = cmu_auth.authenticate(LOGIN_URL, username, password)
    login_page = s.get(LOGIN_URL)
    soup = bs4.BeautifulSoup(login_page.text)

    # Parse needed authenication token
    login_link = soup.find('a', {'id': 'HyperLink1'})['href']
    login_link_queries = urllib.parse.urlparse(login_link)[4]
    hdnPersonAuth = urllib.parse.parse_qs(login_link_queries)['a2e'][0]

    return hdnPersonAuth
Ejemplo n.º 4
0
def authenticate(username, password):
    # Login
    s = cmu_auth.authenticate(LOGIN_URL, username, password)
    login_page = s.get(LOGIN_URL)
    soup = bs4.BeautifulSoup(login_page.text, 'html.parser')

    # Parse needed authenication token
    login_link = soup.find('a', {'id': 'HyperLink1'})['href']
    login_link_queries = urllib.parse.urlparse(login_link)[4]
    hdnPersonAuth = urllib.parse.parse_qs(login_link_queries)['a2e'][0]

    # Add auth token to the form submission
    formdata['_ctl0:hdnPersonAuth'] = hdnPersonAuth
    return s.cookies[SESSION_ID_COOKIE]
Ejemplo n.º 5
0
def authenticate(username, password):
    # Login
    s = cmu_auth.authenticate(LOGIN_URL, username, password)
    login_page = s.get(LOGIN_URL)
    soup = bs4.BeautifulSoup(login_page.text, 'html.parser')

    # Parse needed authenication token
    login_link = soup.find('a', {'id': 'HyperLink1'})['href']
    login_link_queries = urllib.parse.urlparse(login_link)[4]
    hdnPersonAuth = urllib.parse.parse_qs(login_link_queries)['a2e'][0]

    # Add auth token to the form submission
    formdata['_ctl0:hdnPersonAuth'] = hdnPersonAuth
    return s.cookies[SESSION_ID_COOKIE]
Ejemplo n.º 6
0
def download_fces(div, username, password, authtoken):
    # Create target URL
    parameters = copy.copy(URL_PARAMS)
    parameters['div'] = div
    url = SOURCE_URL + '?' + urllib.parse.urlencode(parameters)

    # Build form input
    formdata = copy.copy(FORM_DATA)
    formdata['_ctl0:hdnPersonAuth'] = authtoken

    # Get viewstate
    s = cmu_auth.authenticate(url, username, password)
    export_page = s.get(url, data=formdata).content
    soup = bs4.BeautifulSoup(export_page)
    viewstate = soup.find('input', {'id': '__VIEWSTATE'})['value']
    formdata['__VIEWSTATE'] = viewstate

    # Download output MSXML
    pst2 = s.post(url, data=formdata)
    return pst2.text
Ejemplo n.º 7
0
def download_fces(div, username, password, authtoken):
    # Create target URL
    parameters = copy.copy(URL_PARAMS)
    parameters['div'] = div
    url = SOURCE_URL + '?' + urllib.parse.urlencode(parameters)

    # Build form input
    formdata = copy.copy(FORM_DATA)
    formdata['_ctl0:hdnPersonAuth'] = authtoken
    print('URL:  ',url)
    # Get viewstate
    s = cmu_auth.authenticate(url, username, password)
    export_page = s.get(url, data=formdata).content
    soup = bs4.BeautifulSoup(export_page)
    viewstate = soup.find('input', {'id': '__VIEWSTATE'})['value']
    formdata['__VIEWSTATE'] = viewstate

    # Download output MSXML
    pst2 = s.post(url, data=formdata)
    return pst2.text
Ejemplo n.º 8
0
def download_majors(username, password):
    # Create target URL
    college_pages={}
    parameters = copy.copy(URL_PARAMS)
    url = SOURCE_URL + '?' + urllib.parse.urlencode(parameters)
    parameters['changeCollege']='Next'
    parameters['call']='4'
    # Get viewstate
    s = cmu_auth.authenticate(url, username, password)
    for college in COLLEGES:
      parameters['college']=college
      url = SOURCE_URL + '?' + urllib.parse.urlencode(parameters)

      export_page=s.get(url).content
      soup = bs4.BeautifulSoup(export_page)
      # _.map_(soup.select('option'),lambda x:print(_.strip_tags(x).split(' in ')))
      college_pages[college]=_.chain(soup.select('option')).map(lambda x: _.strip_tags(x)).map(lambda x: {'name':x,'department':x.split(' in ')[1], 'type':x.split(' in ')[0] }).value()


    return {'data':college_pages,'auth':s }
Ejemplo n.º 9
0
def get_courses(username, password, semester = 'S16'):


    try:
        s = authenticate('https://s3.andrew.cmu.edu/sio/index.html', username, password )
    except KeyError:
        print("Incorrect Password")
        return None
    except:
        print("An error has occurred")
        return None

    user_data = requests.get("http://apis.scottylabs.org/directory/v1/andrewID/{}".format(username)).json()

    ics_file = s.get('https://s3.andrew.cmu.edu/sio/secure/export/schedule/{0}_semester.ics?semester={0}'.format(semester)).text

    cal = Calendar.from_ical(ics_file)

    with open('classes.json') as data_file:
        classes = json.load(data_file)


    day_map = {'SU': 0, 'MO': 1, 'TU': 2, 'WE': 3, 'TH': 4, 'FR': 5, 'SA': 6}
    course_data = {'user': user_data, 'courses': {}, 'schedule': []}
    for event in cal.walk():
        if event.name != 'VEVENT': continue

        days = list(map(lambda day: day_map[day], event.get('rrule').get('byday')))

        begin = event.get('dtstart').dt
        end = event.get('dtend').dt

        course_title, tmp = event.get('summary').split(" :: ")
        course_number, course_section = tmp.split(" ")
        instructors = [x.strip() for x in (event.get('description').split('\n\n')[1].split(":")[1].split(';'))]
        location = event.get('location').strip()

        if not (course_number in course_data['courses']):
            if (course_number in classes['courses']):
                course_data['courses'][course_number] = classes['courses'][course_number]

        for day in days:
            delta = timedelta(days = day - begin.isoweekday())

            start_time = begin + delta
            end_time = end + delta
            duration = end_time - start_time

            course_data['schedule'].append({
                'title': "{}: {}".format(course_number, course_title),
                'start': start_time.isoformat(),
                'end': end_time.isoformat(),
                'location': location,
                'duration': str(duration),
                'course': course_number,
                'section': course_section,
                'instructors': instructors
            })


    return course_data