/* Imports */ import fs from 'fs' import axios from "axios" import { calculateStars } from "./stars.js" /* Definitions */ let unixtime = new Date() .getTime() let endpoint = `https://fantasyscotus.net/case/list/?filterscount=0&groupscount=0&pagenum=0&pagesize=20&recordstartindex=0&recordendindex=12&_=${unixtime}` async function fetchData() { let response = await axios({ "url": endpoint, "credentials": "omit", "headers": { "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0", "Accept": "application/json, text/javascript, */*; q=0.01", "Accept-Language": "en-US,en;q=0.5", "Content-Type": "application/x-www-form-urlencoded", "X-Requested-With": "XMLHttpRequest" }, "referrer": "https://fantasyscotus.net/case/list/", "method": "GET", "mode": "cors" }) .then(res => res.data) //console.log(response) return response } async function getPredictionsData(caseUrl) { let newCaseUrl = `https://fantasyscotus.net/user-predictions${caseUrl}?filterscount=0&groupscount=0&sortdatafield=username&sortorder=asc&pagenum=0&pagesize=20&recordstartindex=0&recordendindex=20&_=${unixtime}` //console.log(newCaseUrl) let predictions = await axios({ "url": newCaseUrl, "credentials": "include", "headers": { "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0", "Accept": "application/json, text/javascript, */*; q=0.01", "Accept-Language": "en-US,en;q=0.5", "Content-Type": "application/x-www-form-urlencoded", "X-Requested-With": "XMLHttpRequest" }, "referrer": newCaseUrl, "method": "GET", "mode": "cors" }) .then(res => res.data) let predictionsAffirm = predictions.filter(prediction => prediction.percent_affirm > 50) //console.log(predictions) //console.log(predictionsAffirm.length/predictions.length) return ({ numAffirm: predictionsAffirm.length, proportionAffirm: predictionsAffirm.length/predictions.length, numForecasts: predictions.length }) } async function processData(data) { let events = data.object_list let historicalPercentageCorrect = data.stats.pcnt_correct let historicalProbabilityCorrect = Number(historicalPercentageCorrect.replace("%",""))/100 let results = [] for(let event of events){ if(event.accuracy == ''){ // if the thing hasn't already resolved let predictionData = await getPredictionsData(event.docket_url) let pAffirm = predictionData.proportionAffirm //let trackRecord = event.prediction.includes("Affirm") ? historicalProbabilityCorrect : 1-historicalProbabilityCorrect let eventObject = ({ "title": `In ${event.short_name}, the SCOTUS will affirm the lower court's decision`, "url": `https://fantasyscotus.net/user-predictions${event.docket_url}`, "platform": "FantasySCOTUS", "description": `${(pAffirm*100).toFixed(2)}% (${predictionData.numAffirm} out of ${predictionData.numForecasts}) of FantasySCOTUS players predict that the lower court's decision will be affirmed. FantasySCOTUS overall predicts an outcome of ${event.prediction}. Historically, FantasySCOTUS has chosen the correct side ${historicalPercentageCorrect} of the time.`, "options": [ { "name": "Yes", "probability": pAffirm, "type": "PROBABILITY" }, { "name": "No", "probability": 1-pAffirm, "type": "PROBABILITY" } ], "numforecasts": predictionData.numForecasts, "stars": calculateStars("FantasySCOTUS", ({})) }) console.log(eventObject) results.push(eventObject) } } return results } /* Body */ export async function fantasyscotus() { let rawData = await fetchData() let results = await processData(rawData) //console.log(results) let string = JSON.stringify(results, null, 2) fs.writeFileSync('./data/fantasyscotus-questions.json', string); console.log("Done") } //fantasyscotus()