1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

IFTTTで連携したDropboxの英語ぽい日付入りのファイル名をNode.jsで扱う

Last updated at Posted at 2018-02-12

背景

IFTTTでは条件を指定して、Dropboxに日付入りのファイルを作成する事が出来る。

この条件に最近AlexaやSiriをhomebridge経由でIFTTTのWebhooksを指定できる事を
知った。

問題

Node.jsfs.watchで指定したディレクトリの監視がOSが限定されるようだが
出来る。

でも、ファイルの追加削除がrenameイベントで通知されてしまう。
何も考えないでこのrenameイベントを契機に処理を行うと
溜め込んだ古いファイルを削除しても動いてしまう問題がある。

Dropboxのファイル名を解釈することで、古いファイルが
削除されても、これを無視する事が可能になる。

Node.jsで日付入りのファイル名を扱う

Dropboxに作成されるファイル名は人間が読みやすい形式なので、
なんとかNode.jsで扱える形式にパースする必要がある。

日付を扱う便利なライブラリを入れる

moment.jsを使うと、幅広い日付の形式に対応していて、
今回の形式の日付も簡単に扱うことできた。

日付ファイル名が10分以内に作成されたかをチェックするコード

const moment = require("moment");

const checkFilename = (name) => {
  const now = moment();
  const origDateStr = name.split(" at ")[0];
  if (name.split(" at ")[1]) {
    const origTimeStr = name.split(" at ")[1].substring(0, 7);
    const origDateTime = moment(`${origDateStr}${origTimeStr}`, "MMMM D, YYYYhh:mma");

    if (now.diff(origDateTime) < 10 * 60 * 1000) {
      // 10分位内に作成されたファイル
      return true;
    }
  }
  return false;
};

// DropBoxには以下のようなファイル名でファイルが作成される
checkFilename("February 12, 2018 at 11/35AMT1-2On.txt");

// IFTTTで指定したDropboxのパスを設定
const path = "/Users/kjunichi/Dropbox/IFTTT/MakerWebooks/hoge";

fs.watch(path, (event, filename) => {
  // console.log(event + " to " + filename);
  if (checkFilename(filename) && event === "rename") {
    // IFTTTで通知された際に行う処理を実行する

  }
});

関連記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?