〜2015年6月下旬〜
今日の日付ファイルのパスを生成するスクリプトは、
今日じゃなくて前回の翌日分を生成すればいいんだと気づいた。
つまり今日から順番に遡って見つかったらその次の日という感じに。
そうすると一回書いて閉じると次の日になってしまうが、まあいいか。
見つかるときは見つかるもので。
fitbitの前に使っていた歩数計がひょっこり籠の中から出てきた。
2年半だ。今となってはサイズがでかすぎる。
この歩数計が311のときに見につけてもいないのに 19歩も計測していたんだよなあ。
ヨルタモリでやってた終着駅が、偶然今日の鉄道捜査官の再放送で出てきた。
そのおかげでいきなりトリックがばればれになってしまったのがあれだが。
ふと気づくとChromeではuBlock originでFirefoxではuBlockを使っていた。
あれ、これって違うの?とぐぐってみるとなんかきな臭い話が。
uBlockオリジナルの作者が現開発陣の運営方針を疑問視し、独自に開発存続をアナウンス
簡単に言うと以下のURLから歩数は取得可能。日付は2015-06-01から現在までという意味。
stepsを削除すれば保存してあるもろもろのアクティビティが取れる。
https://api.fitbit.com/1/user/-/activities/steps/date/2015-06-01/today.json
https://api.fitbit.com/1/user/-/activities/date/2015-06-01/today.json
ただ、OAuthでの認証が必要なので面倒なら
API Explorerを使うといいかもしれない。
各種APIが簡単に呼び出せる。
方法は
Fitgem Reference Clientの通りにすればok。cunsumer_keyとcunsumer_secretは
アプリ登録ページでもろもろ入力する。
Websiteとかあるが適当にhttp://localhost/でもいけるようだ。
test-fitgem.rbは最初の実行のときにPINの入力を促される。
あとtest-fitgem.rbの最後の
pp client.activities_on_date 'today'
を
pp client.activity_on_date_range('steps', '2012-12-15', 'today')["activities-steps"]
のようにすれば2012-12-15にから今日までの歩数が得られる。
% ruby test-fitgem.rb | tail {"dateTime"=>"2015-06-17", "value"=>"11348"}, {"dateTime"=>"2015-06-18", "value"=>"17780"}, {"dateTime"=>"2015-06-19", "value"=>"13734"}, {"dateTime"=>"2015-06-20", "value"=>"972"}, {"dateTime"=>"2015-06-21", "value"=>"1706"}, {"dateTime"=>"2015-06-22", "value"=>"16762"}, {"dateTime"=>"2015-06-23", "value"=>"13477"}, {"dateTime"=>"2015-06-24", "value"=>"11458"}, {"dateTime"=>"2015-06-25", "value"=>"2032"}, {"dateTime"=>"2015-06-26", "value"=>"2977"}]
jsonにしたければppの代わりにjjで。
昔はそんなことかなかったのに、ここ1年ぐらい何をしても音が割れるなと思ったら、
単にプレーヤーのボリュームが最大になっていただけだった。
ここは完全に盲点だった。テレビかと思ってそっちばかりいじってた。
T3にしてから保存する場所をいじったらやはりauto collection triggerが機能しなくなった。
面倒で放置していたが、どう考えても手でコレクションに入れるほうが
もっと面倒なのでなんとかしよう。
sqlite3のtriggerでいろいろやってるわけで、よく見ると
WHEN new.file_path LIKE 'Sony_Reader/media/books/_%'
となっていて、ところどころ25という謎の数字が出てくる。
謎かと思ったが単にこの文字列の長さだった。
% echo -n Sony_Reader/media/books/ | wc -c 24
つまり何度も出てくる
substr(new.file_path, 25, length(new.file_path) - length(new.file_name) - 25))
はbooks/の後ろのディレクトリ名を抜き出しているわけだ。
これで原因はわかった。
今はSony_Reader/media/books/じゃなくて単にebooks/へ保存してるので発火しない。
このあたりを調整すればいい。
WHEN new.file_path LIKE 'ebooks/_%'
にして、25を8にすればokだ。
CREATE TRIGGER auto_collection_trigger AFTER INSERT ON books WHEN new.file_path LIKE 'ebooks/%' BEGIN INSERT OR IGNORE INTO collection (_id, title, source_id) VALUES ( (SELECT _id FROM collection WHERE title = substr(new.file_path, 8, length(new.file_path) - length(new.file_name) - 8)), substr(new.file_path, 8, length(new.file_path) - length(new.file_name) - 8), new.source_id ); INSERT INTO collections (collection_id, content_id) VALUES ( (SELECT _id FROM collection WHERE title = substr(new.file_path, 8, length(new.file_path) - length(new.file_name) - 8)), new._id ); END;
昨日のSQLを見てて
substr(new.file_path, 8, length(new.file_path) - length(new.file_name) - 8)
が3回も出てきていやだなと思ったが、SQLってそのあたりはどうしようもないようで。
というよりそもそもこのディレクトリ名は著者名にして作っているので、
だったらfile_pathから取得しなくてもauthorから得ればいい。
というわけでかなりシンプルになった。
CREATE TRIGGER auto_collection_trigger AFTER INSERT ON books BEGIN INSERT OR IGNORE INTO collection (_id, title, source_id) VALUES ((SELECT _id FROM collection WHERE title = new.author), new.author, new.source_id); INSERT INTO collections (collection_id, content_id) VALUES ((SELECT _id FROM collection WHERE title = new.author), new._id); END;
これはやばい。ディレクトリ作る必要もなくなったし、さらに便利になった。
file_pathを見ないようにしたのでもはや全部が対象になった。
で、著者名って自分で設定しているんだけど、
空白で区切ってたりしてるのもあり2つに分かれてしまう。
というわけで空白は消すことにした。
CREATE TRIGGER auto_collection_trigger AFTER INSERT ON books BEGIN INSERT OR IGNORE INTO collection (_id, title, source_id) VALUES ((SELECT _id FROM collection WHERE title = replace(new.author," ","")), replace(new.author," ",""), new.source_id); INSERT INTO collections (collection_id, content_id) VALUES ((SELECT _id FROM collection WHERE title = replace(new.author," ","")), new._id); END;
replaceで消すだけだが、3ヶ所まったく同じなわけでどうにもならないんかな。