<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Running-Page on 印记</title>
    <link>https://yinji.org/tags/running-page/</link>
    <description>Recent content in Running-Page on 印记</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    
      <managingEditor>me@yinji.org (青山)</managingEditor>
    
    
      <webMaster>me@yinji.org (青山)</webMaster>
    
    
    <copyright>Copyright © 2018-2026, huhexian.</copyright>
    
    
    <lastBuildDate>Sun, 24 Aug 2025 00:00:00 +0000</lastBuildDate>
    
    
    <atom:link href="https://yinji.org/tags/running-page/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Cycling Page</title>
      <link>https://yinji.org/cycling-page.html/</link>
      <pubDate>Sun, 24 Aug 2025 00:00:00 +0000</pubDate><author>me@yinji.org (青山)</author>
      <guid>https://yinji.org/cycling-page.html/</guid>
      <description>&lt;p&gt;&lt;figure&#xA;    class=&#34;image-caption image-zoom-container&#34;&#xA;&gt;&#xA;    &#xA;    &lt;input&#xA;        type=&#34;checkbox&#34;&#xA;        id=&#34;img-85bbfd9e&#34;&#xA;        class=&#34;image-zoom-toggle&#34;&#xA;        aria-label=&#34;放大图片：&#34;&#xA;    /&gt;&#xA;    &lt;label&#xA;        for=&#34;img-85bbfd9e&#34;&#xA;        class=&#34;image-zoom-label&#34;&#xA;    &gt;&#xA;        &lt;img&#xA;            src=&#34;https://img.yinji.org/WX20250824-213928@2x.webp&#34;&#xA;            alt=&#34;&#34;&#xA;            loading=&#34;lazy&#34;&#xA;            class=&#34;zoomable-image&#34;&#xA;        /&gt;&#xA;    &lt;/label&gt;&#xA;    &#xA;    &lt;label&#xA;        for=&#34;img-85bbfd9e&#34;&#xA;        class=&#34;image-zoom-overlay&#34;&#xA;    &gt;&#xA;        &lt;img&#xA;            src=&#34;https://img.yinji.org/WX20250824-213928@2x.webp&#34;&#xA;            alt=&#34;&#34;&#xA;            class=&#34;zoomable-image&#34;&#xA;        /&gt;&#xA;    &lt;/label&gt;&#xA;    &#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;yihong 开源的 &lt;a href=&#34;https://github.com/yihong0618/running_page/&#34; rel=&#34;noopener noreferrer&#34;&gt;Running Page&lt;/a&gt; 项目特别有意思，他本人是一个跑步爱好者，从他的&lt;a href=&#34;https://yihong.run/&#34; rel=&#34;noopener noreferrer&#34;&gt;页面&lt;/a&gt;数据可以了解到，跑步 14 年，总里程 12737km，相当于 0.3 个赤道。&lt;/p&gt;&#xA;&lt;p&gt;我不喜欢跑步，体力不太行，去年年底买了&lt;a href=&#34;https://yinji.org/5386.html&#34;&gt;公路自行车&lt;/a&gt;，上半年骑了不少，后来&lt;a href=&#34;https://yinji.org/5548.html&#34;&gt;搬家&lt;/a&gt;买了二手电动车，自行车时不时就被闲置，以及 6 月买的一块 iGPSORT 码表，如何再次提起骑行的兴趣，部署一个 &lt;del&gt;Running&lt;/del&gt; Cycling Page 或许是不错的选择。&lt;/p&gt;&#xA;&lt;p&gt;刚买自行车那会儿就想折腾一番，想着直接从 Apple Watch 上同步数据，奈何苹果比较封闭，需要手动导出，后来看到小孙同学曲线救国的方法，将 iGPSPORT 的数据同步到 Strava，再通过 yihong 的代码获取 Strava 数据，最后部署静态网站。防止以后忘记，把过程记录下来。&lt;/p&gt;&#xA;&lt;p&gt;第一步，Fork 仓库，&lt;a href=&#34;https://cyc.guoqi.dev/&#34; rel=&#34;noopener noreferrer&#34;&gt;小孙同学&lt;/a&gt;也是骑公路车，我直接 Fork 他的仓库，在上面修改一些数据。&lt;/p&gt;&#xA;&lt;p&gt;第二步，获取 Strava 的 Token 和 Code。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&#xA;    class=&#34;image-caption image-zoom-container&#34;&#xA;&gt;&#xA;    &#xA;    &lt;input&#xA;        type=&#34;checkbox&#34;&#xA;        id=&#34;img-d5ea8c0a&#34;&#xA;        class=&#34;image-zoom-toggle&#34;&#xA;        aria-label=&#34;放大图片：&#34;&#xA;    /&gt;&#xA;    &lt;label&#xA;        for=&#34;img-d5ea8c0a&#34;&#xA;        class=&#34;image-zoom-label&#34;&#xA;    &gt;&#xA;        &lt;img&#xA;            src=&#34;https://img.yinji.org/WX20250824-211330@2x.png&#34;&#xA;            alt=&#34;&#34;&#xA;            loading=&#34;lazy&#34;&#xA;            class=&#34;zoomable-image&#34;&#xA;        /&gt;&#xA;    &lt;/label&gt;&#xA;    &#xA;    &lt;label&#xA;        for=&#34;img-d5ea8c0a&#34;&#xA;        class=&#34;image-zoom-overlay&#34;&#xA;    &gt;&#xA;        &lt;img&#xA;            src=&#34;https://img.yinji.org/WX20250824-211330@2x.png&#34;&#xA;            alt=&#34;&#34;&#xA;            class=&#34;zoomable-image&#34;&#xA;        /&gt;&#xA;    &lt;/label&gt;&#xA;    &#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;主要是 Client ID、Client Secret 和 Refresh Token，前两个直接从 &lt;a href=&#34;http://developers.strava.com/&#34; rel=&#34;noopener noreferrer&#34;&gt;Strava Developers&lt;/a&gt; 创建应用再获取，第三个有点复杂。&lt;/p&gt;&#xA;&lt;p&gt;首先需要通过下方的链接获取 Code，要替换成自己的 Client ID。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;https://www.strava.com/oauth/authorize?client_id=${your_id}&amp;amp;response_type=code&amp;amp;redirect_uri=http://localhost/exchange_token&amp;amp;approval_prompt=force&amp;amp;scope=read_all,profile:read_all,activity:read_all,profile:write,activity:write&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;接着在终端里输入代码，获取最后需要的 Refresh Token，也是要替换相应内容。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -X POST https://www.strava.com/oauth/token \&#xA;-F client_id=${Your Client ID} \&#xA;-F client_secret=${Your Client Secret} \&#xA;-F code=${Your Code} \&#xA;-F grant_type=authorization_code&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;最后把获取到的三项内容，添加到 Repository secrets 中。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&#xA;    class=&#34;image-caption image-zoom-container&#34;&#xA;&gt;&#xA;    &#xA;    &lt;input&#xA;        type=&#34;checkbox&#34;&#xA;        id=&#34;img-c3e07ca8&#34;&#xA;        class=&#34;image-zoom-toggle&#34;&#xA;        aria-label=&#34;放大图片：&#34;&#xA;    /&gt;&#xA;    &lt;label&#xA;        for=&#34;img-c3e07ca8&#34;&#xA;        class=&#34;image-zoom-label&#34;&#xA;    &gt;&#xA;        &lt;img&#xA;            src=&#34;https://img.yinji.org/1756041873870.jpg&#34;&#xA;            alt=&#34;&#34;&#xA;            loading=&#34;lazy&#34;&#xA;            class=&#34;zoomable-image&#34;&#xA;        /&gt;&#xA;    &lt;/label&gt;&#xA;    &#xA;    &lt;label&#xA;        for=&#34;img-c3e07ca8&#34;&#xA;        class=&#34;image-zoom-overlay&#34;&#xA;    &gt;&#xA;        &lt;img&#xA;            src=&#34;https://img.yinji.org/1756041873870.jpg&#34;&#xA;            alt=&#34;&#34;&#xA;            class=&#34;zoomable-image&#34;&#xA;        /&gt;&#xA;    &lt;/label&gt;&#xA;    &#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;最主要的就是这几步，至于还有什么步骤我现在也忘了……yihong 原项目页面上有非常详细的教程，不过对于没什么 Code 基础的我来说还是需要费点时间。做完这些我就部署到了 Cloudflare Page 上，每天通过 GitHub Actions 同步 Strava 数据。&lt;/p&gt;&#xA;&lt;p&gt;7 月份下载使用 Strava，它只能同步最新的数据，考虑到 iGPSPORT 还有不少记录，加起来骑行里程也快 100km，不放上去觉得可惜了，幸好没有多少条，全部手动下载 gpx 文件，再导入到 Strava 上，最后总共骑行里程是 200km 左右，一点点的成就感油然而生。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://cycling.yinji.org&#34; rel=&#34;noopener noreferrer&#34;&gt;https://cycling.yinji.org&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;figure&#xA;    class=&#34;image-caption image-zoom-container&#34;&#xA;&gt;&#xA;    &#xA;    &lt;input&#xA;        type=&#34;checkbox&#34;&#xA;        id=&#34;img-85bbfd9e&#34;&#xA;        class=&#34;image-zoom-toggle&#34;&#xA;        aria-label=&#34;放大图片：&#34;&#xA;    /&gt;&#xA;    &lt;label&#xA;        for=&#34;img-85bbfd9e&#34;&#xA;        class=&#34;image-zoom-label&#34;&#xA;    &gt;&#xA;        &lt;img&#xA;            src=&#34;https://img.yinji.org/WX20250824-213928@2x.webp&#34;&#xA;            alt=&#34;&#34;&#xA;            loading=&#34;lazy&#34;&#xA;            class=&#34;zoomable-image&#34;&#xA;        /&gt;&#xA;    &lt;/label&gt;&#xA;    &#xA;    &lt;label&#xA;        for=&#34;img-85bbfd9e&#34;&#xA;        class=&#34;image-zoom-overlay&#34;&#xA;    &gt;&#xA;        &lt;img&#xA;            src=&#34;https://img.yinji.org/WX20250824-213928@2x.webp&#34;&#xA;            alt=&#34;&#34;&#xA;            class=&#34;zoomable-image&#34;&#xA;        /&gt;&#xA;    &lt;/label&gt;&#xA;    &#xA;    &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>