{"id":13604050,"url":"https://github.com/Liu233w/acm-statistics","last_synced_at":"2025-04-11T22:32:33.316Z","repository":{"id":30764369,"uuid":"125616473","full_name":"Liu233w/acm-statistics","owner":"Liu233w","description":"An online tool (crawler) to analyze users performance in online judges (coding competition websites). Supported OJ: POJ, HDU, HYSBZ, CodeForces, UVA, ICPC Live Archive, FZU, SPOJ, Timus (URAL), LeetCode_CN, CSU, LibreOJ, 洛谷, 牛客OJ, Lutece (UESTC), AtCoder, AIZU, CodeChef, El Judge, BNUOJ, Codewars, UOJ, NBUT, 51Nod, DMOJ, VJudge","archived":false,"fork":false,"pushed_at":"2024-10-15T23:07:07.000Z","size":82681,"stargazers_count":146,"open_issues_count":29,"forks_count":12,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-10-17T08:41:51.431Z","etag":null,"topics":["acm-icpc","codechef-api","codeforces-api","crawler","csharp","docker","javascript","nodejs","spoj-api","vue"],"latest_commit_sha":null,"homepage":"https://ojhunt.com","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Liu233w.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-03-17T09:58:45.000Z","updated_at":"2024-10-06T11:30:24.000Z","dependencies_parsed_at":"2023-02-18T09:15:53.154Z","dependency_job_id":"b2da9dd7-88c6-4e7b-b855-65f1d787acf2","html_url":"https://github.com/Liu233w/acm-statistics","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Liu233w%2Facm-statistics","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Liu233w%2Facm-statistics/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Liu233w%2Facm-statistics/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Liu233w%2Facm-statistics/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Liu233w","download_url":"https://codeload.github.com/Liu233w/acm-statistics/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248489868,"owners_count":21112652,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acm-icpc","codechef-api","codeforces-api","crawler","csharp","docker","javascript","nodejs","spoj-api","vue"],"created_at":"2024-08-01T19:00:38.914Z","updated_at":"2025-04-11T22:32:28.295Z","avatar_url":"https://github.com/Liu233w.png","language":"C#","funding_links":[],"categories":["C# #"],"sub_categories":[],"readme":"# This repo contains the source code of OJ Analyzer\n\n简体中文版：[README_zh-hans.md](./README_zh-hans.md)\n\n[![Powered by ZenHub](https://img.shields.io/badge/Powered_by-ZenHub-5e60ba.svg)](https://app.zenhub.com/workspace/o/liu233w/acm-statistics/boards?repos=125616473)\n[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=acm-statistics\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=acm-statistics)\n[![codecov](https://codecov.io/gh/Liu233w/acm-statistics/branch/master/graph/badge.svg)](https://codecov.io/gh/Liu233w/acm-statistics)\n[![Cypress.io](https://img.shields.io/badge/cypress.io-tests-green.svg)](https://dashboard.cypress.io/#/projects/4s32o7/runs)\n[![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://app.renovatebot.com/dashboard#github/Liu233w/acm-statistics)\n[![Mergify Status](https://img.shields.io/badge/Mergify-enabled-green.svg)](https://mergify.io)\n\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-16-orange.svg?style=flat-square)](#contributors-)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\n#### Build status\n\n![Unit Tests](https://github.com/Liu233w/acm-statistics/workflows/Unit%20Tests/badge.svg)\n![Test E2E](https://github.com/Liu233w/acm-statistics/workflows/Test%20E2E/badge.svg)\n\n#### Features\n\n- Querying ac/submissions of oj\n- Storing querying history\n\n#### Under development\n\n- Email support\n- Ranks\n- ……\n\n## Directory structure\n\n- frontend: The front end\n- crawler: Crawlers to query OJs. Being used by both frontend and backend\n- crawler-api-backend: A microservice that provides querying api\n- e2e: E2E tests\n- backend: The back end, a monoservice\n- captcha-service: A microservice that provides captcha support\n- ohunt: A stateful, standalone crawler microservice used to support certain OJs such as ZOJ.\n- build: Codes to build and deploy the project. Tool chain: docker, docker-compose, GNU make.\n- tools: Utility scripts and config files in operation\n\nSee the README file in each module for specific documents.\n\n## Developing and deploying in docker\n\n- The project needs docker and docker-compose to function correctly.\n\n### Development\n\n- This project uses makefile to manage dependency between modules. Execute `make help` in repository root to view document.\n- GNU make is required.\n\n### Deploy\n\nThere are two ways to deploy this project in a server.\n\n#### One-liner\n\nExecute following code in shell to deploy the project to port 3000.\n\n`curl -s https://raw.githubusercontent.com/Liu233w/acm-statistics/master/tools/remote-docker-up.sh | bash`\n\nVjudge crawler is not available in this way.\n\n#### Config file version\n\nIn this way you are able to customise the configuration, enabling all features.\n\n```bash\n# Create a folder to store config files\nmkdir -p ~/www/acm-statistics\ncd ~/www/acm-statistics\n# Download runner script and add permissions\ncurl https://raw.githubusercontent.com/Liu233w/acm-statistics/master/tools/remote-docker-up.sh  -o run.sh\nchmod +x run.sh\n# Run the script once to generate configuration file. It will exit after the line `.env file created, remember to edit it` is shown.\n./run.sh\n# Edit the config file following the description in it.\nvim .env\n# Now we can run the project by the script\n./run.sh\n```\n\nThen you can use tools such as systemd to run `./run.sh`.\n\n[./tools/acm-statistics.service](./tools/acm-statistics.service) is a template config file of systemd.\n\n`run.sh` checks updates when it is starting. If there are updates to `template.env`, `run.sh` will exit and ask you to compare these two files. **The script compares the line count of the two files to check update, please make sure they are identical when editing.**\n\n## Management\n\n- Set the url of adminer in `.env` file. It is `/adminer` by default.\n  - You can view and edit database via adminer.\n  - The name of the database is `acm_statistics`. Username is `root`. You can set password in `.env`\n- Backups are created automatically in 3:00am each day, stored in `db-backup` folder, which is in the folder that contains config files.\n\n## License\n\n- All source code except the code in `crawler/crawlers` are under AGPL-3.0 license\n- The code in `crawler/crawlers` are under BSD 2-Clause license.\n\n## Contribution\n\n- All contribution especially crawlers are welcomed.\n- Please follow [Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) when writing git commit messages.\n- You may use [cz-cli](https://github.com/commitizen/cz-cli) to help writing commit messages.\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/22635759?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://www.cometeme.tech\"\u003e\u003cb\u003eAdelard Collins\u003c/b\u003e\u003c/a\u003e\u003ca href=\"https://github.com/cometeme\"\u003e🔗\u003c/a\u003e\u003c/sub\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Liu233w/acm-statistics/issues?q=author%3Acometeme\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/64258212?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://github.com/BackSlashDelta\"\u003e\u003cb\u003eBackSlashDelta\u003c/b\u003e\u003c/a\u003e\u003ca href=\"https://github.com/BackSlashDelta\"\u003e🔗\u003c/a\u003e\u003c/sub\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Liu233w/acm-statistics/issues?q=author%3ABackSlashDelta\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/35862184?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://github.com/bodhisatan\"\u003e\u003cb\u003eBodhisatan_Yao\u003c/b\u003e\u003c/a\u003e\u003ca href=\"https://github.com/bodhisatan\"\u003e🔗\u003c/a\u003e\u003c/sub\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Liu233w/acm-statistics/issues?q=author%3Abodhisatan\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/25352156?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://github.com/Geekxiong\"\u003e\u003cb\u003eGeekxiong\u003c/b\u003e\u003c/a\u003e\u003ca href=\"https://github.com/Geekxiong\"\u003e🔗\u003c/a\u003e\u003c/sub\u003e\u003cbr /\u003e\u003ca href=\"#ideas-Geekxiong\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/39403985?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://github.com/settings/profile\"\u003e\u003cb\u003eHalorv\u003c/b\u003e\u003c/a\u003e\u003ca href=\"https://github.com/Halorv\"\u003e🔗\u003c/a\u003e\u003c/sub\u003e\u003cbr /\u003e\u003ca href=\"#ideas-Halorv\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/11661760?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://kidozh.com\"\u003e\u003cb\u003eKido Zhang\u003c/b\u003e\u003c/a\u003e\u003ca href=\"https://github.com/kidozh\"\u003e🔗\u003c/a\u003e\u003c/sub\u003e\u003cbr /\u003e\u003ca href=\"#infra-kidozh\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e \u003ca href=\"#ideas-kidozh\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/16333687?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://liu233w.github.io\"\u003e\u003cb\u003eLiu233w\u003c/b\u003e\u003c/a\u003e\u003ca href=\"https://github.com/Liu233w\"\u003e🔗\u003c/a\u003e\u003c/sub\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Liu233w/acm-statistics/commits?author=Liu233w\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-Liu233w\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#infra-Liu233w\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e \u003ca href=\"https://github.com/Liu233w/acm-statistics/commits?author=Liu233w\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/55663936?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://github.com/Meulsama\"\u003e\u003cb\u003eMeulsama\u003c/b\u003e\u003c/a\u003e\u003ca href=\"https://github.com/Meulsama\"\u003e🔗\u003c/a\u003e\u003c/sub\u003e\u003cbr /\u003e\u003ca href=\"#ideas-Meulsama\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/50655871?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://github.com/UserUnknownX\"\u003e\u003cb\u003eMichael Xiang\u003c/b\u003e\u003c/a\u003e\u003ca href=\"https://github.com/UserUnknownX\"\u003e🔗\u003c/a\u003e\u003c/sub\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Liu233w/acm-statistics/issues?q=author%3AUserUnknownX\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/11994295?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"http://zhao.wtf\"\u003e\u003cb\u003eZhao\u003c/b\u003e\u003c/a\u003e\u003ca href=\"https://github.com/2512821228\"\u003e🔗\u003c/a\u003e\u003c/sub\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Liu233w/acm-statistics/issues?q=author%3A2512821228\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/49401963?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://github.com/bluebear4\"\u003e\u003cb\u003ebluebear4\u003c/b\u003e\u003c/a\u003e\u003ca href=\"https://github.com/bluebear4\"\u003e🔗\u003c/a\u003e\u003c/sub\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Liu233w/acm-statistics/issues?q=author%3Abluebear4\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/22322656?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://github.com/ctuu\"\u003e\u003cb\u003ect\u003c/b\u003e\u003c/a\u003e\u003ca href=\"https://github.com/ctuu\"\u003e🔗\u003c/a\u003e\u003c/sub\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Liu233w/acm-statistics/issues?q=author%3Actuu\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/9880740?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://github.com/flylai\"\u003e\u003cb\u003eflylai\u003c/b\u003e\u003c/a\u003e\u003ca href=\"https://github.com/flylai\"\u003e🔗\u003c/a\u003e\u003c/sub\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Liu233w/acm-statistics/commits?author=flylai\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/Liu233w/acm-statistics/issues?q=author%3Aflylai\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/36151020?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://github.com/fzu-h4cky\"\u003e\u003cb\u003efzu-h4cky\u003c/b\u003e\u003c/a\u003e\u003ca href=\"https://github.com/fzu-h4cky\"\u003e🔗\u003c/a\u003e\u003c/sub\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Liu233w/acm-statistics/issues?q=author%3Afzu-h4cky\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/42441490?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://github.com/wwawwaww\"\u003e\u003cb\u003ewwawwaww\u003c/b\u003e\u003c/a\u003e\u003ca href=\"https://github.com/wwawwaww\"\u003e🔗\u003c/a\u003e\u003c/sub\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Liu233w/acm-statistics/issues?q=author%3Awwawwaww\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/43291744?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://github.com/zby0327\"\u003e\u003cb\u003ezby\u003c/b\u003e\u003c/a\u003e\u003ca href=\"https://github.com/zby0327\"\u003e🔗\u003c/a\u003e\u003c/sub\u003e\u003cbr /\u003e\u003ca href=\"#ideas-zby0327\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/Liu233w/acm-statistics/issues?q=author%3Azby0327\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLiu233w%2Facm-statistics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FLiu233w%2Facm-statistics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLiu233w%2Facm-statistics/lists"}