HeQihan

HeQihan

學生信息系統 (StudentInfoSystem)介紹

之前寫了爬取教務系統的代碼,前端不想動了,放在 GitHub 上誰需要就拿吧。寫得非常爛,多包涵,畢竟寒假才開始學😂。

項目概述#

學生信息系統是一個基於微服務架構的應用程序,旨在提供學生信息管理的完整解決方案。系統通過爬蟲技術從學校教務系統獲取數據,並提供統一的 API 接口供前端或其他系統調用。

本系統採用分佈式微服務架構,每個服務負責特定的功能域,通過 API 網關統一對外提供服務。系統使用 JWT 進行身份驗證和授權,確保數據安全和用戶隱私。

系統架構#

系統由以下六個主要微服務組成:

1. 認證服務 (AuthService)#

負責用戶認證和授權管理,是系統安全的核心組件。

主要功能:

  • 用戶登錄驗證

  • JWT 令牌生成與管理

  • 令牌驗證與刷新

  • 瀏覽器自動化登錄實現

核心組件:

  • LoginService: 處理用戶登錄請求,生成 JWT 令牌

  • BrowserManager: 管理 Playwright 瀏覽器實例,實現自動化登錄

2. 公共庫 (Common)#

包含所有服務共享的組件,確保代碼重用和一致性。

主要內容:

  • 數據模型 (Models):定義系統中使用的數據結構

  • 中間件 (Middleware):如 API 安全中間件

  • 過濾器 (Filters):如年份限制過濾器

  • 通用服務 (Services):如登錄服務、解析服務等

  • 工具類:提供通用功能

核心組件:

  • AuthModels: 定義認證相關的數據模型

  • StudentInfoParser: 解析學生信息 HTML

  • GradeParser: 解析成績信息 HTML

  • ScheduleParserService: 解析課表信息 HTML

3. API 網關 (Gateway)#

作為系統的統一入口,負責請求路由和負載均衡。

主要功能:

  • 請求路由:將請求轉發到相應的微服務

  • API 聚合:組合多個服務的結果

  • 跨域資源共享 (CORS):處理前端跨域請求

  • 請求限流:防止服務過載

技術實現:

  • 使用 YARP 作為反向代理

  • 集成 JWT 認證

  • 配置化路由規則

4. 成績服務 (GradeService)#

負責獲取和管理學生成績信息。

主要功能:

  • 查詢學生歷史成績

  • 成績統計與分析

  • 成績數據爬取與解析

核心組件:

  • GradeService: 處理成績查詢請求

  • GradeParser: 解析成績 HTML 數據

5. 課表服務 (ScheduleService)#

負責獲取和管理學生課表信息。

主要功能:

  • 查詢當前學期課表

  • 按學年學期查詢歷史課表

  • 課表數據爬取與解析

  • 課表格式化輸出

核心組件:

  • CourseScheduleService: 處理課表查詢請求

  • ScheduleParserService: 解析課表 HTML 數據

6. 學生信息服務 (StudentService)#

負責獲取和管理學生基本信息。

主要功能:

  • 學籍信息查詢

  • 個人信息查詢

  • 聯繫方式查詢

  • 學生信息爬取與解析

核心組件:

  • StudentInfoService: 處理學生信息查詢請求

  • StudentInfoCrawlerService: 爬取學生信息

  • StudentInfoParser: 解析學生信息 HTML 數據

技術棧#

  • 後端框架: ASP.NET Core 8.0

  • 認證授權: JWT (JSON Web Token)

  • API 文檔: Swagger

  • 瀏覽器自動化: Microsoft Playwright

  • HTML 解析: HtmlAgilityPack

  • API 網關: YARP

  • 日誌記錄: 內置.NET 日誌系統

  • 依賴注入: 內置.NET DI 容器

  • HTTP 客戶端: HttpClient

系統工作流程#

  1. 用戶認證流程:

   - 用戶通過 Gateway 發送登錄請求到 AuthService

   - AuthService 使用 Playwright 模擬瀏覽器登錄教務系統

   - 驗證成功後生成 JWT 令牌返回給用戶

   - 用戶後續請求攜帶 JWT 令牌訪問其他服務

  1. 數據獲取流程:

   - 用戶攜帶 JWT 令牌請求特定服務 (成績 / 課表 / 學生信息)

   - 服務驗證令牌有效性

   - 服務使用 Playwright 爬蟲從教務系統獲取數據

   - 使用專用解析器解析 HTML 數據

   - 將解析後的數據返回給用戶

  1. 服務間通信:

   - 服務之間通過 HTTP API 進行通信

   - 共享數據模型確保數據一致性

   - 使用依賴注入管理服務依賴

環境要求#

  • .NET SDK: 8.0

  • 操作系統: Windows/macOS/Linux (支持.NET 8.0 的任何系統)

  • 內存: 至少 2GB RAM (推薦 4GB 以上)

  • 存儲: 至少 1GB 可用空間

  • 網絡: 穩定的互聯網連接

安裝與配置#

前提條件#

  1. 安裝.NET 8.0 SDK

   # 檢查是否已安裝

   dotnet --version

  1. 安裝 Playwright

    dotnet tool install --global Microsoft.Playwright.CLI

    playwright install

  1. 克隆倉庫

    git clone https://github.com/ExXTong/StudentInfoSystem

    cd StudentInfoSystem

配置服務#

每個服務都有自己的 appsettings.json 配置文件,需要根據實際環境進行配置:

JWT 配置


    {

      "Jwt": {

        "Secret": "your_secret_key",

        "Expiration": "12:00:00"

      }

    }

構建與運行#

構建項目#


dotnet restore

dotnet build

運行服務#

需要按照依賴順序啟動各個服務,當然需要開多個終端:

  1. 啟動認證服務


cd StudentInfoSystem.AuthService

dotnet run

  1. 啟動學生信息服務

cd StudentInfoSystem.StudentService

dotnet run

  1. 啟動成績服務

cd StudentInfoSystem.GradeService

dotnet run

  1. 啟動課表服務

cd StudentInfoSystem.ScheduleService

dotnet run

  1. 啟動 API 網關

cd StudentInfoSystem.Gateway

dotnet run

API 文檔#

服務啟動後,可以通過以下 URL 訪問各服務的 Swagger 文檔:

記得使用 https 以及關閉不必要的端口。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。