Skip to content

Instantly share code, notes, and snippets.

@NickChristensen
Last active September 3, 2020 13:49
Show Gist options
  • Save NickChristensen/815240429a001866df4dba40bec11769 to your computer and use it in GitHub Desktop.
Save NickChristensen/815240429a001866df4dba40bec11769 to your computer and use it in GitHub Desktop.
Smashed this together from Scriptable’s example plus my bitbar version
let getCandidateByShortname = (candidates, shortName) =>
candidates.find((candidate) => candidate.shortName === shortName);
let floatsToInts = (candidate) => ({
...candidate,
lastTradePrice: round(candidate.lastTradePrice),
lastClosePrice: round(candidate.lastClosePrice),
});
let round = (float) => Math.round(float * 100);
let changeToday = (now, close) => {
if (now === close) {
return "";
} else if (now - close > 0) {
return ` (↑${Math.abs(now - close)})`;
} else {
return ` (↓${Math.abs(now - close)})`;
}
};
let createWidget = results => {
const [biden, trump] = ["Biden", "Trump"]
.map((shortName) => getCandidateByShortname(results.contracts, shortName))
.map(floatsToInts);
const leadNow = biden.lastTradePrice - trump.lastTradePrice;
const leadAtLastClose = biden.lastClosePrice - trump.lastClosePrice;
let w = new ListWidget()
let emoji = w.addText("🗳")
emoji.applyHeadlineTextStyling();
w.addSpacer(16)
let titleTxt = w.addText(`${leadNow}${changeToday(leadNow, leadAtLastClose)}`)
titleTxt.applyHeadlineTextStyling();
w.addSpacer(8);
[biden, trump].forEach((candidate) => {
let text = w.addText(`${candidate.lastTradePrice} ${candidate.shortName}${changeToday(
candidate.lastTradePrice,
candidate.lastClosePrice
)}`)
text.applySubheadlineTextStyling()
text.textOpacity = 0.8;
});
w.addSpacer()
w.url = "https://www.predictit.org/markets/detail/3698"
return w
}
const loadResults = async () => {
let url = "https://www.predictit.org/api/marketdata/markets/3698"
let req = new Request(url)
let json = await req.loadJSON()
return json
}
let results = await loadResults()
let widget = createWidget(results)
if (config.runsInWidget) {
Script.setWidget(widget)
Script.complete()
} else {
widget.presentSmall()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment