Skip to main content

The Python TJU client — scrapes TJU SSO + EAMS for structured academic data

Project description

TJU The Python TJU client

PyPI version CI Docs License: GPL v3

English | 简体中文

Beta. The API is functional; minor breaking changes may occur before v1.0.

tju is a Python library that logs into Tianjin University's SSO and EAMS systems and returns structured academic data. It handles CAS authentication, CAPTCHA solving (via ddddocr), and HTML parsing — so your code just calls methods and gets typed objects back.

Network requirement: All live API calls require an active connection to the TJU campus network or VPN (sso.tju.edu.cn / classes.tju.edu.cn).

Features

Feature Client method
Student profile client.profile
Personal timetable client.schedule(semester)
Public course library client.query_courses(semester)
Course detail client.query_course_info(lession_id)
Course syllabus client.query_syllabus(lession_id)
Exam schedule client.exam(semester)
Scores (UG + GS) client.score()
Experiment scores client.exp_score(semester)
Free classroom search client.free_classrooms(date_begin, ...)

Installation

pip install tju

For the interactive terminal app (TUI):

pip install 'tju[tui]'

For the local MCP server (AI agent integration):

pip install 'tju[mcp]'

From source (recommended for development):

git clone https://github.com/tjuse/tju-python.git
cd tju-python
uv sync       # installs all dependencies into .venv

Quick start

Interactive TUI

tju          # launches the full-screen terminal app

Enter your student ID and password on first launch. Credentials are saved securely (username in ~/.config/tju/config.toml, password in the OS keyring).

MCP server (AI agent integration)

tju-mcp setup   # store credentials in the OS keyring once
tju-mcp         # start the stdio MCP server

Add to Claude Desktop:

{ "mcpServers": { "tju": { "command": "tju-mcp" } } }

Your password is never exposed to the agent. The server reads credentials from the OS keyring and acts as the confidentiality boundary — no tool accepts or returns a password, and profile PII is masked by default.

Python API

Set your credentials as environment variables (or put them in a .env file):

export TJU_USER=your_student_id
export TJU_PASS=your_password
from tju.client import create_client

client = create_client()   # reads TJU_USER / TJU_PASS from env
print(client.profile)
print(client.schedule(semester="24251"))

Runnable examples:

# Personal timetable — prints your courses and saves JSON
uv run --env-file .env python examples/fetch_schedule.py

# Full course library (UG + GS) — crawls all pages and saves JSON
uv run --env-file .env python examples/fetch_all_courses.py

Both scripts write output to examples/output/ (gitignored).

Usage

from tju import Session
from tju.client import Client

session = Session()                              # or: Session(username=..., password=...)
client  = Client(session=session)

# Identity
client.stu_id        # student ID string
client.stu_name      # name string
client.stu_type      # StuType.UNDERGRADUATE | StuType.GRADUATE
client.has_minor     # bool
client.semester      # current semester code, e.g. "24252"

# Data
client.profile
client.schedule(semester="24251")
client.query_courses(semester="24251")
client.query_course_info(lession_id="387248")
client.query_syllabus(lession_id="387248")
client.exam(semester="24251")
client.score()
client.exp_score(semester="20211")
client.free_classrooms(date_begin="2025-10-08", campus_id=3)

Semester codes follow the EAMS convention, e.g. "24251" = 2024–2025 first term, "24252" = 2024–2025 second term. See src/tju/consts.py for the full SEMESTER map.

Development

uv sync          # install runtime + dev dependencies
uv run pytest    # run the offline test suite (70 tests, no network required)

See CONTRIBUTING.md for architecture details and the fixture privacy rule. See AGENTS.md for AI-agent contributor guidance.

Documentation

Full API reference and usage guides: https://python.tjuse.com/

To build the docs locally:

uv sync --group docs
uv run mkdocs serve

License

GPLv3 License © 2023-PRESENT Super Lee

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tju-0.2.0.tar.gz (262.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tju-0.2.0-py3-none-any.whl (68.2 kB view details)

Uploaded Python 3

File details

Details for the file tju-0.2.0.tar.gz.

File metadata

  • Download URL: tju-0.2.0.tar.gz
  • Upload date:
  • Size: 262.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tju-0.2.0.tar.gz
Algorithm Hash digest
SHA256 e52e7693bca8a8f291d83f7988929f28f1af955b4794845251a90499a4d41f3a
MD5 ef6523e78faa88adedb136d32e1a7945
BLAKE2b-256 8bb854e0914dc2fad513dd21aa10d699b648e883ccc4c7cc1d5ff4a452313ef4

See more details on using hashes here.

Provenance

The following attestation bundles were made for tju-0.2.0.tar.gz:

Publisher: publish.yml on tjuse/tju-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tju-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: tju-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 68.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tju-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6661a9d4f08c7bd282ff69ba2e1f1aa7ab198248d6d3ed95a0e15ba9ff0c9034
MD5 76ff5f9fd833d1dbdda6c5b6e8abb49c
BLAKE2b-256 0e43758a24969311b223674755bc3d5a1bd29e115de3421b9417a236f9e407a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for tju-0.2.0-py3-none-any.whl:

Publisher: publish.yml on tjuse/tju-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page