diff --git a/src/parsers/codechef.js b/src/parsers/codechef.js index 22bbac0..5f3fd18 100644 --- a/src/parsers/codechef.js +++ b/src/parsers/codechef.js @@ -1,37 +1,31 @@ const axios = require('axios'); const cheerio = require('cheerio'); -function parseContestDetails($, contestRow) { - const details = $(contestRow).find('td'); - const startTime = new Date(details.eq(2).attr("data-starttime")).getTime() / 1000; - const endTime = new Date(details.eq(3).attr("data-endtime")).getTime() / 1000; +function parseContestDetails(object) { + const cname = object.contest_name; + const code = object.contest_code; + const startTime = object.contest_start_date; + const endTime = object.contest_end_date; return { - name: details.eq(1).text(), - url: `http://www.codechef.com${details.eq(1).find('a').attr('href')}`, + name: cname, + url: `https://www.codechef.com/${code}?itm_campaign=contest_listing`, platform: 'codechef', startTime, endTime, }; } -const codechef = () => axios.get('http://www.codechef.com/contests', { timeout: 30000 }) +const codechef = () => axios.get('https://www.codechef.com/api/list/contests/all?sort_by=END&sorting_order=desc&offset=0', { timeout: 30000 }) .then((response) => { - const $ = cheerio.load(response.data); - const statusdiv = $('table .dataTable'); - const headings = $('h2'); const contestTables = { 'Upcoming Coding Contests': [], 'Present Coding Contests': [] }; - - for (let i = 0; i < headings.length; i++) { - if (headings.eq(i).text() !== 'Past Coding Contests') { - contestTables[headings.eq(i).text()] = statusdiv.eq(i).find('tr').slice(1); - } - } - let contests = contestTables['Present Coding Contests'].map((i, elem) => parseContestDetails($, elem)).get(); - - contests = contests.concat(contestTables['Upcoming Coding Contests'].map((i, elem) => parseContestDetails($, elem)).get()); - - return contests; + response.data.present_contests.forEach(element => { + contestTables['Present Coding Contests'].push(parseContestDetails(element)); + }); + response.data.future_contests.forEach(element => { + contestTables['Upcoming Coding Contests'].push(parseContestDetails(element)); + }); + return contestTables; }) .catch((error) => { console.log('Codechef: ', error.toString());