Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save masselmello/6d4f4c533b98b2550ee23a7a5e6c6cff to your computer and use it in GitHub Desktop.
Save masselmello/6d4f4c533b98b2550ee23a7a5e6c6cff to your computer and use it in GitHub Desktop.
iOS widget powered by the Scriptable app that shows the current capacity of your McFit gym (RSG group)
/**
* 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
Copy link
Author

masselmello commented Oct 22, 2020

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:
iPhone_mcfit

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

@masselmello
Copy link
Author

masselmello commented Oct 22, 2020

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.

mcfit tutorial

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

@kater100
Copy link

Sehr schön - Vielen Dank!

@masselmello
Copy link
Author

Immer gerne :)

@eopo
Copy link

eopo commented Oct 23, 2020

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.

@martinbackes
Copy link

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://www.mcfit.com/de/auslastung/antwort/request.json?tx_brastudioprofilesmcfitcom_brastudioprofiles%5BstudioId%5D=

const url = 'https://rsg-group.api.magicline.com/connect/v1/studio?studioTags=MCFIT-2DBEBDE87C264635B943F583D13156C0'

Thanks :)

@eopo
Copy link

eopo commented Oct 23, 2020

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.

@DSchumacher2104
Copy link

Super Widget-Skript👍. Mehr davon, z. B. für FitX 🙏🏽😊

@eopo
Copy link

eopo commented Oct 23, 2020

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

@masselmello
Copy link
Author

@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.

@masselmello
Copy link
Author

Bzw. @eopo Haha nice im selben Moment gepostet :D

@twobeer
Copy link

twobeer commented Oct 24, 2020

Moin!
Gibt es auch für das Fitnessstudio Elan eine solche Auslastungsgrenze? Kannst Du da mal nachschauen? https://elan-fitness.de/

Vielen Dank!

@martinbackes
Copy link

@eopo mega! thanks 💯

@masselmello
Copy link
Author

UPDATED VERSION 1.1

  • Added support for other rsg group gyms' names and added their ids to the list

@masselmello
Copy link
Author

Moin!
Gibt es auch für das Fitnessstudio Elan eine solche Auslastungsgrenze? Kannst Du da mal nachschauen? https://elan-fitness.de/

Vielen Dank!

@twobeer

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.

@Max82BLN
Copy link

Hallo, danke für Deine Arbeit. Was bei mir aber nicht funktioniert ist eine Aktualisierung der Werte, muss da noch etwas wo eingestellt werden?

@masselmello
Copy link
Author

@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.

@eopo
Copy link

eopo commented Oct 24, 2020

(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 ...

@masselmello
Copy link
Author

@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

@eopo
Copy link

eopo commented Oct 25, 2020

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.

@masselmello
Copy link
Author

masselmello commented Oct 26, 2020

Oh ja kenn ich. Hab grade bei der Arbeit auch so ne JSON, die eigenartig erstellt wurde und hock auch schon ewig dran.

@flodroid
Copy link

Wäre es denn möglich, das für FitStar anzupassen? https://www.fit-star.de/

@masselmello
Copy link
Author

masselmello commented Oct 26, 2020

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 ;)

@screamer3003
Copy link

Das ist mega wäre super wenn es auch für xtrafit umzusetzen wäre. Wenn ich dir irgendwie helfen kann gib gerne Bescheid

@eopo
Copy link

eopo commented Oct 26, 2020

@eopo
Copy link

eopo commented Oct 26, 2020

@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 ...

@masselmello
Copy link
Author

masselmello commented Oct 26, 2020

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. :/

@SmartHomeGuy
Copy link

(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!!

@eopo
Copy link

eopo commented Oct 27, 2020

@SmartHomeGuy Für CleverFit nicht, weil die API scheiße ist. Das ist mir zu viel Aufwand. Sorry :/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment