Categorygithub.com/pandakn/go-sut-course-api
modulepackage
0.0.0-20240914092944-d314ab3ef6c6
Repository: https://github.com/pandakn/go-sut-course-api.git
Documentation: pkg.go.dev

# README

SUT COURSE API (Go version) 📚

This project scrapes course data from Suranaree Uni of Tech's Reg. Typescript ver.

Getting started 🚀

Clone this repository

git clone https://github.com/pandakn/go-sut-course-api.git

cd go-sut-course-api

Start Project

go run main.go

API Reference

Get Courses

  POST /api/v1/courses
KeyTypeDescriptionExample
acadYearstringAcademic year (e.g. 2565)"2565"
semesterintSemester (e.g. 3)3
courseCodestringCourse code pattern (e.g. "ist30 1105")"ist30 1105"
courseNamestringCourse name pattern (e.g. "english*")"english*"
maxRowintMax rows in response (default is 50)25
isFilter (optional)boolFilter by day and times (true) or no filter (false)true or false
day (optional)stringWeekdays for filtering courses (e.g. "monday") (e.g. "monday"). Use the format "sunday", "monday", ..., "saturday". Required if isFilter is true."monday"
timeFrom (optional)stringStarting time for filtering courses (e.g. "08:00")"08:00"
timeTo (optional)stringEnding time for filtering courses (e.g. "12:00")"12:00"
faculty (optional)stringFaculty to filter the courses. Use the following values: "ALL", "SCIENCE", "SOCIAL_TECHNOLOGY", "AGRICULTURAL_TECHNOLOGY", "MEDICINE", "ENGINEERING", "NURSING", "DENTISTRY", "PUBLIC_HEALTH", "DIGITAL_ARTS_AND_SCIENCE". Default is ALL"SCIENCE"

Note : Time range : 08:00 - 22:00

Note : Either one of courseCode or courseName can be entered.

Warning : If courseCode and courseName are not specified, scraping all the data will take a very long time.

Examples

Retrieve Course Data with No Filtering

use the following example:

// body request
{
  "acadYear": "2566",
  "semester": 2,
  "courseCode": "523332",
  "courseName": "",
  "maxRow": 50
}

Retrieve Course Data with Filtering

// body request
{
  "acadYear": "2566",
  "semester": 2,
  "courseCode": "523332",
  "courseName": "",
  "maxRow": 50,
  "isFilter": true,
  "day": "monday",
  "timeFrom": "10:00",
  "timeTo": "12:00"
}

Usage/Examples JSON

{
  "year": "2/2566",
  "faculty": "ALL",
  "courses": [
    {
      "courseCode": "523332",
      "version": "2",
      "courseName": {
        "en": "SOFTWARE ENGINEERING",
        "th": "āļ§āļīāļĻāļ§āļāļĢāļĢāļĄāļ‹āļ­āļŸāļ•āđŒāđāļ§āļĢāđŒ"
      },
      "credit": "4 (3-3-9)",
      "degree": "āļ›āļĢāļīāļāļāļēāļ•āļĢāļĩ",
      "department": "āļ§āļīāļĻāļ§āļāļĢāļĢāļĄāļ„āļ­āļĄāļžāļīāļ§āđ€āļ•āļ­āļĢāđŒ",
      "faculty": "āļŠāļģāļ™āļąāļāļ§āļīāļŠāļēāļ§āļīāļĻāļ§āļāļĢāļĢāļĄāļĻāļēāļŠāļ•āļĢāđŒ",
      "courseStatus": "āđƒāļŠāđ‰āļ‡āļēāļ™",
      "courseCondition": ["523331"],
      "continueCourse": ["523435"],
      "equivalentCourse": null,
      "sectionsCount": 2,
      "sections": [
        {
          "id": "0baeef8b-98f8-4fdf-a16a-ef8a0c922d66",
          "url": "http://reg.sut.ac.th/registrar/class_info_2.asp?backto=home&option=0&courseid=1009172&coursecode=523332&acadyear=2566&semester=2&avs882850039=3",
          "section": "1",
          "status": "āđ€āļ›āļīāļ”āļĨāļ‡āļ›āļāļ•āļī āļŠāļēāļĄāļēāļĢāļ–āļĨāļ‡āļ—āļ°āđ€āļšāļĩāļĒāļ™āļœāđˆāļēāļ™ WEB āđ„āļ”āđ‰",
          "note": "āļŠāļģāļŦāļĢāļąāļšāļŦāļĨāļąāļāļŠāļđāļ•āļĢāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡ āļž.āļĻ. 2560",
          "professors": [
            "āļ­āļēāļˆāļēāļĢāļĒāđŒ āļ”āļĢ.āļ„āļĄāļĻāļąāļĨāļĨāđŒ āļĻāļĢāļĩāļ§āļīāļŠāļļāļ—āļ˜āļīāđŒ",
            "āļ™āļēāļĒāļ˜āļ™āļžāļĨ āļ„āļ‡āđ€āļˆāļĢāļīāļāļŠāļļāļ‚",
            "āļ™āļēāļĒāļŠāļīāļ—āļ˜āļīāļŠāļąāļĒ āļŠāļīāļĢāļīāļĪāļ—āļ˜āļīāļāļļāļĨāļŠāļąāļĒ",
            "āļ™āļēāļĒāļ•āļ°āļ§āļąāļ™ āļ„āļģāļ­āļēāļˆ"
          ],
          "language": "TH",
          "seat": {
            "totalSeat": "45",
            "registered": "45",
            "remain": "0"
          },
          "classSchedule": [
            {
              "day": "Tu",
              "times": "09:00-12:00",
              "room": "B1139"
            },
            {
              "day": "Th",
              "times": "09:00-12:00",
              "room": "F11-422.Software"
            }
          ],
          "exams": {
            "midterm": {
              "date": "25",
              "month": "Dec",
              "times": "12:00-14:00",
              "year": "2566",
              "room": "āļ­āļēāļ„āļēāļĢBāļŦāđ‰āļ­āļ‡B1115(āļŠāļ­āļšāļ•āļēāļĄāļ•āļēāļĢāļēāļ‡āļĄāļŦāļēāļ§āļīāļ—āļĒāļēāļĨāļąāļĒ)25āļ˜.āļ„.2566"
            },
            "final": {
              "date": "14",
              "month": "Feb",
              "times": "13:00-16:00",
              "year": "2567",
              "room": "āļ­āļēāļ„āļēāļĢBāļŦāđ‰āļ­āļ‡N(āļŠāļ­āļšāļ•āļēāļĄāļ•āļēāļĢāļēāļ‡āļĄāļŦāļēāļ§āļīāļ—āļĒāļēāļĨāļąāļĒ)14āļ.āļž.2567"
            }
          }
        },
        {
          "id": "f8eedbc6-7c1b-4e3e-9015-348c4657802d",
          "url": "http://reg.sut.ac.th/registrar/class_info_2.asp?backto=home&option=0&courseid=1009172&coursecode=523332&acadyear=2566&semester=2&avs882850039=4",
          "section": "2",
          "status": "āđ€āļ›āļīāļ”āļĨāļ‡āļ›āļāļ•āļī āļŠāļēāļĄāļēāļĢāļ–āļĨāļ‡āļ—āļ°āđ€āļšāļĩāļĒāļ™āļœāđˆāļēāļ™ WEB āđ„āļ”āđ‰",
          "note": "āļŠāļģāļŦāļĢāļąāļšāļŦāļĨāļąāļāļŠāļđāļ•āļĢāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡ āļž.āļĻ. 2560",
          "professors": [
            "āļ­āļēāļˆāļēāļĢāļĒāđŒ āļ”āļĢ.āļ„āļĄāļĻāļąāļĨāļĨāđŒ āļĻāļĢāļĩāļ§āļīāļŠāļļāļ—āļ˜āļīāđŒ",
            "āļ™āļēāļĒāļ˜āļ™āļžāļĨ āļ„āļ‡āđ€āļˆāļĢāļīāļāļŠāļļāļ‚",
            "āļ™āļēāļĒāļŠāļīāļ—āļ˜āļīāļŠāļąāļĒ āļŠāļīāļĢāļīāļĪāļ—āļ˜āļīāļāļļāļĨāļŠāļąāļĒ",
            "āļ™āļēāļĒāļ•āļ°āļ§āļąāļ™ āļ„āļģāļ­āļēāļˆ"
          ],
          "language": "TH",
          "seat": {
            "totalSeat": "40",
            "registered": "38",
            "remain": "2"
          },
          "classSchedule": [
            {
              "day": "Tu",
              "times": "09:00-12:00",
              "room": "B1139"
            },
            {
              "day": "Th",
              "times": "13:00-16:00",
              "room": "F11-422.Software"
            }
          ],
          "exams": {
            "midterm": {
              "date": "25",
              "month": "Dec",
              "times": "12:00-14:00",
              "year": "2566",
              "room": "āļ­āļēāļ„āļēāļĢBāļŦāđ‰āļ­āļ‡B1115(āļŠāļ­āļšāļ•āļēāļĄāļ•āļēāļĢāļēāļ‡āļĄāļŦāļēāļ§āļīāļ—āļĒāļēāļĨāļąāļĒ)25āļ˜.āļ„.2566"
            },
            "final": {
              "date": "14",
              "month": "Feb",
              "times": "13:00-16:00",
              "year": "2567",
              "room": "āļ­āļēāļ„āļēāļĢBāļŦāđ‰āļ­āļ‡N(āļŠāļ­āļšāļ•āļēāļĄāļ•āļēāļĢāļēāļ‡āļĄāļŦāļēāļ§āļīāļ—āļĒāļēāļĨāļąāļĒ)14āļ.āļž.2567"
            }
          }
        }
      ]
    }
  ]
}

Tech Stack

Go Fiber, Colly, Cache

# Packages

No description provided by the author