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.161431

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.161431
File Size Uploaded
ojhunt-2026.10.4.161431.tar.gz 3.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for ojhunt 2026.10.4.161431
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

2026.10.4.161431 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