如何使用python使用Canvas Data REST API?

張貼者:2019年6月4日 上午7:45John MoodleTW
Q:
我們公司開始使用Canvas, 我負責取得平台的數據,並幫助分析處理。Canvas 提供了一個Data API,  我想用Python 來進行,這是我們公司產品功能的一部分。
我知道有官方文檔在(https://portal.inshosteddata.com/docs/api),但我真的不會使用的授權方法 和 它提供的 demo 程式碼。
Another: 
那麼,我應該如何開始我的python代碼與Canvas LMS Data API進行交互?
如何使用python使用Canvas Data REST API?
A:
您所提供的官方文檔並不是 Instructure 官方的文件(初步看到內容, 並沒有仔細去看...)。
Instructure 官方的 Canvas LMS 的 API 請參考: 
https://canvas.instructure.com/doc/api/index.html
如果您熟稔的語言是 Python , 要用 Python 開發你的APP;github 上有一支給 CherryPy 包裝好的工具: Canvas-CPTool
它的特色:
它把 OAuth2 Token 請求的流程,完全整合在以單行程式可完成的叫用方式。
使用 Python decorator 阻擋未經授權 user 訪問 CherryPy 的頁面。
內建 memcachable API (mmh3 hash 演算)機制呼叫 Canvas LMS API。
內有 try / except 讓 Canvas 回傳的訊息, 完整/忠實的回饋
mmh3(MurmurHash) 是從 cpp 改寫來的 hash 工具
使用這個工具就可以非常簡單的叫用 Canvas 的API; 例如:
cherrypy.tools.canvas = CanvasLMSTool.CanvasLMSTool(CANVAS_URL, CANVAS_CLIENT_ID, CANVAS_CLIENT_SECRET, MC)
canvas = cherrypy.tools.canvas  #just a shortcut

@cherrypy.expose
@cherrypy.tools.canvas()  #checks for a Canvas token, or forces user to perform the token request flow
def mycourses(self):
    # Get the Canvas user's list of courses and cache the result for 300 seconds
    courses = canvas.api('get', '/api/v1/courses', ttl=300)
    return course  #returning a simplejson object
CANVAS_URL: Canvas 的網址。
CANVAS_CLIENT_ID: Canvas Client ID...
CANVAS_CLIENT_SECRET: Canvas Token key.
是不是比較簡單了?



Comments