---
tags: UniCourse, Overview
---
# UniCourse 課程匯入指南
:::info
發現貴校課程沒有收錄在 UniCourse 裡面嗎?
歡迎透過 course-packer@unicourse.tw 聯絡我們
或是加入 Discord Server 參與討論(連結於目錄)
:::
> [ToC]
## Overview
首先,請讓我代表 UniCourse 團隊致上謝意。
UniCourse 是一個以學生為核心的開源平台,我們需要社群夥伴的幫助以完善課程資料,而你的任何貢獻都將使 UniCourse 社群變得越來越好。
:::info
在開始之前,請你先完成以下要求:
1. 加入 [UniCourse 的 Discord 伺服器](https://discord.gg/9avZ4rrTWZ)
2. 安裝好 [UniCourse CLI](https://github.com/UniCourse-TW/Backend/tree/main/packages/cli#readme)
3. 稍微理解 [JSON 的格式](https://developer.mozilla.org/zh-TW/docs/Learn/JavaScript/Objects/JSON)
4. 擁有具權限的 UniCourse 帳號(請在 Discord 上聯絡我們)
<details>
<summary>如何安裝 UniCourse CLI?</summary>
你可以透過以下指令安裝 `pnpm` 以及 `unicourse`:
**macOS & Linux**
```bash
curl -fsSL https://get.pnpm.io/install.sh | sh -
pnpm i -g @unicourse-tw/cli
```
**Windows**
```powershell
iwr https://get.pnpm.io/install.ps1 -useb | iex
pnpm i -g @unicourse-tw/cli
```
[你可能想知道:安裝 pnpm 的詳細資訊](https://pnpm.io/installation)
</details>
:::
## Course Pack 是什麼?
Course Pack 是具有特定格式的 JSON 檔案,作為表示「課程」、「教師」、「學程」、「提供者」與它們之間關係的序列化數據。
:::spoiler 範例
```json
{
"$schema": "https://esm.sh/course-pack/schema.json",
"teachers": [
{
"id": "teacher-1",
"name": "Mr. Jacob"
},
{
"id": "teacher-2",
"name": "Mr. Sky"
}
],
"programs": [
{
"id": "program-1",
"name": "Program No.1"
},
{
"id": "program-2",
"name": "Program No.2"
}
],
"entities": [
{
"name": "University of UniCourse",
"courses": [],
"children": [
{
"name": "College of Arts",
"courses": [
{
"id": "2022-winter-1234",
"name": "Introduction to Art",
"description": "This course is an introduction to art.",
"code": "AG1234",
"year": 2022,
"term": 2,
"type": "Compulsory",
"credit": 3,
"teachers": [
"teacher-2"
],
"programs": [
"program-1",
"program-2"
],
"prerequisites": []
},
{
"id": "2022-winter-5678",
"name": "Art and Artificial Intelligence",
"description": "Artificial intelligence is a hot topic in the world today. This course will introduce you to the basics of AI and how it is used in art.",
"code": "AG5678",
"year": 2022,
"term": 2,
"type": "Elective",
"credit": 3,
"teachers": [
"teacher-1"
],
"programs": [
"program-1"
],
"prerequisites": []
}
],
"children": [
{
"name": "Department of Western Art",
"courses": [
{
"id": "2022-winter-4321",
"name": "Basic Painting",
"description": "This course is an introduction to basic painting techniques.",
"code": "AW4321",
"year": 2022,
"term": 2,
"type": "Compulsory",
"credit": 3,
"teachers": [
"teacher-2"
],
"programs": [
"program-1",
"program-2"
]
}
],
"children": []
}
]
},
{
"name": "College of Science and Engineering",
"courses": [],
"children": [
{
"name": "Department of Computer Science",
"courses": [
{
"id": "2022-winter-9876",
"name": "Computer Programming",
"description": "This course introduces students to the basics of computer programming. We will use the C programming language to learn various concepts, including variables, functions, loops, and pointers.",
"code": "CS9876",
"year": 2022,
"term": 2,
"type": "Compulsory",
"credit": 3,
"teachers": [
"teacher-1"
],
"programs": [
"program-2"
]
}
],
"children": []
}
]
}
]
}
]
}
```
:::
稍微大的範例:[師大 108-1 ~ 111-1 的 Course Pack](https://github.com/JacobLinCool/NTNU-Course-Crawler/releases/tag/20221106)
Schema Spec: [JSON Schema](https://esm.sh/course-pack/schema.json)
## 怎麼將課程資料打包成 Course Pack?
任何程式語言都可以將課程資料打包成 Course Pack,只需產生的 JSON 符合格式即可。
我們建議你在直接使用物件的名稱作為 `id`(Course Pack 中的唯一識別符),以利匯入時與系統上已經存有的相同物件合併。
:::info
目前我們只允許單次匯入小於 **100 MB** 的檔案,如需匯入大量資料,建議一學期一個檔案,分批匯入,相同 `id` 的物件將於遠端自動合併(需指定 `scope`,詳見下章)。
:::
此外,適用於 JavaScript / TypeScript 的 [course-pack](https://www.npmjs.com/package/course-pack) package 提供相關類型的型別檢查。
你無需擔心匯入時格式錯誤,UniCourse CLI 會在匯入前檢查格式。
## 如何匯入 Course Pack 到 UniCourse 裡?
首先,你需要登入 UniCourse CLI:
```bash
unicourse login --server https://api.unicourse.tw <username>
```
UniCourse CLI 會提示你輸入你的密碼,再按下 Enter 登入。
接著便可匯入 Course Pack:
```bash
unicourse import --scope <entity-id> <filename>
```
如果檔案格式正確的話,等待幾分鐘便可完成上傳與匯入。