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

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

Built distribution (wheel)

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

Total release size: 5.4 MB

Release files / ojhunt-2026.10.11.162116.tar.gz

Download URL ojhunt-2026.10.11.162116.tar.gz
Size 3.7 MB
Tags Source
SHA-256 checksum
How to use checksums
e2e018940a8c306d7b5155aa4e30041a4ae117cf78661a06649cfe8fccd80f59
BLAKE2b-256 checksum
How to use checksums
96114bf41209f5b9e3012e86bf80f94c013854845473ecdf0a83c6e19bbcc386
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 11, 2026.

Transparency log

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

Download URL ojhunt-2026.10.11.162116-py3-none-any.whl
Size 1.7 MB
Tags Python 3
SHA-256 checksum
How to use checksums
0c2a5ba322450f1755af5b585cb6148df015bc64397d2154ab94cdecba6548ce
BLAKE2b-256 checksum
How to use checksums
5c7b3104cdecdfb1b24c8125dcf2e9ce6c900b84a0230a21612cbd578aa086ef
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 11, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2026.10.11.162116 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