Skip to main content

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):


==🔗
🐛

Adelard Collins🔗
🐛

BackSlashDelta🔗
🐛

Bodhisatan_Yao🔗
🐛

Claude🔗
💻 🚇 ⚠️

Geekxiong🔗
🤔

Halorv🔗
🤔

Kido Zhang🔗
🚇 🤔

Liu233w🔗
💻 🤔 🚇 ⚠️

Meulsama🔗
🤔

Michael Xiang🔗
🐛

Zhao🔗
🐛

bLue🔗
💻

bluebear4🔗
🐛

ct🔗
🐛

flylai🔗
💻 🐛

fzu-h4cky🔗
🐛

wwawwaww🔗
🐛

zby🔗
🤔 🐛

This project follows the all-contributors specification. Contributions of any kind welcome!

Metadata

Release files for ojhunt 2026.10.4.161358

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ojhunt 2026.10.4.161358
File Size Uploaded
ojhunt-2026.10.4.161358.tar.gz 3.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for ojhunt 2026.10.4.161358
File Interpreter ABI Platform
ojhunt-2026.10.4.161358-py3-none-any.whl Python 3 none any Details

Total release size: 5.4 MB

Release files / ojhunt-2026.10.4.161358.tar.gz

Download URL ojhunt-2026.10.4.161358.tar.gz
Size 3.7 MB
Tags Source
SHA-256 checksum
How to use checksums
bf737b10d5375515fbb33597fc939293374e1a603fa1fba54f649463246f99e7
BLAKE2b-256 checksum
How to use checksums
93441e4632a8a44f9204e26cae28a3d25664a5b43ac19d09c8342e009918cb27
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

Release files / ojhunt-2026.10.4.161358-py3-none-any.whl

Download URL ojhunt-2026.10.4.161358-py3-none-any.whl
Size 1.7 MB
Tags Python 3
SHA-256 checksum
How to use checksums
045b0326a69af72d482a0751e0e7d276961c79e62c5734b8433c91969f4ff239
BLAKE2b-256 checksum
How to use checksums
36c55c30326ac27b309a14e14abce169ce32874ef8764543b2f9e56f15fd18cf
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

Release history Release notifications | RSS feed

This release

2026.10.4.161358 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page