HeQihan

HeQihan

学生情報システム (StudentInfoSystem)の紹介

以前、教務システムをクローリングするコードを書きましたが、フロントエンドは触りたくないので、GitHub に置いておきます。必要な方はどうぞ。非常に雑に書いたので、ご了承ください。冬休みから学び始めたばかりです😂。

プロジェクト概要#

学生情報システムは、学生情報管理の完全なソリューションを提供することを目的としたマイクロサービスアーキテクチャに基づくアプリケーションです。システムはクローラー技術を使用して学校の教務システムからデータを取得し、フロントエンドや他のシステムが呼び出すための統一された API インターフェースを提供します。

本システムは分散型マイクロサービスアーキテクチャを採用しており、各サービスは特定の機能領域を担当し、API ゲートウェイを通じて外部にサービスを提供します。システムは JWT を使用して認証と承認を行い、データの安全性とユーザーのプライバシーを確保します。

システムアーキテクチャ#

システムは以下の 6 つの主要なマイクロサービスで構成されています:

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 を使用し、不要なポートを閉じることを忘れないでください。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。