web-dev-qa-db-ja.com

IFTTTを使用してJSON、XML、またはCSVを解析しますか?

特定の電力価格のしきい値に基づいてトリガーを許可するIFTTTアクションを作成したいと思います。この Xivelyフィード は、現在の価格を JSON、XML、またはCSV 形式で返すことができます。 XivelyのAPIリファレンスは here です。

単一の値を読み取り、これらの形式のいずれかに応じて対応できるようにするIFTTTチャネル/ツールはありますか?または、直接許可しない可能性のあるチャネルで使用するためにデータを変換するために使用できる回避策はありますか?

2
glenviewjeff

Normal Human's answer に基づいて、価格のしきい値に基づいてIFTTTを解析してメールで送信するGoogleシートスクリプトを作成しました。 Googleシートのセルは、回避策を使用しても、ImportXml()またはその他の外部サイトのデータを1時間に1回以上更新しません。ただし、スクリプトを介して外部サイトにアクセスすることはできます。次のスクリプトを使用し、1分ごとに実行するトリガーを設定します。

Xivelyフィードをバイパスして、Comedで source に直接進みました。解析スクリプトを書いているからです。現時点では、IFTTTにはXML/CSV/JSON解析チャネルはありません。

しきい値(現在は5.0)を自由にカスタマイズします。コードを変更し、件名でハッシュタグを使用して、さまざまな価格のしきい値に基づいてIFTTTでより複雑なアクションを作成することもできます。たとえば、価格が5を超える場合、メールに#MEDIUM_PRICEのタグを付け、サーモスタットを78度に設定できます。 10を超える場合は、#HIGH_PRICEにタグ付けして、サーモスタットを82度に設定できます。

function myFunction() {
  var lastPriceCell = getThisCell(1,1);
  var lastPrice = lastPriceCell.getValue();
  var currentPrice = getPrice();
  var threshold = 5.0;
  var notify = false;

  if(currentPrice==null) {
    currentPrice = lastPrice;
  } else {
    // Notify only if last price was below threshold and current price is above threshold
    if(lastPrice <= threshold && currentPrice > threshold)
      notify = true;
  }
  lastPriceCell.setValue(currentPrice);

  if(notify) {
    var text = "Price Alert!" + currentPrice; 
    MailApp.sendEmail("[email protected]", text, text);
  }
}

function getThisCell(i, j) {
  return SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange(i,j);
}

function getPrice() {
  var price = (/([\d\.]+)]]/).exec(getData());
  if(price!=null) 
    return price[1];
}

function getData() {
  return UrlFetchApp.fetch("https://rrtp.comed.com/rrtp/ServletFeed?type=pricechartfiveminute");
}
3
glenviewjeff

私のおすすめ:

  1. ImportData (CSVの場合)、 ImportXML (XMLの場合)、または ImportFeed (RSS/Atomの場合)のいずれかでGoogleスプレッドシートを作成します。 トリック があり、Googleのデフォルト(それが何であれ)よりも頻繁に更新されます。

  2. Google Appsスクリプト を使用して、特定のセルのデータを特定のしきい値と比較します。 1時間ごとに実行でき、必要に応じて メールの送信 を実行できます。

たとえば、次のスプレッドシートコマンドを使用して、前述のxivelyページをスクレイピングできます。

  A1 =IMPORTXML("https://personal.xively.com/feeds/4014","//script[3]")
  B1 =REGEXEXTRACT(A2,"current_value[^,]*")
  C1 =VALUE(REGEXEXTRACT(B1,"[\d.]+"))

現在、セルC1には2.6が含まれています。

2
user79865