Lightweight tool for querying Online Judge statistics across multiple platforms
Project description
OJHunt Lite
A lightweight async Python tool for querying Online Judge (OJ) statistics across multiple platforms. Track your accepted problems and total submissions from competitive programming sites.
- Async/concurrent requests via
aiohttp - CLI and web interface
- Self-contained crawlers — each file can be used independently
- Only depends on
aiohttpandselectolax - BSD-2 Licensed
Quick Example
$ uv run ojhunt.py tourist@codeforces tourist@atcoder
Querying CodeForces...
Querying AtCoder...
AtCoder done (1051 solved, 1.25s)
CodeForces done (2962 solved, 2.78s)
Total: 2962 solved / 6437 submissions
================================================================================
Crawler Username Solved Submissions Status
================================================================================
CodeForces tourist 2962 5386 OK (2.78s)
AtCoder tourist 1051 1051 OK (1.25s)
================================================================================
Completed: 2 OK, 0 failed (2.78s total)
Installation
git clone https://github.com/Liu233w/ojhunt-lite
cd ojhunt-lite
uv sync
Container images are available at ghcr.io/liu233w/ojhunt-lite — see docs/web.md.
Usage
CLI
uv run ojhunt.py tourist@codeforces tourist@atcoder
uv run ojhunt.py -d tourist -- codeforces atcoder # default username
uv run ojhunt.py --list # list available crawlers
Full CLI reference, login-required crawlers, and JSON output: docs/cli.md
Web Interface
uv run fastapi dev web/app.py --port 8080
Web UI, API docs, and container setup: docs/web.md
Use Crawlers in Your Code
import asyncio, aiohttp
from crawlers.codeforces import query
async def main():
async with aiohttp.ClientSession() as session:
result = await query(session, "tourist")
print(result["solved"], result["submissions"], result["solved_list"])
asyncio.run(main())
Supported Platforms
See the crawlers/ directory. Archived crawlers (dead sites) are in archived_crawlers/.
Development
Adding crawlers, running tests, templates: docs/development.md
License
BSD 2-Clause License — see individual crawler files for full license text.
Credits
Lightweight Python rewrite of OJHunt (acm-statistics), originally inspired by 西北工业大学ACM查询系统 by Jiduo Zhang.
Special thanks to test account providers: @leoloveacm, @2013300262
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ojhunt-2026.3.29.141643.tar.gz.
File metadata
- Download URL: ojhunt-2026.3.29.141643.tar.gz
- Upload date:
- Size: 396.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
11e898a8a30cd98f2de1349a887ad97cbd58e345760d7e0bc330bcd02177f6c8
|
|
| MD5 |
1ebdba1a6baefe11dfa7d47e9bd0b601
|
|
| BLAKE2b-256 |
b71823102b153a9c03231b86c6fe5b1d00aac943baec2f837a6f8486a119a56e
|
Provenance
The following attestation bundles were made for ojhunt-2026.3.29.141643.tar.gz:
Publisher:
release.yml on Liu233w/ojhunt-lite
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ojhunt-2026.3.29.141643.tar.gz -
Subject digest:
11e898a8a30cd98f2de1349a887ad97cbd58e345760d7e0bc330bcd02177f6c8 - Sigstore transparency entry: 1193413219
- Sigstore integration time:
-
Permalink:
Liu233w/ojhunt-lite@b4037a5344f7ec00a4f38964ffce633e03a5e6b3 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Liu233w
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b4037a5344f7ec00a4f38964ffce633e03a5e6b3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ojhunt-2026.3.29.141643-py3-none-any.whl.
File metadata
- Download URL: ojhunt-2026.3.29.141643-py3-none-any.whl
- Upload date:
- Size: 291.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
39492bc26421786d365d6a97c504ec474ba1bf7562c7d130995203d396a2a130
|
|
| MD5 |
a6c59ad924fefee9812b045b4674d5e9
|
|
| BLAKE2b-256 |
91322ca68bcf5368f9e5c71830ede66a12fe42e421d74c19d265dde0a60cf51c
|
Provenance
The following attestation bundles were made for ojhunt-2026.3.29.141643-py3-none-any.whl:
Publisher:
release.yml on Liu233w/ojhunt-lite
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ojhunt-2026.3.29.141643-py3-none-any.whl -
Subject digest:
39492bc26421786d365d6a97c504ec474ba1bf7562c7d130995203d396a2a130 - Sigstore transparency entry: 1193413223
- Sigstore integration time:
-
Permalink:
Liu233w/ojhunt-lite@b4037a5344f7ec00a4f38964ffce633e03a5e6b3 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Liu233w
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b4037a5344f7ec00a4f38964ffce633e03a5e6b3 -
Trigger Event:
push
-
Statement type: