Garmin Connectでこれまでのすべてのアクティビティを一括ダウンロードする

Garmin Connectがサイバー攻撃を受けてダウンした。

ランサムウェアにやられたらしい、ということで最悪の場合、これまでの記録が消えてしまう可能性がある。

幸いにもとりあえず復旧したようなので、これまでの全アクティビティをローカルにバックアップした。

環境

以下の作業はGoogle Chrome 83(Ubuntu 18.04)で行った。

WindowsでもChromeなら同じはず。

事前準備

サイトの設定で「ポップアップとリダイレクト」を「許可」に設定しておく。

その他、ダウンロードの保存先を毎回尋ねる設定にしている場合は、ダウンロード先を固定にしておくと放置できる。

手順

まずGarmin Connectのアクティビティ一覧ページ(https://connect.garmin.com/modern/activities)にアクセス。

画面右側のアクティビティ一覧を一番下までスクロールし、アクティビティへのリンクを全部表示させる。

スクロールしたら[Ctrl] + [Shift] + [J]でJavaScriptコンソールを表示し、以下のコマンドをコピー&ペーストして[Enter]。

document.querySelectorAll('a[href*=\'/modern/activity/\'').forEach((e, i)=>{
  const url = e.href.replace('/modern/activity/', '/modern/proxy/download-service/files/activity/');

  setTimeout(() => {
    window.open(url, '_blank');
  }, i * 5000);
})

5秒ごとに新しいウィンドウが開かれて各アクティビティにおいて「オリジナルをエクスポート」した際にダウンロードできるzipファイルがダウンロードされるので、しばらく待つ。

一応、ダウンロードを5秒間隔にしてあまりに高負荷にならないようにしているが、復旧したばかりのGarminのサーバに負荷をかける行為なので、うまく行かなかった時はしばらく待ったほうが良い。

完了後、下記コマンドをJavaScriptコンソールにコピペ→[Enter]した際に表示される数字を、ダウンロードしたzipファイルの数と比較して、一致していればダウンロード完了。

document.querySelectorAll('a[href*=\'/modern/activity/\'').length

なおダウンロードした各zipファイルにはfitファイルが1つ入っているだけなので、Stravaなど他のサービスにインポートする際は展開すればOK。