FAQ

由於 Canvas 在國內的資訊不多, 所以我們試著將我們遇到、解決的問題, 搜集作整理在這個常見問題集內, 希望對大家有幫助。

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

張貼者:2019年6月4日 上午7:45John Liou

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.
是不是比較簡單了?



呼叫在 Canvas 的 API

張貼者:2019年6月4日 上午7:02John Liou

Q:
請問如何在 PHP 中使用指令呼叫在 Canvas中 REST API?
例如: 課程開始日期和結束日期。
A:
其實呼叫 Canvas 的 API 並沒有持別給 PHP 呼叫的,RESTful API 的方法也都一樣。
你要先了解 Canvas API,如果能用 curl 組合成指令呼叫 API,就能在 PHP 中使用了。 
以我們在公司提供校方培訓工程師的文件中,截取的內容:

所有課程

假設我們要取得所有課程, 你需要使用的 API 及相關資訊如下:
  • API: GET /api/v1/courses
  • URL: https://canvas.click-ap.com/api/v1/courses 
  • API Token: 請向系統管理取得...
用 curl 或 瀏覽器 用 GET 取得, 你應該會得到如下的內容:
{
  "course": {
    "title": "經濟學",
    "description": "經濟學課程主要探討重要的經濟理論與應用,及目前各國經濟的現況與發展。",
    "path": "course-1",
    "canvas_course_id": 10010010,
    "teaser": "This is an example teaser",
    "enrollment_open": true,
    "visibility": "listed",
    "enrollment_cap": 150,
    "waitlist": true,
    "waitlist_cap": 25,
    "enrollment_fee": 00.00,
    "days_to_complete": 45,
    "list_order": 123,
    "credits": 4,
    "sku": "01120000A"
  }
}


如果單純用 curl 的指令應該是這樣:
curl -H 'Authorization: Bearer $auth'https://canvas.click-ap.com/api/v1/courses
取得成績
curl -H 'Authorization: Bearer $auth' https://canvas.click-ap.com/api/v1/accounts/123/analytics/current/grades
修改結束日期
curl https://canvas.click-ap.com/api/v1/courses/123 -X PUT -d 'end_at=2018-05-28T14:00:00Z'

以上只是大致舉例; 但因為 Canvas 的 API 功能包括很多, 無法一一為大家說明, 以上內容主要
參考自: https://canvas.instructure.com/doc/api/index.html 。


Canvas 支援 flash 嗎?

張貼者:2019年5月29日 下午4:51Moodle Taiwan   [ 已更新 2019年5月29日 下午4:52 ]

Q:
我們公司的 Canvas 課程是用 Flash 做的; 大部份員工電腦都可以使用,少部份需要另外安裝 flash,但有些同仁的筆電就不能看,有沒有解決辦法?
A:
根據 Canvas 官方說明 - Canvas 發佈說明資訊 - 2018-06-02 :
Flash 內容提醒:只要各大瀏覽器依然支援 Flash,Canvas 就能顯示有關內容。Microsoft Edge、Safari、Chrome 和 Firefox 預設使用 HTML5 為顯示網站內容的首選方法,有助提供更快更安全的瀏覽體驗。以上瀏覽器最終會封鎖所有 Flash 內容。如欲 Canvas 發揮最佳性能,設計課程時應確保內容支援 HTML5。只要手動允許瀏覽器顯示 Flash 內容,便可繼續查看受影響的部分。使用相機和麥克風錄製 Canvas 多種格式的內容編輯器的媒體內容時,仍需 Flash 才可如常運作,Canvas 工程師會著手解決有關問題。
Flash 支援完全取決於 Browser...
我們講師建議盡早....



Canvas 與 Gmail

張貼者:2019年5月24日 下午8:47Jack Liou   [ 已更新 2019年5月24日 下午8:48 ]

Canvas 如何發送 email 郵件


連接到 Canvas 伺服器
編輯 /opt/canvas/canvaslms/config/outgoing_mail.yml 文件中,加入以下內容,USERNAME和PASSWORD分別用您的 gmail 帳戶用戶名和密碼換:

production:
address: smtp.gmail.com
port: 587
user_name: USERNAME@gmail.com
password: PASSWORD
authentication: login
domain: smtp.gmail.com
outgoing_address: USERNAME@gmail.com
default_name: Click-AP Canvas

重啟CanvasLMS

注意:

  1. 請將 /opt/canvas/canvaslms/ ,替換成你的目錄
  2. 編輯儲存後,請重啟Apache服務
  3. 使用郵件功能,請務必確認你的 canvas 網站配置了網域名稱,否則即使收到郵件,裡面的連結也打不開。(如果沒有設定 SSL 證書,打開連結時會有安全提示,忽略即可。)

Canvas 的官方發佈平台

張貼者:2019年5月23日 下午9:51Moodle Taiwan   [ John Liou 已於 2019年5月24日 上午6:04 更新 ]

1-5 of 5