最後の記事が21年3月でしたので、27ヶ月ぶり。
2020年頃から始まったコロナ禍から在宅ワークがなくなり、通常運転に慣れてきた頃。
そろそろ新しい趣味を探していこうと思っています。
さて何するかな。。。
気が付けば明日がやってくる。 -ubuntu備忘録- ubuntuで試しにやったことをメモしています。 最近は、Raspberry Pi、Arduino、DIYなど色々になりますが。。。
最後の記事が21年3月でしたので、27ヶ月ぶり。
2020年頃から始まったコロナ禍から在宅ワークがなくなり、通常運転に慣れてきた頃。
そろそろ新しい趣味を探していこうと思っています。
さて何するかな。。。
久しぶりの更新。
2018/11/11から愛用していた Fitbit Charge3 が、2021/2/10に故障してしまいました。
822日間しか働いてくれませんでした。
ヘルプにダメ元で聞きましたが、保証期間の1年間は故障すれば無償交換の対象となる、故障修理は受け付けていない、これ以上は案内できない、というような回答でした。
なのでAmazonでFitbit Charge4を1.4万円で購入、いまでは少し待てばよかったと。。。
BlackならSuicaが使えるようになっているらしい。
現在、健康マネジメント、体重コントロールを実践中、道のりは険しい
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [
{
name : "AmazonAPIを実行",
functionName : "amazonFunction"
}
];
sheet.addMenu("スクリプト実行", entries);
//メインメニュー部分に[スクリプト実行]メニューを作成して、
//下位項目のメニューを設定している
};
function callAmazonAPI(asin) {
// Amazon API を読み込んで、価格を抽出する。
var associate_tag_id = "アソシエイトのタグID";
var access_key_id = "アクセスキー";
var secret_key = "シークレットキー";
var endpoint = "webservices.amazon.co.jp";
var uri = "/onca/xml";
var params = {
Service: "AWSECommerceService",
Version: "2013-08-01",
Operation: "ItemSearch",
AWSAccessKeyId: access_key_id,
AssociateTag: associate_tag_id,
SearchIndex: "All",
Timestamp: new Date().toISOString(),
Keywords: "asin= " + asin,
//ResponseGroup: "ItemAttributes,Offers"
ResponseGroup: "Offers"
};
// ソートが必要
var sort_params = Object.keys(params).sort();
sort_params = sort_params.map(function(key) {
return key + "=" + encodeURIComponent(params[key]);
});
var canonical_query_string = sort_params.join("&");
var string_to_sign = "GET\n" + endpoint + "\n" + uri + "\n" + canonical_query_string;
// 署名が必要
var signature = Utilities.base64Encode(Utilities.computeHmacSha256Signature(string_to_sign, secret_key));
// リクエストのURL
var request_url = 'http://' + endpoint + uri + '?' + canonical_query_string + '&Signature=' + encodeURIComponent(signature);
// レスポンス取得
// 503エラーでもレスポンスを受け取れるようにmuteHttpExceptionsをtrueにする
var response = UrlFetchApp.fetch(request_url, {muteHttpExceptions: true});
var responseCode = response.getResponseCode();
var responseBody = response.getContentText();
var document = XmlService.parse(responseBody);
var prise = '';
var name = XmlService.getNamespace('http://webservices.amazon.com/AWSECommerceService/2013-08-01');
var root = document.getRootElement();
if (responseCode === 200) {
var items = root.getChild('Items', name).getChildren('Item', name);
for(var i = 0; i < items.length; i++) {
// xmlからitemの情報を取得
prise = items[i].getChild('OfferSummary', name).getChild('LowestNewPrice', name).getChild('Amount', name).getText();
return prise
}
} else {
// エラー時はxmlのnamespaceが異なる
ns = XmlService.getNamespace('http://ecs.amazonaws.com/doc/2013-08-01/');
var message = root.getChild('Error', name).getChild('Message', name);
return message.getText();
}
}
function amazonFunction () {
// Amazon API から取得した価格をスプレッドシートへ入力し、値段が安ければメールを送信する。
var book = SpreadsheetApp.getActiveSpreadsheet();
var sheetData = book.getSheetByName("シート1");
var rowASIN = 1;
var colPrise = 2;
var colStartData = 2
var colEndData = sheetData.getDataRange().getLastColumn()
var rowEndData = sheetData.getDataRange().getLastRow()
sheetData.getRange( rowEndData+1, 1 ).setValue(new Date().toLocaleString())
for (var i = colStartData; i <= colEndData; i += 1) {
var asin = sheetData.getRange( rowASIN, i ).getValue();
var price = callAmazonAPI( asin )
sheetData.getRange( rowEndData+1, i ).setValue(price);
}
checkPrice() //価格を比較して安ければメールを送信
}
function checkPrice(){
// 商品の価格を前後比較する。
var book = SpreadsheetApp.getActiveSpreadsheet();
var sheetData = book.getSheetByName("シート1");
var colStartData = 2
var rowItemName = 2
var colEndData = sheetData.getDataRange().getLastColumn()
var rowEndData = sheetData.getDataRange().getLastRow()
for (var i = colStartData; i <= colEndData; i += 1) {
// 前後データを取得する
var itemName = sheetData.getRange( rowItemName , i ).getValue().replace(/\r?\n/g,"") // 改行を除去する。
var prePrice = Number(sheetData.getRange( rowEndData-1, i ).getValue());
var nowPrice = Number(sheetData.getRange( rowEndData , i ).getValue());
var dtPrice = prePrice - nowPrice
if( dtPrice > 0 ) {
// 価格が安くなったらメールを送る。
var title = itemName + "が、"+String(dtPrice)+"円、安くなっています。"
var body = "ご主人さま\n\nAmazonの価格を調べたら\n"+title+"\n\nどうされますか?\n\n前回の価格 "+String(prePrice)+"円\n今回の価格 "+String(nowPrice)+"円"
MailApp.sendEmail('メールアドレス', title, body);
}
}
}
//function myFunction () {
// Browser.msgBox("確認", "Hello GAS World.", Browser.Buttons.OK);
//}
function myFunction() {
Logger.log("Hello World!!");
// Browser.msgBox(Logger.getLog());
}
最後の記事が21年3月でしたので、27ヶ月ぶり。 2020年頃から始まったコロナ禍から在宅ワークがなくなり、通常運転に慣れてきた頃。 そろそろ新しい趣味を探していこうと思っています。 さて何するかな。。。