โ ๏ธ๊ณต์ฌ์ค, ์ค๋ช ์ด ์ค๊ตฌ๋๋ฐฉ์ผ ์ ์์ต๋๋ค
์ธ์ ๊ฐ.. ๊ธ ์์ฐ๊ฒ ๋๋ฉด ๋ค๋ฌ์ด๋ณด๊ฒ ์ต๋๋ค
์ฒ์์ api๋ฅผ ๊ฒ์ํด๋ดค์ง๋ง, ๋์ ํ ๋ด ๋ํ๊ต๊ฐ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ๊ณผ ๊ฐ์ api ๋ฅผ ์ฐพ์ง ๋ชปํ์๋ค
์ง๊ธ ๋ณด๋ Extended๋ผ ์ ํ์๋๋ฐ ์์ด๋ฅผ ๋ชปํ๊ฑฐ์๋ค์
๊ทธ๋์ ๋ ์ด์ด์ ์คํฌ๋ํ ํด์ผ ํ๋๊ฑด๊ฐ? ๋ก๊ทธ์ธ์ ์ด๋ป๊ฒ ํ์ง? ํ๋ ์ก์๊ฐ์ด ๋ค์ด์ ๋จธ๋ฆฌ๊ฐ ์ด์ง๋ฌ์์ง๋์ฏค
๋๊ฐ API๋ฅผ ์ฐพ์์ฃผ์ จ๋ค ๊ฐ์ฌํฉ๋๋ค๊ฐ์ฌํฉ๋๋ค
์ด๋ณด๋ผ? REST? ํ ์ค ๋ชจ๋ฆ ๋๋ค
๋๊ฐ ์ด๋ฏธ python์ผ๋ก ๋ง๋ค์ด ๋์ง ์์์๊น ์๊ฐํด์ ์ฐพ์๋ดค๋ค.
์ด๋ฏธ ์์ด์ ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์์๋ค. ๋งค์ฐ ๊ณ ๋ง์ฐ๋ star ๋๋ฅด๊ณ ์ฌ์ฉํ๊ธฐ
ucfopen/canvasapi
๊ทธ๋ฆฌ๊ณ docs๊ฐ ๊น๋ํ์ง ์์ง๋ง ์๋๊ฑฐ๋ก ๋ง์กฑํด์
์ผ๋จ ํ๊ต์์ ์ฌ์ฉ์ค์ธ ํญ์ ์ดํด๋ณด์
๊น๋ํ๊ฒ ์๋ ๊ฒ ๊ฐ์ ๋ณด์ด์ง๋ง, ๊ทธ๋ ์ง ์๋ค. ๊ฐ์ ์ปจํ ์ธ ํญ์ ์คํ ์๋๊ฐ ์ค๋ ๊ฑธ๋ฆฌ๊ณ , ๊ณผ์ ๋ฐ ํ๊ฐ์๋ ๊ณผ์ ๋ฟ๋ง ์๋๋ผ ๊ณต์ง๊น์ง ํ์๊ฐ ๋๋ ๋ฑ ์ฌ๋ฌ๋ฏ๋ก ๋ถ๋ฆฌ๊ฐ ์ ์๋์ด์๋ค.
์ง๊ธ ์ถ์ธกํ๊ฑด๋ฐ, ์๋ง ๊ธฐ์กด Canvas LMS๋ฅผ ์ฐ์ง ์๊ณ ๋ค๋ฅธ ๋ฐฉ์์ ์ฌ์ฉํจ์ ๋ฐ๋ผ ๋์จ ๊ฒฐ๊ณผ๊ฐ ์๋๊ฐ ์ถ๋ค.
์ด๋ฐ ์ถ์ธก์ด ๋์ฌ ์ ์๋๊ฒ, ๋ฌธ์๊ฒ์ํ ๋ถํฐ ๊ฐ์์๋ฃ์ค ๋ฑ์ ์ฌ๋ฌ ๊ฐ์ง ํญ์ ๋งํฌ๊ฐ external_tools
๋ก ๋์ถฉ ์ ๋ฆฌ๊ฐ ๋์ด์๋ค
์๋ฌดํผ ์ฐ๋ฆฌ๋ ๊ฐ์ ์ ๋ณด์ ๊ณผ์ , ์ปจํ ์ธ , ๊ณต์ง๋ฅผ api๋ฅผ ํตํด ์ฐพ์์ผ ํ๋ค
ํจ์บ์ง์ ๋์์๋ ๋๋ก ์ผ๋จ ๋ฐ๋ผ๊ฐ ๋ณด์, canvas ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ์ํด์๋ API_URL
(๋ณดํต์ ๋ํ๊ต LMS ์ฃผ์์ด๋ค), token
(LMS ๋ก๊ทธ์ธ ํ ์ค์ ๋์์ token์ ๋ฐ์์ฌ ์ ์๋ค)์ด ํ์ํ๋ค.
์ฐ๋ฆฌ๊ฐ ์ป์ด์์ผ ํ ์ ๋ณด๋ Course
๊ฐ์ ์ ๋ณด์ด๋ค
๊ฐ์ ์ ๋ณด๋ฅผ ์ ๋ถ๋ฌ์ค๊ณ ์๋์ง ์ฒดํฌํด๋ณด์
import canvasapi
canvas = canvasapi.Canvas(API_URL, TOKEN)
for course in canvas.get_courses():
try:
print(course)
except AttributeError:
pass
AttributeError
์์ธ์ฒ๋ฆฌ๋ฅผ ํ ์ด์ ๋ course ๋ฐ์ดํฐ ์ค์ ๊ถํ์ด ๋ถ์กฑํ๊ฑฐ๋ ๋น์ด์๋ course๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค.. ์๋ง ์ ํ๊ธฐ์ ๋ค์๋ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด์๋๊ฒ ์๋๊น ์ถ์ธกํด๋ณด๋ฉฐ, ํ์ฌ ๊ฐ์ ์ ๋ณด๋ง ์ ๊ฑธ๋ฌ๋ด์.
๐๋ฐ๋ก ๋ถ์ํด๋ณด์๋ค!๐
๊ฐ๋์ฉ ๊ถํ์ด ๋ถ์กฑํ๋ค๋ ๋ฉ์ธ์ง์ ํจ๊ป ์์ธ์ฒ๋ฆฌ๋ฅผ ๋ด๋ฟ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ฌ์ง์ด ๊ถํ์ด ๋ถ์กฑํ์ง๋ ์์๋ฐ ๋ณ์๊ฐ ์กด์ฌํ์ง ์์์ (api์๋ ์ ํ์ ์ผ๋ก ์กด์ฌํ๋ค๊ณ ํ์ ๋์ด์๋ค) ์๋ฌ๊ฐ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ฅผ ์กฐ์ฌํ๋ฉฐ ๊ธฐ๋กํด๋๊ฐ๋ฉด์ ํ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์๋ณด์.
์ฌ๋ฏธ๋ก ๋ฏ์ด๋ณธ๊ฑด ์๋๊ณ ํ๋ ์ํ๋ ์ ๋ณด๊ฐ ์๋์์ ๋ถ์ํ ๊ฒฐ๊ณผ์ด๋ค
๊ณต์ฌ์ค, ์กฐ๊ธ๋ ๋ด์ฉ์ ๋ฃ์ ์์ ์ ๋๋ค!
Course
: ๊ฐ์ ๊ฐ์ฒด์ด๋ค. ํ์ฌ ์งํ๋๊ณ ์๋ ๊ฐ์์ธ์ง ์ ์ดํด๋ด์ผ ํ๋ค. get_courses()
๋ฅผ ํตํด Canvas
ํด๋์ค์์ ๊ฐ์ ธ์ฌ ์ ์๋ค.id
: ๊ฐ์์ ๊ณ ์ id ๊ฐ์ด๋ค.name
: ๊ฐ์์ ์ด๋ฆ ๊ฐ์ด๋ค.Assignment
: ๊ณผ์ (๋ผ๊ณ ๋ถ๋ฅด์ง๋ง ์ปจํ
์ธ ์กํ) ๊ฐ์ฒด์ด๋ค. get_assignments()
๋ฅผ ํตํด Course
ํด๋์ค์์ ๊ฐ์ ธ์ฌ ์ ์๋ค.id
: ๊ณผ์ ์ ๊ณ ์ id ๊ฐ์ด๋ค.workflow_state
: ํ์ฌ ๊ณผ์ ์ ์ํ๋ฅผ ํ์ธํ ์ ์๋ค.Module
: ๋ชจ๋์ด๋ผ ๋์ด์์ง๋ง, ๋ฌถ์ ์ด๋ผ ์๊ฐํ๋๊ฒ ํธํ๋ค. get_modules()
๋ฅผ ํตํด Course
ํด๋์ค์์ ๊ฐ์ ธ์ฌ ์ ์๋ค.TODO : ๋ ์์ฑํ ๊ฒ (์กธ๋ ค์)
๋ฏ์ด๋ณด๋ฉฐ ์ ๋ฆฌํ ์๋ฃ (๋งํฌ๋ค์ด)
์ด๋ฐ์ ๋ง๋ค ๋์๋ ํ
์คํธ๋ฅผ ์ํด ์ง์ ๋ด ๋ฐ์ดํฐ ์ ๋ณด๋ฅผ ํ ํฐ์ ๋ง๋ค์ด์ ๋ฐ์์์ผ ํ๋ค.
๋ํ ์ฌ์ดํธ๋ฅผ ๊ฐ์ ธ์ฌ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์์ผ๋, ์ด์ ์ฌ์ฉ์๊ฐ ์ด ํ๋ก๊ทธ๋จ์ ์ธ ์ ์๊ฒ ์ฌ์ฉ์์ LMS ์ฌ์ฉ ์์ฒญ์ ๋ฐ๋ OAuth๋ฅผ ์ด์ฉํด์ผ ํ๋ค
๊ทธ๋ฐ๋ฐ..
์ฐธ๊ณ : ๊ฐ๋ฐ์ ํค๋ ๊ณ์ ๊ถํ์ ๋๋ค. ๊ณ์ ํ์์์ ๊ฐ๋ฐ์ ํค ๋งํฌ๋ฅผ ๋ณผ ์ ์๋ค๋ฉด ํด๋น ์ฌ์ฉ์ ๊ณ์ ์ ๋ํด ์ด ๊ถํ์ด ํ์ฑํ๋์ง ์์ ๊ฒ์ ๋๋ค.
โน๏ธ
๊ณ ๋์ด ์์๋๋ค!
์๋ ํ์ธ์! ๋น์ทํ ํ๋ก๊ทธ๋จ์ ๊ตฌ์์ค์ธ๋ฐ ์ฒ์์ผ๋ก ํ๊ธ๋ก ์ ๋ฆฌ๋ ๊ธ์ ์ฐพ์๋ค์!
'๋ฏ์ด๋ณด๋ฉฐ ์ ๋ฆฌํ ์๋ฃ (๋งํฌ๋ค์ด)' ํด๋น ๋งํฌ๊ฐ ์ ์์ ์ผ๋ก ์๋ํ์ง ์์์ ํน์ ์๋ฃ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ์๋ค๋ฉด ๋ถํ๋๋ ค๋ ๋ ๊น์?