Last active
January 28, 2024 19:50
-
-
Save eopo/f0dc692f23e2373000df6134b7b4e4e0 to your computer and use it in GitHub Desktop.
iOS widget powered by the Scriptable app that shows the current capacity of your XtraFIT gym
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Script for scriptable to get the current capacity of XTRAFIT Gyms | |
*/ | |
let gymId = 210 | |
let param = args.widgetParameter | |
if (param != null && param.length > 0) { | |
gymId = param | |
} | |
const gymDetails = await fetchGymDetails(gymId) | |
const currentGymCapacity = await fetchGymCapacity(gymDetails) | |
const gymName = gymDetails.webName | |
const widget = new ListWidget() | |
await createWidget() | |
if (!config.runsInWidget) { | |
await widget.presentSmall() | |
} | |
Script.setWidget(widget) | |
Script.complete() | |
//Create the widget | |
async function createWidget() { | |
const headlineText = widget.addText("🏋️ Capacity") | |
headlineText.font = Font.mediumRoundedSystemFont(19) | |
widget.addSpacer() | |
const widgetStack = widget.addStack() | |
widgetStack.layoutVertically() | |
widgetStack.bottomAlignContent() | |
const capacityText = widgetStack.addText(currentGymCapacity.toString() + "%") | |
capacityText.font = Font.mediumRoundedSystemFont(50) | |
if (currentGymCapacity < 20) { | |
capacityText.textColor = new Color("#33cc33") | |
} else if (currentGymCapacity < 30){ | |
capacityText.textColor = new Color("#ff9900") | |
}else{ | |
capacityText.textColor = new Color("#ff3300") | |
} | |
widgetStack.addSpacer(1) | |
const gymNameText = widgetStack.addText(gymName) | |
gymNameText.font = Font.regularSystemFont(12) | |
} | |
//Fetches the current capacity of the XTRAFit gym | |
async function fetchGymDetails(id) { | |
const url = 'https://xtrafitclubsdynamic.hirschenvalley.de/application' | |
const req = new Request(url) | |
req.headers = {"Content-Type": "application/json"} | |
const apiResult = await req.loadJSON() | |
for (var i in apiResult){ | |
if(apiResult[i].centerId == id) | |
{ | |
return apiResult[i] | |
} | |
} | |
return {webName: 'Studio nicht gefunden', currentlyCheckedInCount: 0, maximumAllowedCheckedIn: 0} | |
} | |
//Fetches the Capacity of the gym | |
async function fetchGymCapacity(gymDetails) { | |
return gymDetails.currentlyCheckedInCount * 100 / gymDetails.maximumAllowedCheckedIn || 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Ich habe die Beschreibung mal angepasst und auf @dennismetz' Repo verwiesen. Der Übersichtlichkeit halber würde ich vorschlagen, den Austausch dann auch dort weiterzuführen.