以前、教務システムをクローリングするコードを書きましたが、フロントエンドは触りたくないので、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
システムの作業フロー#
- ユーザー認証フロー:
- ユーザーは Gateway を通じて AuthService にログインリクエストを送信
- AuthService は Playwright を使用してブラウザで教務システムにログインをシミュレート
- 検証が成功した後、JWT トークンを生成してユーザーに返却
- ユーザーは以降のリクエストで JWT トークンを持って他のサービスにアクセス
- データ取得フロー:
- ユーザーは JWT トークンを持って特定のサービス(成績 / 時間割 / 学生情報)にリクエスト
- サービスはトークンの有効性を検証
- サービスは Playwright クローラーを使用して教務システムからデータを取得
- 専用のパーサーを使用して HTML データを解析
- 解析されたデータをユーザーに返却
- サービス間通信:
- サービス間は HTTP API を通じて通信
- 共有データモデルがデータの一貫性を確保
- 依存性注入を使用してサービスの依存関係を管理
環境要件#
-
.NET SDK: 8.0
-
オペレーティングシステム: Windows/macOS/Linux(.NET 8.0 をサポートする任意のシステム)
-
メモリ: 最低 2GB RAM(推奨 4GB 以上)
-
ストレージ: 最低 1GB の空きスペース
-
ネットワーク: 安定したインターネット接続
インストールと設定#
前提条件#
- .NET 8.0 SDK をインストール
# インストールされているか確認
dotnet --version
- Playwright をインストール
dotnet tool install --global Microsoft.Playwright.CLI
playwright install
- リポジトリをクローン
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
サービスを実行#
依存関係の順序に従って各サービスを起動する必要があり、複数のターミナルを開く必要があります:
- 認証サービスを起動
cd StudentInfoSystem.AuthService
dotnet run
- 学生情報サービスを起動
cd StudentInfoSystem.StudentService
dotnet run
- 成績サービスを起動
cd StudentInfoSystem.GradeService
dotnet run
- 時間割サービスを起動
cd StudentInfoSystem.ScheduleService
dotnet run
- API ゲートウェイを起動
cd StudentInfoSystem.Gateway
dotnet run
API ドキュメント#
サービスが起動した後、以下の URL を通じて各サービスの Swagger ドキュメントにアクセスできます:
-
認証サービス: http://localhost:5001/swagger
-
学生情報サービス: http://localhost:5002/swagger
-
成績サービス: http://localhost:5003/swagger
-
時間割サービス: http://localhost:5004/swagger
-
API ゲートウェイ: http://localhost:5000/swagger
https を使用し、不要なポートを閉じることを忘れないでください。