https://github.com/forthright48/ojscraper
Simple JS module that scraps data from online judges
https://github.com/forthright48/ojscraper
competitive-programming cpps online-judges scraper
Last synced: about 1 month ago
JSON representation
Simple JS module that scraps data from online judges
- Host: GitHub
- URL: https://github.com/forthright48/ojscraper
- Owner: forthright48
- Created: 2017-06-02T02:42:15.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2020-09-03T02:37:52.000Z (over 4 years ago)
- Last Synced: 2025-03-24T02:37:06.479Z (about 2 months ago)
- Topics: competitive-programming, cpps, online-judges, scraper
- Language: JavaScript
- Homepage:
- Size: 51.8 KB
- Stars: 3
- Watchers: 2
- Forks: 4
- Open Issues: 9
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# OJScraper
A javascript module to scrap online judge and retrieve informations.
Currently supports scraping of UVa, Codeforces, HDU and SPOJ.
# Install
`npm install --save ojscraper`
# Use
```
const ojscraper = require('ojscraper');ojscraper.getProblemInfo({
ojname: 'uva',
problemID: '100'
})
.then(function(info){
console.log(info);
/**
* {
"platform": "uva",
"problemID": "100",
"title": "The 3n + 1 problem",
"link": "http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=18&page=show_problem&problem=36"
}
*/
})ojscraper.getUserInfo({
ojname: 'uva',
username: 'forthright48'
})
.then(function(info){
console.log(info);
/**
* {
"platform": "uva",
"username": "forthright48",
"userID": "128671",
"solveCount": 1464,
"solveList": [100, 101 ... too many to view]
}
*/
})
```
**Only promise is returned. Callback is not supported.**# Methods
There are only two methods:
## `getProblemInfo()`
It accepts an object as parameter. The object must have the following two fields: `ojname` and `problemID`. Look below for possible values of `ojname` and their corresponding problemID formats.
## `getUserInfo()`
It accepts an object as parameter. The object must have the following two fields: `ojname` and `username`. A list of problem Ids which have been solved by the user is returned.
# Values of `ojname`
1. [CodeChef](https://www.codechef.com/): 'cc'
1. [Codeforces](http://codeforces.com/): 'cf'
1. [HDU](http://acm.hdu.edu.cn/): 'hdu'
1. [LOJ](http://www.lightoj.com/login_main.php): 'loj'
1. [POJ](http://poj.org/): 'poj'
1. [SPOJ](http://www.spoj.com/): 'spoj'
1. [Uva Online Judge](https://uva.onlinejudge.org/): 'uva'
1. [Vjudge](https://vjudge.net/): 'vjudge'
1. [CSAcademy](https://csacademy.com): 'csa'
1. [AtCoder](https://atcoder.jp/): 'atc'Well, that's it for now.
# Formats of `problemID`
`problemID` must match the following regex:
1. cc: `^[A-Z0-9_]+$`
1. cf: `^\d+[A-Z]`
1. hdu: `\d{4}`
1. loj: `\d{4}`
1. poj: `\d{4}`
1. spoj: `^[A-Z0-9_]+$`
1. uva: `^\d{3,5}$`# Special Cases
## LightOJ
Since the site is private, you need to provide a set of credential to access any info.
```
ojscraper.getProblemInfo({
ojname: 'loj',
problemID: '1000',
credential: {
userId: USERID_FOR_LOGIN,
password: PASSWORD_FOR_LOGIN
}
})
```## VJudge
You can only get userinfo from vjudge, and that too for a particular sub oj.
```
ojscraper.getProblemInfo({
ojname: 'loj',
problemID: '1000',
subojname: 'uva'
})//Output: All problems from UVa that user solved in Vjudge
```# TODO
1. Make it compatible for browsers
1. CORS issue