|
17 | 17 | <p>I finally extracted out the existing personal best for exercises as well, and added a new page in the appsheet to display them.</p>
|
18 | 18 | <p>This one was slight tricky to implement because there did not seem to be an API which fetches all exercise details, so on trial and error, when I selected an exercise to log it in the app, it seemed to be calling an API <code>/api/v2/fitnessplanner/exercisesForLogging</code> with corresponding exerciseId under <code>exerciseIds</code> list parameter. I generated ~2-300 IDs nearby that ID and passed in the API.</p>
|
19 | 19 | <p>Earlier I was trying with ~500 IDs but the API kept crashing, and even with 300 IDs, some of the intermediate IDs required removal (God knows why), and finally I got a JSON which looked like this:</p>
|
20 |
| -<!-- raw HTML omitted --> |
| 20 | +<details> |
| 21 | + <summary>JSON</summary> |
| 22 | + <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{ |
| 23 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;tenantId&#34;</span>: <span style="color:#ae81ff">1</span>, |
| 24 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;userId&#34;</span>: <span style="color:#e6db74">&#34;89760760&#34;</span>, |
| 25 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;exerciseId&#34;</span>: <span style="color:#ae81ff">1555609163</span>, |
| 26 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;herculesExerciseId&#34;</span>: <span style="color:#e6db74">&#34;602621587d678600085608e2&#34;</span>, |
| 27 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;executionType&#34;</span>: <span style="color:#e6db74">&#34;TIMED&#34;</span>, |
| 28 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;meta&#34;</span>: { |
| 29 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;weightUnit&#34;</span>: <span style="color:#e6db74">&#34;KG&#34;</span>, |
| 30 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;durationUnit&#34;</span>: <span style="color:#e6db74">&#34;SECOND&#34;</span>, |
| 31 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;distanceUnit&#34;</span>: <span style="color:#e6db74">&#34;KILOMETRE&#34;</span> |
| 32 | +</span></span><span style="display:flex;"><span> }, |
| 33 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;personalBest&#34;</span>: { |
| 34 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;id&#34;</span>: <span style="color:#ae81ff">791910</span>, |
| 35 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;createdOn&#34;</span>: <span style="color:#e6db74">&#34;2023-02-12T08:38:49.000+00:00&#34;</span>, |
| 36 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;lastModifiedOn&#34;</span>: <span style="color:#e6db74">&#34;2023-02-12T08:38:49.000+00:00&#34;</span>, |
| 37 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;createdBy&#34;</span>: <span style="color:#e6db74">&#34;system&#34;</span>, |
| 38 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;version&#34;</span>: <span style="color:#ae81ff">0</span>, |
| 39 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;tenantId&#34;</span>: <span style="color:#ae81ff">1</span>, |
| 40 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;userId&#34;</span>: <span style="color:#e6db74">&#34;89760760&#34;</span>, |
| 41 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;herculesExerciseId&#34;</span>: <span style="color:#e6db74">&#34;602621587d678600085608e2&#34;</span>, |
| 42 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;userFitnessLevel&#34;</span>: <span style="color:#e6db74">&#34;INTERMEDIATE&#34;</span>, |
| 43 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;duration&#34;</span>: <span style="color:#ae81ff">5400</span>, |
| 44 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;distance&#34;</span>: <span style="color:#ae81ff">11.24</span>, |
| 45 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;fromTime&#34;</span>: <span style="color:#e6db74">&#34;2023-02-12T08:38:49Z&#34;</span> |
| 46 | +</span></span><span style="display:flex;"><span> }, |
| 47 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;previousBest&#34;</span>: { |
| 48 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;duration&#34;</span>: <span style="color:#ae81ff">1860</span>, |
| 49 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;distance&#34;</span>: <span style="color:#ae81ff">4.04</span> |
| 50 | +</span></span><span style="display:flex;"><span> }, |
| 51 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;thumbnailUrl&#34;</span>: <span style="color:#e6db74">&#34;hercules/production/assets/movements/images/CROSS_TRAINER_v1631535828209_aa25d179-c9fa-4570-acc7-3d7a489b7ee9.jpg&#34;</span>, |
| 52 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;exerciseName&#34;</span>: <span style="color:#e6db74">&#34;Cross Trainer&#34;</span>, |
| 53 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;exerciseType&#34;</span>: <span style="color:#e6db74">&#34;DISTANCE&#34;</span>, |
| 54 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;lateral&#34;</span>: <span style="color:#e6db74">&#34;BILATERAL&#34;</span>, |
| 55 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;templateLog&#34;</span>: { |
| 56 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;sequence&#34;</span>: <span style="color:#66d9ef">null</span>, |
| 57 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;unilateralDirection&#34;</span>: <span style="color:#66d9ef">null</span>, |
| 58 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;weight&#34;</span>: <span style="color:#66d9ef">null</span>, |
| 59 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;duration&#34;</span>: <span style="color:#66d9ef">null</span>, |
| 60 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;count&#34;</span>: <span style="color:#66d9ef">null</span>, |
| 61 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;distance&#34;</span>: <span style="color:#66d9ef">null</span>, |
| 62 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;value1&#34;</span>: <span style="color:#e6db74">&#34;4.04&#34;</span>, |
| 63 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;unit1&#34;</span>: <span style="color:#e6db74">&#34;kms&#34;</span>, |
| 64 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;separator&#34;</span>: <span style="color:#e6db74">&#34;x&#34;</span>, |
| 65 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;value2&#34;</span>: <span style="color:#e6db74">&#34;31&#34;</span>, |
| 66 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;unit2&#34;</span>: <span style="color:#e6db74">&#34;mins&#34;</span> |
| 67 | +</span></span><span style="display:flex;"><span> }, |
| 68 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;fpExecutionLogs&#34;</span>: [ |
| 69 | +</span></span><span style="display:flex;"><span> { |
| 70 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;sequence&#34;</span>: <span style="color:#66d9ef">null</span>, |
| 71 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;unilateralDirection&#34;</span>: <span style="color:#66d9ef">null</span>, |
| 72 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;weight&#34;</span>: <span style="color:#66d9ef">null</span>, |
| 73 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;duration&#34;</span>: <span style="color:#ae81ff">1860</span>, |
| 74 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;count&#34;</span>: <span style="color:#66d9ef">null</span>, |
| 75 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;distance&#34;</span>: <span style="color:#ae81ff">4.04</span>, |
| 76 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;value1&#34;</span>: <span style="color:#e6db74">&#34;4.04&#34;</span>, |
| 77 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;unit1&#34;</span>: <span style="color:#e6db74">&#34;kms&#34;</span>, |
| 78 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;separator&#34;</span>: <span style="color:#e6db74">&#34;/&#34;</span>, |
| 79 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;value2&#34;</span>: <span style="color:#e6db74">&#34;31&#34;</span>, |
| 80 | +</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;unit2&#34;</span>: <span style="color:#e6db74">&#34;mins&#34;</span> |
| 81 | +</span></span><span style="display:flex;"><span> } |
| 82 | +</span></span><span style="display:flex;"><span> ] |
| 83 | +</span></span><span style="display:flex;"><span>} |
| 84 | +</span></span></code></pre></div> |
| 85 | +</details> |
21 | 86 | <p>Most of the parameters are self explanatory, rest I found by analyzing some of the JSONs manually. The analysis script using which I finally created a CSV is <a href="./analysis.py">analysis.py</a>, and the script to extract those JSONs is <a href="./cult_data_exercises.py">cult_data_exercises.py</a>.</p>
|
22 | 87 | <p>Finally, it looks in my app like this:</p>
|
23 | 88 | <p><img src="images/image.png" alt="personal bests"></p>
|
|
0 commit comments