ojscraper

1.12.0 • Public • Published

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: 'cc'
  2. Codeforces: 'cf'
  3. HDU: 'hdu'
  4. LOJ: 'loj'
  5. POJ: 'poj'
  6. SPOJ: 'spoj'
  7. Uva Online Judge: 'uva'
  8. Vjudge: 'vjudge'
  9. CSAcademy: 'csa'
  10. AtCoder: 'atc'

Well, that's it for now.

Formats of problemID

problemID must match the following regex:

  1. cc: ^[A-Z0-9_]+$
  2. cf: ^\d+[A-Z]
  3. hdu: \d{4}
  4. loj: \d{4}
  5. poj: \d{4}
  6. spoj: ^[A-Z0-9_]+$
  7. 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

Package Sidebar

Install

npm i ojscraper

Weekly Downloads

0

Version

1.12.0

License

MIT

Unpacked Size

27.1 kB

Total Files

17

Last publish

Collaborators

  • forthright48