-
-
Save eopo/f0dc692f23e2373000df6134b7b4e4e0 to your computer and use it in GitHub Desktop.
/** | |
* 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 | |
} |
Ist da eine Störung??????
Bekomme keine Verbindung mehr
Nochmal ich. Das Script funktioniert irgendwie nicht mehr mit dem Xtrafit Studio.
Kann sich das mal jemand ansehen ?
Gruß
Stefan
Script didn’t work with Xtrafit. Could anybody fix it ?
Stefan
2021-07-29 09:56:58: Error: Das Zertifikat für diesen Server ist ungültig. Eventuell wird eine Verbindung mit einem Server hergestellt, der vorgibt, „xtrafitclubsdynamic.hirschenvalley.de“ zu sein und vertrauliche Daten gefährdet.
@dennismetz, leider haben die bei Xtrafit die Api erneut verändert. Konnte mit viel Ausprobieren keine Lösung finden.... Hast du evtl noch einen Fix oder irgendwer anders hier?
@Jonas-wav Die haben die API leider vor längerer Zeit entfernt... aktuell gibt's leider keine Chance da wieder was zu machen - ärgert mich auch etwas
@dennismetz
Aktuell scheint die offizielle App nur noch eine Webseite einzubetten. Diese Webseite ist z.B. für Hamburg-Wandsbek unter folgender URL erreichbar: https://api.myfitapp.de/metric/display/160173
Mit curl lassen sich die prozentualen Werte z.B: so auslesen curl -s "https://api.myfitapp.de/metric/display/160173" | grep -o 'data-display-percentage="[0-9]\+"'
Vielleicht könnt ihr die Webseite auch für euer Projekt benutzen.
Falls ihr auch noch die URLs für die anderen Standorte benötigt, sagt gerne bescheid.
@N1c093 super, danke für die Info!
Das Script funktioniert damit tatsächlich wieder.
Kannst du die IDs/URLs der anderen Standorte bereitstellen - dann würde ich das Script mal aktualisieren.
Wie liest du die IDs der anderen Standorte aus?
@dennismetz
Hier ist einmal die Auflistung:
Die URLs habe ich über die Android App herausgefunden indem ich https://httptoolkit.com/ verwendet habe. Alternativ kann auch https://www.charlesproxy.com/ verwendet werden. Sobald du die entsprechende Auslastung in der App aufrufst, kannst du über diese Tools die genaue URL sehen.
Super, danke!
Ich habe das Script mal angepasst, hier ist die aktuelle Version:
https://gist.github.com/dennismetz/611b1e8f64c2160c8f24253f792fa0b6
@N1c093 Das hatte ich auch gesehen, bin aber am Script gescheitert. Danke @dennismetz <3
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.
This gist ist not up to date and the code shown does not work anymore
Head to this gist for a working version!
Fork of https://gist.github.com/masselmello/6d4f4c533b98b2550ee23a7a5e6c6cff
Original Content
How to use: