/* Imports */ import axios from "axios"; import { databaseUpsert } from "../utils/database-wrapper"; import { calculateStars } from "../utils/stars"; /* Definitions */ let endpoint = "https://sports.williamhill.com/betting/en-gb/politics"; //
response.data); return response; } let processResults = (html) => { let results = []; let chunks = html.split( '

' ); kamalamarkets.shift(); for (let kamalamarket of kamalamarkets) { let title = kamalamarket.split("")[0]; let numerator = Number(kamalamarket.split('data-num="')[1].split('"')[0]); let denominator = Number( kamalamarket.split('data-denom="')[1].split('"')[0] ); let probability = denominator / (numerator + denominator); let obj = { title: title, url: "https://sports.williamhill.com/betting/en-gb/politics", platform: "WilliamHill", description: "", timestamp: new Date().toISOString(), options: [ { name: "Yes", probability: probability, type: "PROBABILITY", }, { name: "No", probability: 1 - probability, type: "PROBABILITY", }, ], qualityindicators: { stars: calculateStars("WilliamHill", {}), }, }; results.push(obj); } chunks.shift(); // Deal with the other markets for (let chunk of chunks) { let title = chunk.split('"')[0]; let title2 = chunk.split(' title2.length ? title : title2; let options = []; let alternatives = chunk.split( '

' ); alternatives.shift(); for (let alternative of alternatives) { let optionName = alternative.split("")[0]; let numerator = Number(alternative.split('data-num="')[1].split('"')[0]); let denominator = Number( alternative.split('data-denom="')[1].split('"')[0] ); let option = { name: optionName, probability: denominator / (numerator + denominator), type: "PROBABILITY", }; options.push(option); } // normalize probabilities let totalValue = options .map((element) => Number(element.probability)) .reduce((a, b) => a + b, 0); options = options.map((element) => ({ ...element, probability: Number(element.probability) / totalValue, })); // Filter very unlikely probabilities: Not here, but on the front end // options = options.filter(element => element.probability > 0.02) let obj = { title: title, url: "https://sports.williamhill.com/betting/en-gb/politics", platform: "WilliamHill", options: options, qualityindicators: { stars: calculateStars("WilliamHill", {}), }, }; results = results.filter( (result) => result.title.length > 4 && result.title != "2024 or later" ); // removes some predictions because hard to parse. results.push(obj); } //console.log(results) return results; }; let processhtml2 = (html) => { html.split(); }; /* Body */ export async function williamhill() { let response = await fetchUrl( "https://sports.williamhill.com/betting/en-gb/politics" ); let results = processResults(response); await databaseUpsert(results, "williamhill-questions"); console.log(results.sort((a, b) => a.title > b.title)); console.log("Done"); } //williamhill()