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
- BSD-2 Licensed
CLI
pipx install ojhunt # or: uv tool install ojhunt / pip install ojhunt
ojhunt tourist@codeforces
From a clone:
git clone https://github.com/Liu233w/ojhunt-lite && cd ojhunt-lite
uv run ojhunt tourist@codeforces
Or without a Python install, via container:
docker run --rm ghcr.io/liu233w/ojhunt-lite tourist@codeforces
Example output:
$ ojhunt 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)
Full CLI reference, login-required crawlers, and JSON output: docs/cli.md
Web Interface
The web interface is designed to be self-hosted. Clone the repo and deploy:
git clone https://github.com/Liu233w/ojhunt-lite
cd ojhunt-lite
uv sync
uv run fastapi run src/ojhunt/web/app.py --port 8080
Container images are available at ghcr.io/liu233w/ojhunt-lite — see docs/web.md.
Use Crawlers in Your Code
Add ojhunt as a project dependency:
uv add ojhunt
# or: pip install ojhunt
from ojhunt.crawlers import crawlers
result = crawlers.codeforces.query_sync("tourist")
print(result.solved, result.submissions, result.solved_list)
Async use, login-required crawlers, copying a single crawler file into your own
project, and every crawler's arguments: docs/library.md — or
help(ojhunt.crawlers) and help(crawlers.cses) from a Python prompt.
Supported Platforms
See the src/ojhunt/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查询系统 (npuacm.info) by Jiduo Zhang.
Special thanks to test account providers: @leoloveacm, @2013300262
Contributors ✨
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!
Metadata
Release files for ojhunt 2026.10.4.161431
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ojhunt-2026.10.4.161431.tar.gz | 3.7 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ojhunt-2026.10.4.161431-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 5.4 MB
Release files / ojhunt-2026.10.4.161431.tar.gz
| Download URL | ojhunt-2026.10.4.161431.tar.gz |
|---|---|
| Size | 3.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d7232de9967ea365e291af35906a09810e91d585fb98acdae575082d9efb2ee6
|
|
BLAKE2b-256 checksum How to use checksums |
bb3d7fe3b4f9691f3c3874022758ba0e358a93d71c230883f9ce958c276543a8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.
Transparency logRelease files / ojhunt-2026.10.4.161431-py3-none-any.whl
| Download URL | ojhunt-2026.10.4.161431-py3-none-any.whl |
|---|---|
| Size | 1.7 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
279f692d9514e6afbf97f63926ec67e7b779fc78d8912eca729adefb22b46ac3
|
|
BLAKE2b-256 checksum How to use checksums |
900fb71fe55236d109ceebfd311b357e8b2e2549d142b98195d1f49720c308f0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.
Transparency log