ojscraper
v1.12.0
Published
"A module that scraps user information from various OJ"
Downloads
3
Maintainers
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
- CodeChef: 'cc'
- Codeforces: 'cf'
- HDU: 'hdu'
- LOJ: 'loj'
- POJ: 'poj'
- SPOJ: 'spoj'
- Uva Online Judge: 'uva'
- Vjudge: 'vjudge'
- CSAcademy: 'csa'
- AtCoder: 'atc'
Well, that's it for now.
Formats of problemID
problemID
must match the following regex:
- cc:
^[A-Z0-9_]+$
- cf:
^\d+[A-Z]
- hdu:
\d{4}
- loj:
\d{4}
- poj:
\d{4}
- spoj:
^[A-Z0-9_]+$
- 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
- Make it compatible for browsers
- CORS issue