RunKeeper tevékenységek automatikus szinkronizálása saját Workout-Tracker példánnyal

Ha RunKeepert (ASICS) használtál futás, séta vagy kerékpározás rögzítésére, de szeretnél áttérni egy saját magad által üzemeltetett megoldásra, ez a leírás neked szól. Megmutatom, hogyan szinkronizálhatod automatikusan a RunKeeper tevékenységeidet egy Workout-Tracker példányba.

Mi az a Workout-Tracker?

A Workout-Tracker egy nyílt forráskódú, saját kezelésű webalkalmazás személyes fitnesztevékenységek követésére. Támogatja a GPX, FIT és TCX fájlformátumokat, részletes statisztikákat biztosít térképekkel, kilométerenkénti bontással, szintprofilokkal, valamint pulzus- és kadencia adatokkal. Nagyon egyszerű és kevés erőforrást igényel (Go + SQLite) és tökéletesen fut Dockerben.

Workout-Tracker műszerfal naptárnézettel és összesítőkkel
Workout-Tracker műszerfal — tevékenység naptár, személyes rekordok és legutóbbi edzések
Edzés részletei GPS útvonal térképpel és statisztikákkal
Edzés részletei — GPS útvonal térkép, statisztikák, kilométerenkénti bontás és szint diagram

Workout-Tracker futtatása Dockerrel

A Workout-Tracker indulása egyszerű. Íme egy minta docker-compose.yml:

version: '3'

services:
  workout-tracker:
    image: ghcr.io/jovandeginste/workout-tracker:latest
    container_name: workout-tracker
    restart: unless-stopped
    ports:
      - 8080:8080
    environment:
      - WT_BIND=[::]:8080
      - WT_JWT_ENCRYPTION_KEY=change-this-to-a-random-secret
      - WT_LOGGING=true
    volumes:
      - ./database.db:/data/database.db
      - ./imports:/home/workout/imports

A WT_JWT_ENCRYPTION_KEY a munkamenetek titkosításához kell. Generálj hozzá egy véletlenszerű karaktersorozatot. A ./imports mappába GPX fájlokat dobva az alkalmazás automatikusan importálja azokat — a beépített feldolgozó körülbelül 60 másodpercenként ellenőrzi ezt a könyvtárat.

A probléma: Adatok kinyerése RunKeeperből

A RunKeeper (ma az ASICS tulajdona) lehetővé teszi az adatok manuális exportálását az Export Data oldalon, ami egy ZIP fájlt ad, egyedi GPX fájlokkal és egy CSV összesítővel. Ez működik, de manuális folyamat — be kell jelentkezni, exportálni, várni az emailre, letölteni, kicsomagolni, majd feltölteni a Workout-Trackerbe.

A RunKeeper hivatalos Health Graph API-ját 2017 körül zárták le az új fejlesztők számára, így a hagyományos API hozzáférés nem elérhető.

A megoldás: A privát API visszafejtése

A RunKeeper mobilalkalmazás egy privát API-val kommunikál a fitnesskeeperapi.com címen. Ez az API még mindig aktív, és a hivatalos iOS és Android alkalmazások használják. A dpadgett/RunKeeper-export projekt visszafejtette ezt az API-t, és megmutatta, hogyan lehet kinyerni egy hosszú élettartamú Bearer tokent a mobilalkalmazásból.

Erre a felfedezésre építve készítettem egy Python szkriptet, amely:

  • Lekéri a tevékenységek UUID-it a privát API-ból
  • Letölti a részletes JSON adatokat GPS útvonallal, pulzussal és kadenciával
  • GPX formátumba konvertálja
  • Importálja a Workout-Trackerbe a REST API-n vagy az auto-import mappán keresztül

Hogyan szerezd meg a Bearer tokent

iOS-en (Ajánlott: Proxyman)

Nincs szükség számítógépre — minden az iPhone-odon fut:

  1. Töltsd le a Proxyman alkalmazást az App Store-ból (ingyenes)
  2. Nyisd meg a Proxyman → „Start Monitoring” — létrehoz egy helyi VPN-t a telefonodon
  3. Telepítsd a CA tanúsítványt, ha kéri (Beállítások → Profil → Telepítés → Engedélyezés a Tanúsítvány bizalom beállításokban)
  4. Nyisd meg a RunKeeper alkalmazást, és frissítsd a hírfolyamot vagy rögzíts egy edzést
  5. Térj vissza a Proxymanbe, keresd meg a fitnesskeeperapi.com kéréseket
  6. Koppints bármelyik kérésre → Headers → keresd az Authorization: Bearer <token> sort
  7. Másold ki a token értékét
  8. Állítsd le a megfigyelést Proxymanben

Androidon (mitmproxy)

  1. Telepítsd az Android Studio-t, és hozz létre egy virtuális eszközt (Google Play nélküli rendszerképet használj)
  2. Telepítsd a mitmproxy-t a számítógépedre
  3. Állítsd be az emulátort, hogy megbízzon a mitmproxy CA tanúsítványában
  4. Telepítsd a RunKeeper APK-t az emulátorra (APKPure-ról vagy hasonlóról)
  5. Állítsd be az emulátor WiFi proxy-ját a mitmproxy példányodra
  6. Jelentkezz be a RunKeeperbe az emulátoron
  7. A mitmproxy-ben keresd a fitnesskeeperapi.com kéréseket
  8. Másold ki az Authorization: Bearer fejléc értékét

A szinkronizációs szkript

A szkript elérhető GitHub-on egyetlen Python fájlként: runkeeper-sync.py

Működés — ASCII folyamatábra

┌─────────────────────┐      ┌───────────────────────┐
│   RunKeeper App      │      │  fitnesskeeperapi.com │
│   (iOS/Android)      │─────▶│  (Privát Mobil API)   │
└─────────────────────┘      └───────────┬───────────┘
                                         │ GET /getActivityUUIDs
                                         │ POST /activities
                                         │ Auth: Bearer <token>
                                         ▼
                               ┌─────────────────────┐
                               │  runkeeper-sync.py   │
                               │  - Új UUID-k lekérése│
                               │  - JSON letöltése    │
                               │  - GPX konvertálás   │
                               │  - Importálás        │
                               └──────────┬──────────┘
                                          │ GPX fájl vagy API hívás
                                          ▼
                               ┌─────────────────────┐
                               │  Workout-Tracker     │
                               │  (Docker konténer)   │
                               │  :8080-as porton     │
                               └─────────────────────┘

Telepítés

A szkript Python 3-at és a requests könyvtárat igényli:

sudo apt-get install -y python3-requests

Hozz létre egy konfigurációs fájlt ~/.runkeeper-sync/config.json néven:

{
    "email": "your-runkeeper-email@example.com",
    "token": "your-bearer-token-here",
    "workout_tracker_url": "http://localhost:8080",
    "workout_tracker_api_key": "your-workout-tracker-api-key",
    "import_method": "api"
}

Ezt a konfigurációt interaktívan is létrehozhatod:

python3 runkeeper-sync.py --setup

API kulcs szerzése a Workout-Trackerben

Jelentkezz be a Workout-Tracker webes felületére, menj a profilodra, és ott találod az API kulcsot. Győződj meg róla, hogy az „API Active” be van kapcsolva a profilbeállításokban.

A szinkronizáció futtatása

# Összes előzmény importálása (egyszeri)
python3 runkeeper-sync.py --bulk

# Növekményes szinkronizáció (csak új tevékenységek)
python3 runkeeper-sync.py --once

# Teszt importálás nélkül
python3 runkeeper-sync.py --dry-run

Automatikus óránkénti szinkron (Cron)

Az automatikus óránkénti szinkronizációhoz add hozzá a crontab-odhoz:

0 * * * * /usr/bin/python3 /path/to/runkeeper-sync.py --once >> /var/log/runkeeper-sync.log 2>&1

Vagy használd a szkript beépített cron telepítőjét:

python3 runkeeper-sync.py --install-cron

Hogyan működik a deduplikáció

A szkript okosan elkerüli a duplikált edzések importálását:

  • Dátum alapú dedup: Letöltés előtt lekéri a Workout-Tracker összes meglévő edzésdátumát, és kihagyja azokat, amelyek már megegyeznek valamelyik kezdési időponttal
  • UUID követés: Nyilvántartja a már feldolgozott UUID-ket egy állapotfájlban, így ha a szkript megszakad, onnan folytathatja, ahol abbahagyta
  • API szintű dedup: Maga a Workout-Tracker import API is elutasítja az azonos kezdési időpontú duplikátumokat

Mi a helyzet a GPS nélküli tevékenységekkel?

A szkript csak azokat a tevékenységeket importálja, amelyek rendelkeznek GPS útvonal adatokkal. A manuálisan rögzített tevékenységek (futópad, erősítés, stb.) nem konvertálhatók GPX-be, ezeket a szkript kihagyja. Az UUID-jeiket eltárolja, így a későbbi futtatások során nem kerülnek újra feldolgozásra.

A teljes szkript

A teljes forráskód elérhető az alábbi tárolóban. Egyetlen Python fájl (~800 sor) az összes funkcióval:

  • API kommunikáció a fitnesskeeperapi.com-mal
  • GPX konvertálás pulzussal és kadenciával
  • Kétféle importálási mód (REST API vagy auto-import mappa)
  • Növekményes és teljes szinkronizációs mód
  • Száraz futtatás teszteléshez
  • Állapotmegőrzés a folytathatóságért
  • Interaktív telepítő varázsló

Letöltés: https://blog.xorp.hu/wp-content/uploads/2026/07/runkeeper-sync.py

Fontos biztonsági megjegyzések

  • A Bearer token hozzáférést ad a RunKeeper adataidhoz — kezeld úgy, mint egy jelszót
  • Tárold jelszókezelőben, ne a szkript fájlban
  • Használj környezeti változókat vagy külön konfigurációs fájlt korlátozott jogosultságokkal (chmod 600)
  • A token hosszú élettartamúnak tűnik, de ha érvénytelenné válik, extractáld újra a mobilalkalmazásból
  • A fitnesskeeperapi.com egy privát API — az ASICS bármikor megváltoztathatja vagy leállíthatja

Összegzés

Ezzel a beállítással a RunKeeper tevékenységeid automatikusan áramlanak a saját Workout-Tracker példányodba, manuális beavatkozás nélkül. Beállítás után az új edzések körülbelül egy órán belül megjelennek — teljesen automatikusan. Ugyanez a megközelítés más saját üzemeltetésű fitneszkövetőkhöz is adaptálható, amelyek támogatják a GPX importot.

RunKeeper tevékenységek automatikus szinkronizálása saját Workout-Tracker példánnyal” bejegyzéshez egy hozzászólás

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük