スポーツ履歴を自動記録する方法 (前編)

最終更新日

ツールを駆使します.手順は4段階くらいに分けられると思う.

  1. Twitter →IFTTT → Google Sheet の連携
  2. Google Sheet でデータを整形
  3. Google Sheet でグラフを描く
  4. Google Sheet → Twitter を作る

1 Tweet → IFTTT → G Sheet の連携

僕は毎週プールに行っていて,行ったら泳いだ距離を記録したい.でも毎回 Google Sheet を開いて値を入力するのは面倒くさい.でも僕は Twitter を使うのには抵抗ゼロだから,記録をツイートするなら簡単なんだよね.例えばこんなふうに.

最新の水泳記録です

毎回同じ形式でツイートすることが重要.僕の場合は 泳いだ距離[m]/所要時間[min] (~平均速さ[m/min]) 日付 YYYY/MM/DD + コメント + #swim の形式と決めてる.この形式でツイートすることの理由は後回しにしますね.

最後にハッシュタグ #swim を付けることの理由.それは IFTTT に実装されてる「ある人」が「あるハッシュタグ」をツイートしたら発火する,というトリガーを使うからです.IFTTTの設定はこんな感じ.

IFTTT でツイートを取得

自分のアカウントが特定のハッシュタグ付きでツイートしたら,そのツイートの 本文 URL ツイート日時 を所定の Google Sheet に記載する IFTTT アプリ.簡単ですね.

2 Google Sheet で情報整理

ツイートから取得した情報を Google Sheet に記入するわけだけど,記入するだけじゃ寂しい.どうせならグラフを書きたいよね.グラフを書くためにデータを少しだけ整形する関数を書きます.

ますは,IFTTTによって転載された生の状態はこれ.生の情報が書かれたシートの名前は Tweet としています.

本文と,URLと,日時

実際の所,C列の日時の情報は使ってない.なぜなら本文に書いてるから.泳いだその日にツイートすればいいんだけど,忘れて後日「そう言えば昨日はこれくらい泳ぎました」ってツイートすることもあるので,本文中の日付を記録しています.

…で,データの加工.別のシートを作って,こんなふうにしてます.

データ加工 (1段階目)

かなり複雑で嫌になるけど,A列にはこう書いてある.

=if(indirect("Tweet!"&address(row(),1),true)<>"",REGEXEXTRACT(indirect("Tweet!"&address(row(),1),true),"\d{4}/\d+/\d+"),"")

日本語で書くならこうなる.要するに日付を抜き出してる.

もし Tweet のシートのA列の,このセルと同じ行が空白でなければ,数字「4桁/1 - 2桁/1 - 2桁」の箇所を抜き出し.空白ならこのセルも空白のまま
JavaScript みたいにしてみた

B列はこう.要するに泳いだ距離を抜き出してる.先頭の数字を数桁抜き出してる.

=if(indirect("Tweet!"&address(row(),1),true)<>"",REGEXEXTRACT(indirect("Tweet!"&address(row(),1),true),"^\d+"),"")

C列はこう.複雑さがマックスに!

=if(indirect("Tweet!"&address(row(),1),true)<>"",right(REGEXEXTRACT(indirect("Tweet!"&address(row(),1),true),"/\d+"),len(REGEXEXTRACT(indirect("Tweet!"&address(row(),1),true),"/\d+"))-1),"")

訳が分からないと思うけど,ざっと見ていこう.まず頻繁に登場してる indirect("Tweet!"&address(row(),1),true) は「シート Tweet の列Aの同じ行のセル」という意味.要するにIFTTTが取ってきたデータ.これをデータのDとか書き換えると,

だいぶ見やすいよね?

こんな if 文になってる.データが空でなければ何かする,空だったら何もしない,というだけ.なので中央の関数が何してるのかが重要.詳しい挙動はよく考えてほしいけど,簡単に言うと「/以降の数字を取り出して,その / 以外の数字部分を取り出す」という感じ.結果的に,水泳の所要時間だけを抜き出せる.

  • right は,指定した文字列の末尾から部分文字列を返す
  • regexextract は,正規表現に従って、一致する部分文字列を (複数あれば1つ目を) 取り出す
  • len は,文字列の長さを返す

最後のD列は単純に割り算してるだけです.簡単.

3 グラフにする

… ちょっと記事が長くなりすぎたので,後半に続きます.

コメントを残す

%d人のブロガーが「いいね」をつけました。