· 6 years ago · Nov 04, 2019, 07:16 PM
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4import oauth2 as oauth
5from datetime import datetime
6import urlparse
7import json
8import sys
9
10# USOS API Base URL, trailing slash included.
11usosapi_base_url = '';
12
13# Consumer Key to use.
14consumer_key = '';
15consumer_secret = '';
16
17# Access Token to use. If left blank, then user authorization process will follow.
18access_token_key = ''
19access_token_secret = ''
20
21# End of settings. Program starts here.
22
23if not (usosapi_base_url and consumer_key and consumer_secret):
24 print "Fill the settings first."
25 sys.exit(1)
26usosapi_base_url_secure = usosapi_base_url.replace("http://", "https://")
27consumer = oauth.Consumer(consumer_key, consumer_secret)
28if access_token_key:
29 access_token = oauth.Token(access_token_key, access_token_secret)
30else:
31 request_token_url = usosapi_base_url_secure + 'services/oauth/request_token?scopes=studies|offline_access'
32 authorize_url = usosapi_base_url + 'services/oauth/authorize'
33 access_token_url = usosapi_base_url_secure + 'services/oauth/access_token'
34 # Step 1. Request Token
35 client = oauth.Client(consumer)
36 resp, content = client.request(request_token_url, "GET", callback_url='oob')
37 if resp['status'] != '200':
38 raise Exception("Invalid response %s:\n%s" % (resp['status'], content))
39 def _read_token(content):
40 arr = dict(urlparse.parse_qsl(content))
41 return oauth.Token(arr['oauth_token'], arr['oauth_token_secret'])
42 request_token = _read_token(content)
43 # Step 2. Obtain authorization
44 print "Go to the following link in your browser:"
45 print "%s?oauth_token=%s" % (authorize_url, request_token.key)
46 print
47 oauth_verifier = raw_input('What is the PIN code? ')
48 # Step 3. Access Token
49 request_token.set_verifier(oauth_verifier)
50 client = oauth.Client(consumer, request_token)
51 resp, content = client.request(access_token_url, "GET")
52 try:
53 access_token = _read_token(content)
54 except KeyError:
55 print "Cound not retrieve Access Token (invalid PIN?)."
56 sys.exit(1)
57
58client = oauth.Client(consumer, access_token)
59resp, content = client.request(usosapi_base_url + "services/tt/student?start=" +
60 str(datetime.now().date()) + "&days=1", "GET")
61if resp['status'] != '200':
62 raise Exception(u"Invalid response %s.\n%s" % (resp['status'], content))
63items = json.loads(content)
64# Print today's activities.
65activities = sorted(items, lambda x, y: cmp(x['start_time'], y['start_time']))
66if len(activities) > 0:
67 for item in activities:
68 print u"%s - %s -- %s" % (item['start_time'][11:16], item['end_time'][11:16], item['name']['en'])
69else:
70 print u"No activities today."
71
72if not access_token_key:
73 print
74 print "*** You may want to hardcode these values, so you won't need to reauthorize ***"
75 print "access_token_key = '%s'" % access_token.key
76 print "access_token_secret = '%s'" % access_token.secret