-
-
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' | |
} | |
How to
Simply copy the above code to your Scriptable app and add the scriptable widget to your homescreen.
Then choose the new added script and simply enter the id of your gym as a parameter when creating the widget.
You can find a list of possible ids below grouped by the different chains of rsg.
The list is without any guarantee that it might be complete or still working.
List of RSG Group Gyms and their ids:
McFIT
1210249500 McFIT Hannover Wülfel
1210430420 McFIT Wien Jägerstraße
1214245660 McFIT Schwerin
1217178980 McFIT Hamburg Stellingen
1222406050 McFIT Hamburg Stellingen II
1238245210 McFIT Hamburg St. Georg
1226210240 McFIT Hamburg Langenhorn
1227669060 McFIT Hamburg Hamm
1243732290 McFIT Hamburg Othmarschen
1244533450 McFIT Hamburg Steilshoop
1261222410 McFIT Rostock
1261482430 McFIT Lüneburg
1259118100 McFIT Flensburg
1265635050 McFIT Lübeck
1266242250 McFIT Kiel
1265095530 McFIT Neumünster
1282502730 McFIT Wilhelmshaven
1286387060 McFIT Oldenburg
1282764190 McFIT Garbsen
1287088900 McFIT Siegen
1300281990 McFIT Marburg
1300538400 McFIT Solingen-Mitte
1301061690 McFIT Hildesheim
1307976090 McFIT Magdeburg
1308098500 McFIT Magdeburg-Altstadt
1315044800 McFIT Salzgitter
1315301280 McFIT Bielefeld
1318563820 McFIT Bielefeld-Stieghorst
1320817680 McFIT Gronau
1324491280 McFIT Soest
1320982950 McFIT Osnabrück
1326024770 McFIT Rheine
1326381890 McFIT Lünen
1330877890 McFIT Velbert
1332591200 McFIT Dinslaken
1333102490 McFIT Solingen
1341025840 McFIT Bremerhaven-Lehe
1341260900 McFIT Wolfsburg
1343005470 McFIT Braunschweig
1349256200 McFIT Berlin-Mahlsdorf
1349612870 McFIT Berlin-Adlershof
1350226490 McFIT Berlin-Marzahn
1357900310 McFIT Berlin-Niederschöneweide
1358030660 McFIT Frankfurt an der Oder
1358621370 McFIT Berlin-Lichterfelde
1378349880 McFIT Berlin-Neukölln
1378541720 McFIT Berlin-Spandau
1365485520 McFIT Berlin-Tempelhof
1365913680 McFIT Berlin-Marienfelde
1367073160 McFIT Berlin Alt-HSH
1388329120 McFIT Berlin-Reinickendorf
1401913170 McFIT Berlin-Wedding
1387327290 McFIT Berlin-Spandau West
1387456370 McFIT Berlin-Wilmersdorf
1387648020 McFIT Berlin-Moabit
1413742290 McFIT Berlin Lichtenberg
1414048320 McFIT Berlin-Heinersdorf
1427956210 McFIT Berlin-Charlottenburg
1431743730 McFIT Göttingen
1431982160 McFIT Bremen-Kattenturm
1432413020 McFIT Bremen-Vahr
1444649250 McFIT Bremen-Bahnhofsvorstadt
1447805280 McFIT Münster
1455779710 McFit Hamm
1456341620 McFIT Recklinghausen
1456553390 McFIT Bochum-Grumme
1456559430 McFIT Bochum-Wattenscheid
1464398660 McFIT Dortmund-Mitte
1464428690 McFIT Dortmund-Aplerbeck
1455716930 McFIT Madrid - Ventas
1470853850 McFIT Witten
1470936540 McFIT Bochum-Innenstadt
1470930710 McFIT Bottrop
1470942300 McFIT Duisburg-Wanheimerort
1480580800 McFIT Duisburg-Alt-Hamborn
1471225620 McFIT Hagen
1486991540 McFIT Essen-Nordviertel
1487068340 McFIT Essen-Bergerhausen
1487084750 McFIT Essen-Westviertel
1487134350 McFIT Mülheim
1493810330 McFIT Oberhausen
1495802570 McFIT Oberhausen-Altstadt
1501355840 McFIT Ratingen
1501356000 McFIT Mönchengladbach-Pesch
1501358190 McFIT Wuppertal-Barmen
1511016690 McFIT Wuppertal-Elberfeld
1518062110 McFIT Düsseldorf-Lierenfeld
1518063160 McFIT Neuss
1518063650 McFIT Remscheid
1518063990 McFIT Gelsenkirchen
1518063910 McFIT Gladbeck
1536266890 McFIT Aachen
1536269110 McFIT Aachen-Nordost
1536681400 McFIT Gütersloh
1536769810 McFIT Herne
1537649930 McFIT Krefeld
1538574470 McFIT Paderborn
1549847800 McFIT Leipzig Leutzsch
1557707700 McFIT Torrejón
1557905740 McFIT Alcalá de Henares
1557907430 McFIT Leganés
1557916600 McFIT Madrid - El Carmen
1566042640 McFIT Valladolid
1566039990 McFIT Albacete
1565961220 McFIT Madrid - Delicias
1565961920 McFIT Madrid - Nuevos Ministerios
1574776930 McFIT Barcelona - Les Corts
1574779290 McFIT Barcelona - El Clot
1585313920 McFIT Köln-Mülheim
1586570540 McFIT Köln Bayenthal
1585854790 McFIT Köln-Kalk
1587272080 McFIT Köln-Ehrenfeld
1587901620 McFIT Köln-Altstadt
1584024990 McFIT Köln-Sülz
1587593330 McFIT Leipzig-Zentrum
1632519320 McFIT Bonn-Zentrum
1613588770 McFIT Gießen
1613589280 McFIT Bergisch Gladbach
1613589110 McFIT Leverkusen
1613591080 McFIT Trier
1613967360 McFIT Dresden
1640035820 McFIT Aschaffenburg
1653203780 McFIT Darmstadt
1654413930 McFIT Frankfurt Griesheim
1641290300 McFIT Frankfurt Fechenheim
1655280450 McFIT Frankfurt-Innenstadt
1655147880 McFIT Neuwied
1637935670 McFIT Cornellá
1638539800 McFIT Hospitalet de Llobregat
1637686410 McFIT Barcelona - Universitat
1639727710 McFIT Viladecans
1674651890 McFIT Hanau
1674650740 McFIT Kaiserslautern
1674650850 McFIT Ludwigshafen
1674652050 McFIT Mannheim-Almenhof
1674652490 McFIT Mannheim-Käfertal
1674652800 McFIT Offenbach
1674653140 McFIT Hannover-Vahrenheide
1648594920 McFIT Rubí
1650915900 McFIT Barberá
1644240010 McFIT Terrassa
1643104690 McFIT Ripollet
1699736940 McFIT Saarbrücken
1699735820 McFIT Palma
1699734950 McFIT Mataró
1699735990 McFIT Mainz
1699736310 McFIT Neunkirchen
1699736490 McFIT Pforzheim
1699736840 McFIT Stuttgart-Mühlhausen
1724102500 McFIT Wiesbaden
1699737390 McFIT Hannover-Südstadt
1731066160 McFIT Alicante
1731068110 McFIT Murcia
1731068920 McFIT Sindelfingen
1731144220 McFIT Freiburg
1731333930 McFIT Stuttgart-Feuerbach
1731421430 McFIT Stuttgart-Mitte
1731766900 McFIT Tübingen
1731791930 McFIT Backnang
1751344120 McFIT Innsbruck
1751351510 McFIT Wien-Meidling
1772000160 McFIT Bayreuth
1777724860 McFIT Heilbronn
1777569150 McFIT Neu-Ulm
1777569990 McFIT Reutlingen
1777569060 McFIT Schweinfurt
1790336890 McFIT Würzburg
1774825240 McFIT Klagenfurt
1777567770 McFIT Graz-Gries
1767764730 McFIT Valencia - Amistad
1767762900 McFIT Valencia - Burjassot
1767759850 McFIT Granada
1767530910 McFIT Jerez
1799038410 McFIT Erlangen
1799035060 McFIT Nürnberg-Gostenhof
1799027410 McFIT Bruchsal
1799173150 McFIT Nürnberg-Mögeldorf
1805981150 McFIT Nürnberg-Gibitzenhof
1816185180 McFIT Nürnberg-Doos
1812014550 McFIT Wien-Leopoldstadt
1808922310 McFIT Wien-Floridsdorf
1798270570 McFIT Malaga
1798270040 McFIT Tomares
1798268850 McFIT Sevilla Este
1798268950 McFIT Sevilla - Santa Justa
1832285310 McFIT Augsburg-Göggingen
1832285460 McFIT Augsburg-Innenstadt
1832287070 McFIT Bamberg
1832285570 McFIT Halle
1832288510 McFIT Ingolstadt
1832288610 McFIT Regensburg-Reinhausen
1832288950 McFIT Wien-Neubau
1832290370 McFIT Wien-Favoriten
1858371680 McFIT Gijón
1858371760 McFIT Barakaldo
1858370290 McFIT A Coruña
1858372010 McFIT Vigo
1858373180 McFIT Kassel
1858373350 McFIT Kassel Nord
1882151370 McFIT München-Laim
1858374200 McFIT München-Schwabing
1879795550 McFIT München-Obergiesing
1858377100 McFIT München-Forstenried
1869778900 McFIT Wien-Donaustadt
1876562160 McFIT Wien-Lugnercity
1877858840 McFIT Dresden-Seidnitz
1897087250 McFIT Chemnitz
1897099150 McFIT Erfurt
1897099400 McFIT Gera
1897099900 McFIT Zwickau
1897103300 McFIT Wien-Wienerberg
1928879790 McFIT Zaragoza Delicias
1933110180 McFIT - Torrejón On Plaza
1933193320 McFIT Barcelona - Lesseps
2919955190 McFIT Graz-Center West
3119807980 McFIT Rosenheim
3240624130 McFIT Logroño
JOHN & JANE'S
1211459930JOHN & JANE'S POWERBASE
1210593380 JOHN & JANE'S SOULBASE
JOHN REED
1414770410 JOHN REED Berlin Gesundbrunnen
1414215390 JOHN REED Berlin Kreuzberg
1404492860 JOHN REED Berlin Prenzlauer Berg
1613587690 JOHN REED Bonn
1642026390 JOHN REED Club Dresden
1511018920 JOHN REED Club Düsseldorf Bilk
1210252920 JOHN REED Club Essen Rüttenscheid
1217496130 JOHN REED Club Hamburg Harburg
1246330520 JOHN REED Club Hamburg Wandsbek
1210250030 JOHN REED Club Kiel Altstadt
1210429940 JOHN REED Club Mannheim
1897103860 JOHN REED Dortmund Gartenstadt
1518062010 JOHN REED Düsseldorf Friedrichstadt
1897098610 JOHN REED Erfurt
1300470920JOHN REED Koblenz
1584024160 JOHN REED Leipzig
3068946560 JOHN REED Metropol Istanbul
1332683490 JOHN REED Moers
1414810010 JOHN REED Potsdam
1721954170 JOHN REED Salzburg
1210025090 JOHN REED Womens Club Prenzlauer Berg
1565411920 JOHN REED Wuppertal
1210592500 JOHN REED Zürich
1211022120 John Reed Augsburg
1211306330John Reed Hannover
1211588620 John Reed Regensburg
HIGH5
2895769640 High5 Berlin Mitte
2934311450 High5 Bremen-Altstadt
2932255110 High5 Düren
2917835990 High5 Fulda-Innenstadt
2935440040 High5 Hamburg - Hohenfelde
2926023410 High5 Kaiserslautern-Innenst.
2933636030 High5 Kleve
2926788630 High5 Linz-Innenstadt
2934770750 High5 Lübeck
2920588880 High5 Mainz-Neustadt
2916934740 High5 Wien-Simmering
2921886310 High5 Worms
2917397480 High5 Würzburg-Lengfeld
1210533690 Linz Lenaupark
Sehr schön - Vielen Dank!
Immer gerne :)
Vorschlag: Pro Widget zwei Studios. Den Parameter dann vielleicht einfach komma- oder semikolonsepariert, wenn nur eine ID drin steht Ansicht wie bisher, sonst zwei übereinander. Dann können die mit mehrere Studios im Umkreis entscheiden, welches leerer ist.
Sehr cool. Benötige das unbedingt für John Reed. Die ID hab ich gefunden, aber woher bekommst du diese Daten bzw Links?
const url = 'https://rsg-group.api.magicline.com/connect/v1/studio?studioTags=MCFIT-2DBEBDE87C264635B943F583D13156C0'
Thanks :)
Sehr cool. Benötige das unbedingt für John Reed. Die ID hab ich gefunden, aber woher bekommst du diese Daten bzw Links?
John Reed kann ich mich gleich mal dransetzen, hab in zwei Stunden feierabend. Dürfte recht einfach sein das umzumodellieren.
Super Widget-Skript👍. Mehr davon, z. B. für FitX 🙏🏽😊
Ich biete dann mal John Reed Fitness Alle McFit-angehörigen Ketten (McFit, John Reed, JOHN & JANE's, High5): eopo/mcfit_chain_capacity_widget.js
@martinbackes Die Links hab ich reverse-engineered aus deren Website. Hab den Datenverkehr und den Quellcode angeschaut. Müsstest für John Reed nochmal extra machen. Ich hab grad viel Uni-Stuff am Hut, aber werd mir FitX und John Reed auch Mal bei Gelegenheit anschauen.
Bzw. @eopo Haha nice im selben Moment gepostet :D
FitnessFirst: https://gist.github.com/eopo/9344584035f487db0e229d655bdb39c4
FitX: https://gist.github.com/eopo/aedaf03f1f27a0c9c02f4974f3f4c9ba
McFit, John Reed, JOHN & JANE's, High5: https://gist.github.com/eopo/b0df56edbfc0df816adbf4a54047adbf
Moin!
Gibt es auch für das Fitnessstudio Elan eine solche Auslastungsgrenze? Kannst Du da mal nachschauen? https://elan-fitness.de/
Vielen Dank!
@eopo mega! thanks 💯
UPDATED VERSION 1.1
- Added support for other rsg group gyms' names and added their ids to the list
Moin!
Gibt es auch für das Fitnessstudio Elan eine solche Auslastungsgrenze? Kannst Du da mal nachschauen? https://elan-fitness.de/Vielen Dank!
Ich habs mir kurz Mal angeschaut, aber nichts gefunden. Die bieten ja scheinbar auch keine Auslastung-Anzeige auf ihrer Website an.
Bei den großen Ketten wie RSG, FitX und FitnessFirst wars relativ einfach an deren API zu kommen, weil sie es auf der Website selbst nutzen. (FitX hat da IMHO die am einfachsten auszulesende xD)
Oder hab ich so ne Unterseite einfach übersehen, wenn ja schick gerne hier den Link rein und ich schaus mir nochmal genauer an.
Hallo, danke für Deine Arbeit. Was bei mir aber nicht funktioniert ist eine Aktualisierung der Werte, muss da noch etwas wo eingestellt werden?
@Max82BLN Eigentlich nicht, das Widget wird immer von Scriptable getriggered, sobald es zu sehen ist. Du müsstest eventuell aber Scriptable die Erlaubnis für Hintergrundaktualisierungen geben.
Ansonsten einfach Mal das iPhone neu starten.
(FitX hat da IMHO die am einfachsten auszulesende xD)
Das soll wohl ein Witz sein? xD Am schönsten bleibt eigentlich Clever Fit, deren API liefert JSON, wobei der eigentliche content als HTML drin ist ...
@eopo hahaha xD Ne is mein ernst, bevor ich gesehen hatte, dass du FitX schon fertig hast, hab ich mir das angeschaut und es iwie innerhalb von 30 Sekunden gefunden. CleverFit is aber dann echt king, hab ich mir aber auch ned angeguckt! :D
Problem bei der FitX-API ist imo dass das JSON relativ seltsam escaped ist und dann nochmal in ein Array gepackt ist. Hat mich eine längere Zeit und Hilfe von anderen gekostet, das zu Parsen.
Oh ja kenn ich. Hab grade bei der Arbeit auch so ne JSON, die eigenartig erstellt wurde und hock auch schon ewig dran.
Wäre es denn möglich, das für FitStar anzupassen? https://www.fit-star.de/
Ich schaus mir nach der Arbeit heute Mal an. Denke aber auf den ersten Blick, dass es machbar ist.
Edit: Direkt gefunden, die ganzen Auslastungen stehen im HTML, solte also ähnlich wie bei FitX auch gehen. Ich mach mich später Mal dran ;)
Das ist mega wäre super wenn es auch für xtrafit umzusetzen wäre. Wenn ich dir irgendwie helfen kann gib gerne Bescheid
@screamer3003 Got you covered - Einmal XTRAFIT für dich https://gist.github.com/eopo/f0dc692f23e2373000df6134b7b4e4e0
@masselmello warst du mit FitStar schon weitergekommen? So wie es scheint liefert der Server das JSON für die Auslastung im HTML festgebacken als Script-Element ...
Ja genau so hab ich das auch gesehen. Ich komm heute aber nicht mehr dazu. Saß bis eben an nem Unreal Engine Projekt für die Uni. Morgen dann. :/
(FitX hat da IMHO die am einfachsten auszulesende xD)
Das soll wohl ein Witz sein? xD Am schönsten bleibt eigentlich Clever Fit, deren API liefert JSON, wobei der eigentliche content als HTML drin ist ...
Gibt es hierfür ein fertiges Script für Scriptable? Optimalerweise mit der Bestimmung des Ortes als „Parameter“ im Widget 😬
Danke euch vorab, mega Arbeit!!
@SmartHomeGuy Für CleverFit nicht, weil die API scheiße ist. Das ist mir zu viel Aufwand. Sorry :/
iOS Widget to display the current capacity of McFit, JOHN REED, HIGH5 and JOHN & JANE's gyms (RSG Group)
Small code snippet to achieve a Widget in Scriptable that shows the current capacity of your local McFit, John Reed and High5 gyms and looks like this:
About
I built this widget as a little side project so please understand that I can not make it compatible with every gym that exists on my own.
But feel free to fork it and build versions for other gyms and tell me about it, I will link them here.
Shameless plug :D Follow me on social media and check out my website:
Twitter
Instagram
www.knupfer.tech
Edit: Special thanks to @eopo , who built forks for FitX and FitnessFirst. Check out his repos for these scripts:
FitnessFirst: https://gist.github.com/eopo/9344584035f487db0e229d655bdb39c4
FitX: https://gist.github.com/eopo/aedaf03f1f27a0c9c02f4974f3f4c9ba