はじめに
以下の記事の続きです。
今回は、以下の処理を実装します。
- 楽天市場 注文確認メール解析登録処理:libManageRakutenOrder
- Amazon 注文確認メール解析登録処理:libManageAmazonOrder
- GooglePlay 注文確認メール解析登録処理:libManageGooglePlayOrder
全てのコード
中身は動かしてもらえればわかるので、全てのコードに行きます。
楽天市場 注文確認メール解析登録処理(libManageRakutenOrder)
ファイル名(ライブラリ名):libManageRakutenOrder.gas
/*
* 楽天市場の注文内容をリストに追加してGoogle Calendarに登録するライブラリ
*
* ・Google Calenderに「楽天注文」のタイトルで終日イベントが作成される。
* ・OrderManagementから呼ばれて処理する
*
* 2021/12/04 Created by N.Sekiya
*/
// 検索文字列(注文リスト作成用)
var SHOP_NAME = '[ショップ名] ';
var SHIPPING = '送料計';
var POINT = 'ポイント利用 ';
var COUPON = 'クーポン利用 ';
var RA_COUPON = 'ラ・クーポン利用';
var PAYMENT = 'お支払い金額';
// 検索文字列(カレンダー登録用)
var CUT_START = 'この度は楽天市場内のショップ';
function register(message, calendar, orderlist) {
var body = message.getPlainBody(); // HtmlメールからPlain textの本文を取得する
var startTime = message.getDate();
var endTime = new Date(startTime.getTime() + 10 * 60000);
//Logger.log("body=" + body);
var itemName = null;
var shopName = null;
var price = null;
var count = null;
var payment = null;
var shipping = null;
var point_used = null;
var point_get = null;
var coupon_used = null;
var flgItem = 0;
var flgRaCoupon = 0;
var contents = null; // 登録内容
var flgAdd = 0; // 追加フラグ(0:追加しない、1:追加する)
// 注文メールの内容確認
var rows = body.split("\n");
for (var i in rows) {
var row = rows[i];
// 情報抽出
if (row.indexOf(SHOP_NAME) >= 0) {
shopName = row.replace(SHOP_NAME, '');
}
else if(row.match(/^\[商品\]/)){
flgItem = 1;
}
else if(row.match(/^----------/)){
flgItem = 1;
}
else if(row.match(/^価格/)){
var strs = row.split(' ');
price = strs[2].replace('(円)', '');
count = strs[4].replace('(個)', '');
// 価格情報取得段階でスプレッドシートに登録する
libAddOrderToList.registOderInfoToSpreadSheet(
orderlist, '', startTime, '楽天市場', itemName, price, count, shopName);
}
else if(shipping == null && row.indexOf(SHIPPING) >= 0){
shipping = row.replace(SHIPPING, '').replace('(円)', '').replace('円', '');
}
else if(point_used == null && row.indexOf(POINT) >= 0){
point_used = row.replace(POINT, '').replace('(円)', '').replace('(円)', '');
}
else if(coupon_used == null && row.indexOf(COUPON) >= 0){
coupon_used = row.replace(COUPON, '').replace('(円)', '').replace('(円)', '');
}
else if(coupon_used == null && row.indexOf(RA_COUPON) >= 0){
flgRaCoupon = 1;
}
else if(row.match(/今回のお買い物で.*ポイント獲得予定/)){
point_get = row.replace('今回のお買い物で', '').replace('ポイント獲得予定', '');
}
else if(row.match(/今回のお買い物で獲得するポイント/)){
point_get = row.replace('今回のお買い物で獲得するポイント', '');
}
else if(row.match(/合計.*\(円\)/)){
payment = row.replace('合計', '').replace('(円)', '');
}
else if(payment == null && row.indexOf(PAYMENT) >= 0){
payment = row.replace(PAYMENT, '').replace('(円)', '').replace('(円)', '');
}
if(flgItem == 1){
flgItem++;
}
else if(flgItem == 2){
itemName = row;
flgItem = 0; // 商品名最初の1行のみ抽出する
}
if(flgRaCoupon == 1 || flgRaCoupon == 2){
flgRaCoupon++;
}
else if(flgRaCoupon == 3){
// -10(円) x 1(枚) = 10(円)
var strs = row.split(' ');
coupon_used = '-' + strs[8].replace('(円)', '');
//Logger.log('coupon_used=' + coupon_used);
flgRaCoupon = 0;
}
// カレンダー登録内容抽出 --->>
// 切り取り開始位置確認
if (row.indexOf(CUT_START) >= 0) {
flgAdd = 1;
}
if(flgAdd){
if(contents == null){
contents = row;
}
else{
contents = contents + row + '\n';
}
}
// <<--- カレンダー登録内容抽出用
}
// 追加情報をスプレッドシートに登録
if(shipping == null) shipping = 0;
if(point_used == null) point_used = 0;
if(coupon_used == null) coupon_used = 0;
libAddOrderToList.registOderInfoToSpreadSheetSub(
orderlist, '', shipping, point_used, coupon_used, payment, point_get);
// Googleカレンダーに登録
libCtrlCalendar.registCalendar(
calendar, '楽天市場', startTime, endTime, contents, CalendarApp.EventColor.GREEN);
}
処理内容については以下の記事を参照ください。
Amazon 注文確認メール解析登録処理(libManageAmazonOrder)
ファイル名(ライブラリ名):libManageAmazonOrder.gas
/*
* Amazonの注文内容をリストに追加してGoogle Calendarに登録するライブラリ
*
* ・Google Calenderに「Amazon注文」のタイトルで終日イベントが作成される。
* ・OrderManagementから呼ばれて処理する
*
* 2021/12/04 Created by N.Sekiya
*/
var BORDER ='............................................................................';
function register(message, calendar, orderlist) {
var body = message.getPlainBody(); // HtmlメールからPlain textの本文を取得する
var startTime = message.getDate();
var endTime = new Date(startTime.getTime() + 10 * 60000);
//Logger.log("body=" + body);
var order_number = null;
var itemName = null;
var shopName = null;
var price = null;
var count = null;
var payment = null;
var shipping = null;
var point_used = null;
var point_get = null;
var flgItem = -1;
var contents = '';
// 注文メールの内容確認
var rows = body.split("\n");
for (var i in rows) {
var row = rows[i];
// 情報抽出
if(row.match(/^注文番号: /)){
order_number = row.replace('注文番号: ', '');
}
else if(row.match(/^Amazonポイント:/)){
point_used = row.replace('Amazonポイント:', '').replace('¥', '');
}
else if(row.match(/^注文合計:/)){
payment = row.replace('注文合計:', '').replace('¥', '');
}
else if(order_number != null && payment != null && row.indexOf(BORDER) >= 0){
flgItem *= -1;
}
else{
if(flgItem > 0){
if(row.match(/販売: /)){
shopName = row.replace('販売: ', '');
// 価格情報取得段階でスプレッドシートに登録する
//Logger.log('itemName=' + itemName + ' shopName=' + shopName);
libAddOrderToList.registOderInfoToSpreadSheet(
orderlist, '', startTime, 'Amazon', itemName, price, 1, shopName);
itemName = null;
}
else{
row = row.replace('\r', '');
if(row.length > 0 && itemName == null){
itemName = row;
}
else if(row.length > 0 && itemName != null){
itemName += ' ' + row;
}
}
}
}
// カレンダー登録内容抽出 --->>
contents = contents + row;
// <<--- カレンダー登録内容抽出用
}
// 追加情報をスプレッドシートに登録
if(shipping == null) shipping = 0;
if(point_used == null) point_used = 0;
if(point_get == null) point_get = 0;
libAddOrderToList.registOderInfoToSpreadSheetSub(
orderlist, '', shipping, point_used, 0, payment, point_get);
// Googleカレンダーに登録
libCtrlCalendar.registCalendar(
calendar, 'Amazon注文', startTime, endTime, contents, CalendarApp.EventColor.GREEN);
}
処理内容については以下の記事を参照ください。
GooglePlay 注文確認メール登録解析処理(libManageGooglePlay)
ファイル名(ライブラリ名):libManageGooglePlay.gas
/*
* GooglePlayの注文内容をリストに追加してGoogle Calendarに登録するライブラリ
*
* ・Google Calenderに「GooglePlay注文」のタイトルで終日イベントが作成される。
* ・OrderManagementから呼ばれて処理する
*
* 2021/12/04 Created by N.Sekiya
*/
// 検索文字列(カレンダー登録用)
var CUT_START = 'Thank you';
var CUT_END = 'Questions? Visit';
function register(message, calendar, orderlist) {
var body = message.getPlainBody(); // HtmlメールからPlain textの本文を取得する
var startTime = message.getDate();
var endTime = new Date(startTime.getTime() + 10 * 60000);
//Logger.log("body=" + body);
// 注文リスト登録用変数
var itemName = null;
var shopName = null;
var price = null;
var count = null;
var payment = null;
var shipping = null;
var point_used = null;
var point_get = null;
var flgItemName = null;
var flgPointGet = null;
// カレンダー登録用変数
var contents = null; // 登録内容
var flgAdd = 0; // 追加フラグ(0:追加しない、1:追加する)
// 注文メールの内容確認
var rows = body.split("\n");
for (var i in rows) {
var row = rows[i];
// ---< 英語版メールの処理 >---
if(row.match(/^Item Price/)){
row = row.replace('\r', '');
flgItemName = 1;
}
else if(row.match(/Total:/)){
row = row.replace('Total:', '').replace('/month', '').replace('¥', '');
payment = row;
flgItemName = 0;
}
else if(row.match(/^Play Points earned/)){
flgPointGet = 1;
}
else if(row.match(/^Questions\? Visit /)){
shopName = row.replace('Questions? Visit ', '').replace('.', '');
}
// ---< 日本語版メールの処理 >---
else if(row.match(/^アイテム 価格/)){
row = row.replace('\r', '');
flgItemName = 1;
}
else if(row.match(/合計: /)){
row = row.replace('合計: ', '').replace('/月', '').replace('/年', '').replace('¥', '');
payment = row;
flgItemName = 0;
}
else if(row.match(/Play ポイントを獲得しました/)){
flgPointGet = 1;
}
else if(row.match(/^ご不明な点がありましたら、/)){
shopName = row.replace('ご不明な点がありましたら、', '').replace('にお問い合わせください。', '').replace('ヘルプセンター', '');
}
if(flgItemName){
if(itemName == null){
itemName = '';
}
else{
row = row.replace('\r', '');
if(row.length > 0){
itemName += ' ' + row;
}
}
}
if(flgPointGet){
if(point_get == null){
point_get = 0;
}
else{
point_get = row.replace('+', '');
flgPointGet = 0;
}
}
// カレンダー登録内容抽出 --->>
// 切り取り開始位置確認
if (row.indexOf(CUT_START) >= 0) {
flgAdd = 1;
}
else if(row.indexOf(CUT_END) >= 0){
flgAdd = 0;
}
// CUT_STARTからCUT_ENDまでの間を取得する
if(flgAdd){
if(contents == null){
contents = row;
}
else{
contents = contents + row + '\n';
}
}
// <<--- カレンダー登録内容抽出用
}
libAddOrderToList.registOderInfoToSpreadSheet(
orderlist, '', startTime, 'GooglePlay', itemName, price, 1, shopName);
libAddOrderToList.registOderInfoToSpreadSheetSub(
orderlist, '', 0, 0, 0, payment, point_get);
// Googleカレンダーに登録
libCtrlCalendar.registCalendar(
calendar, 'GooglePlay注文', startTime, endTime, contents, CalendarApp.EventColor.GREEN);
}
処理内容については以下の記事を参照ください。
まとめ
コードばかりですが、基本コピペで行けます。
では、今日も良い一日を。