Task Functions
task()
The task
function contains the core logic of the task and we will update the code sample on the template with the code block below:
async function task() {
const browser = await puppeteer.launch(); // launch browser
const page = await browser.newPage(); // new page
await page.goto('https://www.google.com/doodles'); // visit https://www.google.com/doodles'
let bodyHTML = await page.evaluate(() => document.documentElement.outerHTML);
const $ = cheerio.load(bodyHTML); // parse HTML
let scrapedDoodle = $('.latest-doodle.on').find('div > div > a > img').attr('src'); // get link for latest doodle using the HTML element
if (scrapedDoodle.substring(0, 2) == '//') {
scrapedDoodle = scrapedDoodle.substring(2, scrapedDoodle.length);
} // extract link
console.log('SUBMISSION VALUE', scrapedDoodle);
const stringfy = JSON.stringify(scrapedDoodle);
// store this work of fetching googleDoodle to levelDB
try{
await namespaceWrapper.storeSet("doodle", stringfy); // store on levelDB
}catch(err){
console.log("error", err)
}
}
Let's break down the logic above, we:
Launched a browser using Puppeteer, created anew page and visited Google doodle
Parsed the HTML document with Cheerio
Extracted the link of the latest google doodle from the parsed HTML document
Converted the link to JSON and stored it on levelDB using the
storeSet
helper function
fetchSubmission()
The fetchSubmission
function with fetch and return the value from levelDB using the storeGet
helper function.
async function fetchSubmission() {
try {
const scrappedDoodle = JSON.parse(await namespaceWrapper.storeGet(
"doodle"
)); // retrieve value
console.log("Received Doodle", scrappedDoodle);
return scrappedDoodle;
} catch (err) {
console.log("Error", err);
return err;
}
}
submitTask()
The submitTask
function calls the fetchSubmission()
to retrieve the value from levelDB and submits it to K2 using the checkSubmissionAndUpdateRound
helper function.
async function submitTask(roundNumber) {
console.log("submitTask called with round", roundNumber);
try {
const value = await fetchSubmission(); // retrieve value from levelDB
console.log("value", value);
await namespaceWrapper.checkSubmissionAndUpdateRound(value, roundNumber); // submit to K2
console.log("after the submission call");
} catch (error) {
console.log("error in submission", error);
}
}
Last updated