-
-
Save masselmello/6d4f4c533b98b2550ee23a7a5e6c6cff to your computer and use it in GitHub Desktop.
/** | |
* Script for scriptable to get the current capacity of McFit Gyms | |
*/ | |
let gymId = 1731068920 | |
let param = args.widgetParameter | |
if (param != null && param.length > 0) { | |
gymId = param | |
} | |
const currentGymCapacity = await fetchGymCapacity(gymId) | |
const storeInfo = await fetchGymInfo(gymId) | |
const gymName = await fetchGymInfo(gymId) | |
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(30) | |
const capacityText = widget.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") | |
} | |
widget.addSpacer(1) | |
const gymNameText = widget.addText(gymName) | |
gymNameText.font = Font.regularSystemFont(12) | |
} | |
//Fetches the current capacity of the McFit gym | |
async function fetchGymCapacity(id) { | |
const url = 'https://www.mcfit.com/de/auslastung/antwort/request.json?tx_brastudioprofilesmcfitcom_brastudioprofiles%5BstudioId%5D=' + id | |
const req = new Request(url) | |
const result = await req.loadJSON() | |
var counter = 0 | |
for (var i in result.items) { | |
if(result.items[i].isCurrent){ | |
counter = result.items[i].percentage | |
} | |
} | |
return counter | |
} | |
//Fetches the name of the gym | |
async function fetchGymInfo(id) { | |
const url = 'https://rsg-group.api.magicline.com/connect/v1/studio?studioTags=AKTIV-391B8025C1714FB9B15BB02F2F8AC0B2' | |
const req = new Request(url) | |
const apiResult = await req.loadJSON() | |
for(var i in apiResult){ | |
if(apiResult[i].id == id){ | |
return apiResult[i].studioName | |
} | |
} | |
return 'Your McFit' | |
} | |
@masselmello
Hey,
Hat das jemand vielleicht schon für Jumpers Fitness angepasst?
https://www.jumpers-fitness.com/studios/
Wäre super 👍🏻
@ssibio17 Habs mir Mal kurz angeschaut, scheint mir auf den ersten Blick aber einfach eine HTML-Seite zu sein, die alle 30 Sekunden mit neuen Werten neu geladen wird. Der Source-Code ist aber auch katastrophal.
@iToab Scheint möglich, aber der Source-Code ist ebenfalls ziemlich unübersichtlich, also leider doch etwas sehr aufwendig.
Mal schauen vlt. wird was möglich, will aber nichts versprechen, hab nur ganz kurz nebenbei reingeschaut.
Hätte das gern für Xtrafit Studios. Wäre das auch möglich ?
Ah gesehen, gibt es schon
Wie komme ich an die gym Id von Xtrafit köln buchheim ??
Gym ID Xtrafit (ein paar gefunden)
200 Köln Ehrenfeld
210 Essen-Volgelheim
220 Köln Buchheim
230 Krefeld-Cracau
240 Mainz-Bretzenheim
270 Köln Marsdorf
300 Offenbach Zentrum
Hat jemand noch Zeit sich FitStar anzuschauen? Update: Ich arbeite grad an einem FitStar Widget.
Hey is schon ne weile her aber bei mir funktionieren die high5 Studios nicht hat sich da was geändert ?
Für die Leute, bei denen es nicht funktioniert.
Ich habe eine funktionierende Version, inkl. der Studios und deren Tags + URL zum anpassen.
https://gist.github.com/clemone210/8f1b150a2c4f1fac0c409e6d21d656e2
If someone has issues with the widget because of the recent API change on McFit side. Just replace the fetchGymCapacity
with this implementation:
async function fetchGymCapacity(id) {
const url = `https://my.mcfit.com/nox/public/v1/studios/${id}/utilization/v2/today`
const req = new Request(url)
req.headers = {
'x-tenant': 'rsg-group'
}
const result = await req.loadJSON()
return result.find((item) => item.current)?.percentage ?? 0
}
thanks @lorenzlars , it works now again
Sehr nice, dass ich nichtmal die gymID ändern musste, weil der OP wohl mal im gleichen Gym trainiert hat :D
Alles klar, danke für die Info 👍