2017-03-07 46 views
3

我工作的组织开始使用Canvas LMS,我负责提取平台的数据并帮助处理数据分析。如何使用python使用Canvas Data REST API?

Canvas LMS提供了一个Data API,但是我很难使用Python包装器。我想用Python进行交互,这是我们官方堆栈的一部分。

我知道有官方文档在(https://portal.inshosteddata.com/docs/api),但我真的不使用的授权方法和它会这么容易有一个示例代码。

那么,我应该如何开始我的python代码与Canvas LMS Data API进行交互?

回答

4

这里我们开始吧!

我终于在Canvas社区的帮助下通过他们的网站完成了它(https://community.canvaslms.com/thread/7423)。我也在这里发布问题和答案,因为我相信StackOverflow更容易找到答案。

希望这对其他人有用!

#!/usr/bin/python 

#imports 
import datetime 
import requests 
import hashlib 
import hmac 
import base64 
import json 


#Get the current time, printed in the right format 
def nowAsStr(): 
    currentTime = datetime.datetime.utcnow() 
    prettyTime = currentTime.strftime('%a, %d %b %Y %H:%M:%S GMT') 
    return prettyTime 

#Set up the request pieces 
apiKey = 'your_key' 
apiSecret = 'your_secret' 
method = 'GET' 
host = 'api.inshosteddata.com' 
path = '/api/account/self/dump' 
timestamp = nowAsStr() 

requestParts = [ 
    method, 
    host, 
    '', #content Type Header 
    '', #content MD5 Header 
    path, 
    '', #alpha-sorted Query Params 
    timestamp, 
    apiSecret 
] 

#Build the request 
requestMessage = '\n'.join(requestParts) 
print (requestMessage.__repr__()) 
hmacObject = hmac.new(apiSecret, '', hashlib.sha256) 
hmacObject.update(requestMessage) 
hmac_digest = hmacObject.digest() 
sig = base64.b64encode(hmac_digest) 
headerDict = { 
    'Authorization' : 'HMACAuth ' + apiKey + ':' + sig, 
    'Date' : timestamp 
} 

#Submit the request/get a response 
uri = "https://"+host+path 
print (uri) 
print (headerDict) 
response = requests.request(method='GET', url=uri, headers=headerDict, stream=True) 

#Check to make sure the request was ok 
if(response.status_code != 200): 
    print ('Request response went bad. Got back a ', response.status_code, ' code, meaning the request was ', response.reason) 
else: 
    #Use the downloaded data 
    jsonData = response.json() 
    print json.dumps(jsonData, indent=4)