ツールを駆使します.手順は4段階くらいに分けられると思う.
- Twitter →IFTTT → Google Sheet の連携
- Google Sheet でデータを整形
- Google Sheet でグラフを描く
- Google Sheet → Twitter を作る
1 Tweet → IFTTT → G Sheet の連携
僕は毎週プールに行っていて,行ったら泳いだ距離を記録したい.でも毎回 Google Sheet を開いて値を入力するのは面倒くさい.でも僕は Twitter を使うのには抵抗ゼロだから,記録をツイートするなら簡単なんだよね.例えばこんなふうに.
毎回同じ形式でツイートすることが重要.僕の場合は 泳いだ距離[m]
/所要時間[min]
(~平均速さ[m/min]
) 日付 YYYY/MM/DD
+ コメント
+ #swim
の形式と決めてる.この形式でツイートすることの理由は後回しにしますね.
最後にハッシュタグ #swim
を付けることの理由.それは IFTTT に実装されてる「ある人」が「あるハッシュタグ」をツイートしたら発火する,というトリガーを使うからです.IFTTTの設定はこんな感じ.

自分のアカウントが特定のハッシュタグ付きでツイートしたら,そのツイートの 本文
と URL
と ツイート日時
を所定の Google Sheet に記載する IFTTT アプリ.簡単ですね.
2 Google Sheet で情報整理
ツイートから取得した情報を Google Sheet に記入するわけだけど,記入するだけじゃ寂しい.どうせならグラフを書きたいよね.グラフを書くためにデータを少しだけ整形する関数を書きます.
ますは,IFTTTによって転載された生の状態はこれ.生の情報が書かれたシートの名前は Tweet
としています.

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

かなり複雑で嫌になるけど,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桁」の箇所を抜き出し.空白ならこのセルも空白のまま

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 グラフにする
… ちょっと記事が長くなりすぎたので,後半に続きます.
コメントを残す