Skip to content

Instantly share code, notes, and snippets.

@takeru0911
Last active December 22, 2016 08:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save takeru0911/95bed8afcf8e2166fd833a23addf1dec to your computer and use it in GitHub Desktop.
Save takeru0911/95bed8afcf8e2166fd833a23addf1dec to your computer and use it in GitHub Desktop.
function onEditEvent(evt) {
var ss = evt.source.getActiveSheet();
var cell = evt.source.getActiveRange();
//食べたもの以外のセルだったらー
if(!(cell.getColumn() == 3 || cell.getColumn() == 4 || cell.getColumn() == 5)){
return;
}
var inputText = cell.getValue();
if(inputText == ""){
return;
}
var curCal = ss.getRange(cell.getRow(), 6).getValue();
var resultCal = calcInputFoodCalorie(inputText);
ss.getRange(cell.getRow(), 6).setValue(curCal + resultCal);
}
//ユーザーが定義したカロリー表にデータがないかちぇっくちぇっく
function getUserDefinedCalorie(inputText){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("UDC");
var foodNames = sheet.getRange("A:A").getValues();
var cals = sheet.getRange("B:B").getValues();
var calorie = -1;
for(var i = 0; i < Number(foodNames.length); i++){
if(foodNames[i] == inputText){
calorie = cals[i][0];
return calorie;
}
}
return calorie;
}
//入力されたテキストから頑張ってカロリー求める
function calcInputFoodCalorie(inputText){
var foods = parseInputFood(inputText);
var sumCal = 0;
for(var i = 0; i < Number(foods.length); i++){
var food = foods[i];
var cal = getUserDefinedCalorie(food.name);
if(cal == -1){
cal = parseCalorieXml(fetchCalorieXml(food.name));
if(cal == 0){
Browser.msgBox(food.name + "のカロリーは登録されてないです!0kcalじゃないならUDC sheetに登録して!")
}
}
// Logger.log(cal);
sumCal += cal * food.cnt;
}
return sumCal;
}
//複数食品があったら、なんか分解する
//カレー*2とかあったら個数もなんかやる
function parseInputFood(inputText){
var splitText = inputText.split(",")
var foods = [];
for(var i = 0; i < Number(splitText.length); i++){
var cnt = 1;
var text = splitText[i];
//なんこか食べたら
var splitAsta = text.split("*");
if(splitAsta.length > 1){
cnt = splitAsta[1];
}
var foodName = splitAsta[0];
foods.push(
{
name: foodName,
cnt: cnt
}
);
}
return foods;
}
//apiたたいてカロリーxmlを取得
function fetchCalorieXml(foodName){
var feedURL = "http://24th.jp/test/api_cal.php?submit=on&name=" + foodName;
var response = UrlFetchApp.fetch(feedURL);
return response.getContentText();
}
//取得したxmlをparseしてカロリー取得
//該当する食品があったら良い感じにカロリーをさまる
function parseCalorieXml(contentText){
var xml = XmlService.parse(contentText);
var items = xml.getRootElement().getChildren('food');
var sumCal = 0;
if(items.length == 0){
return 0;
}
for(var i = 0; i < items.length; i++) {
var cal = Number(items[i].getChild("cal").getText());
sumCal = cal + sumCal
}
return sumCal / items.length;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment