最後の記事が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年頃から始まったコロナ禍から在宅ワークがなくなり、通常運転に慣れてきた頃。 そろそろ新しい趣味を探していこうと思っています。 さて何するかな。。。