/* Imports */ import fs from 'fs' import axios from "axios" import https from "https" import fetch from "isomorphic-fetch" import {getCookie, applyIfCookieExists} from "../utils/getCookies.js" import toMarkdown from "../utils/toMarkdown.js" import { calculateStars } from "../utils/stars.js" import { upsert } from "../utils/mongo-wrapper.js" /* Definitions */ let hypermindEnpoint1 = 'https://predict.hypermind.com/dash/jsx.json' let hypermindEnpoint2 = 'https://prod.hypermind.com/ngdp-jsx/jsx.json' const insecureHttpsAgent = new https.Agent({ rejectUnauthorized: false, // (NOTE: this will disable client verification) }) /* Support Functions */ String.prototype.replaceAll = function replaceAll(search, replace) { return this.split(search).join(replace); } function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } /* Fetchers */ async function fetchHypermindData1(slug) { let jsx = `jsx=%5B%5B%22dataMgr%22%2C%22getGQList%22%2C%7B%22listName%22%3A%20%22${slug}%22%2C%22format%22%3A%20%7B%22props%22%3A%20true%2C%22posts%22%3A%20true%2C%22cond%22%3A%20%7B%22props%22%3A%20true%2C%22otcm%22%3A%20%7B%22tradingHistory%22%3A%20true%2C%22props%22%3A%20true%7D%7D%2C%22otcm%22%3A%20%7B%22tradingHistory%22%3A%20true%2C%22props%22%3A%20true%7D%7D%7D%5D%5D` // console.log(jsx) let response = await await axios(hypermindEnpoint1, { "credentials": "omit", "headers": { "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:90.0) Gecko/20100101 Firefox/90.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Language": "en-US,en;q=0.5", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "Upgrade-Insecure-Requests": "1", "Sec-Fetch-Dest": "document", "Sec-Fetch-Mode": "navigate", "Sec-Fetch-Site": "none", "Sec-Fetch-User": "?1", "Cache-Control": "max-age=0" }, "referrer": `https://predict.hypermind.com/dash/dash/dash.html?list=${slug}`, "data": jsx, "method": "POST", "mode": "cors", httpsAgent: insecureHttpsAgent }).then(response => response.data[0].questions) //console.log(response) return response } async function fetchHypermindDataShowcases(slug, cookie) { let response = await axios(hypermindEnpoint2, { "credentials": "include", "headers": { "User-Agent": "", "Accept": "*/*", "Accept-Language": "en-US,en;q=0.5", "Content-Type": "application/json; charset=UTF-8", //"Cookie": cookie }, "referrer": "https://prod.hypermind.com/ngdp/en/showcase/showcase.html?inFrame=true", "data": `[["showcase","getShowcase",{"showcase":"${slug}","fmt":{"fcsterCnt":true,"crowdFcst":true,"crowdFcstHist":true}}]]`, "method": "POST", "mode": "cors", httpsAgent: insecureHttpsAgent }).then(resp => resp.data[0].items) .then(items => items.filter(item => item.type == "IFP")) .then(items => items.map(item => item.IFP)) // console.log(response) response.forEach(item => delete item.crowdFcstHist) return response } /* Body */ async function hypermind_inner(cookie) { // Hypermind panelists and competitors; dashboard type two: "showcase" // https://prod.hypermind.com/ngdp/fr/showcase2/showcase.html?sc=SLUG // E.g., https://prod.hypermind.com/ngdp/fr/showcase2/showcase.html?sc=AI2023 let slugs2 = [ "AI2030", "Covid19" , "DOSES", "H5N8", "NGDP", "JSAI", "AI2023" ] // [] let results2 = [] for(let slug of slugs2){ console.log(slug) await sleep(1000 + Math.random() * 1000) let response = await fetchHypermindDataShowcases(slug) let objs = response.map(result => { let descriptionraw = result.props.details.split("
`, "") let descriptionprocessed5 = toMarkdown(descriptionprocessed4) let description = descriptionprocessed5.replaceAll("\n", " ").replaceAll(" ", " ") //console.log(res.otcms) //let percentage = (res.otcms.length==2) ? Number(res.otcms[0].price).toFixed(0) +"%" : "none" let options = res.otcms.map(option => ({ "name": option.props.title .split("%%fr")[0] .replaceAll("%%en:", ""), "probability": Number(option.price) / 100, "type": "PROBABILITY" })) return ({ "title": res.props.title.split("%%fr")[0].replace("%%en:", ""), "url": "https://predict.hypermind.com/dash/dash/dash.html?list=" + slug, "platform": "Hypermind", "description": description, "options": options, "timestamp": new Date().toISOString(), "qualityindicators": { "stars": calculateStars("Hypermind", ({})), // "numforecasters": res.fcsterCnt } }) }) // console.log(objs) results1.push(...objs) } let resultsTotal = [...results1, ...results2] let distinctTitles = [] let resultsTotalUnique = [] for (let result of resultsTotal) { if (!distinctTitles.includes(result["title"])) { resultsTotalUnique.push(result) distinctTitles.push(result["title"]) } } // console.log(resultsTotal) console.log(resultsTotalUnique) console.log(resultsTotalUnique.length, "results") // let string = JSON.stringify(resultsTotalUnique, null, 2) // fs.writeFileSync('./data/hypermind-questions.json', string); await upsert(resultsTotalUnique, "hypermind-questions") } //hypermind() export async function hypermind() { let cookie = process.env.HYPERMINDCOOKIE || getCookie("hypermind") await applyIfCookieExists(cookie, hypermind_inner) }