-
-
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://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 | |
| } | |
| //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' | |
| } | |
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
thanks @lorenzlars
@iToab Die Studios von Jumpers Fitness findet man auf jeden Fall hier: https://bestfit.api.magicline.com/connect/v1/studio
Hier gibts die Daten: https://bestfit.api.magicline.com/connect/v1/studio/{studioId}/utilization - bin mir aber nicht sicher, ob die tatsächlich live sind oder einfach jeden Tag das gleiche angezeigt wird.
@erikspall FYI
bump, damit @masselmello die funktion von @lorenzlars implementiert und zukünftigen Besuchern das scrollen durch die Kommentare erspart. ❤️
Thx by the way für das Script.
Done ;)
@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.