見出し画像

【GAS】altyの売買情報をスプレッドシートに書き出す

ポケモンカードや遊戯王カードなどのコレクションアイテムを共同保有できるalty(オルティ)を最近使っています。
こちらの取引履歴をGmailから取得してスプレッドシートに書き出すコードを作成しました。
ネタとしてはメルカリの取引履歴をメールからスプレッドシートに書き出すというアイデアを何処かでみたのでそれのalty版です。
コード自体はChatGPTにお願いしてと書いてもらったものです。

alty 

実際に出力したサンプル

仕組み

  • GASでaltyから送信されるメールを取得

  • メールのIDを使用して重複チェック

  • 本文の文字列を正規表現で取得して配列に変換。

  • スプレッドシートに貼り付け

以上の処理を行っています。
特徴的な部分のみ解説します

GASでaltyから送信されるメールを取得

Gmailの検索は送信元とタイトルを指定しています。
購入の場合は2パターン、売却の場合は1パターンメールのパターンがあります。
"" でくくると完全一致で検索可能です

購入:
from:no-reply@myalty.jp subject:("【alty】購入が確定しました") OR subject:("【alty】購入が完了しました")

売却:
from:no-reply@myalty.jp subject:("【alty】売却が確定しました"

const query = 'from:no-reply@myalty.jp subject:("【alty】購入が確定しました") OR subject:("【alty】購入が完了しました")'
const threads = GmailApp.search(query, 0, 500);

本文の文字列を正規表現で取得して配列に変換。

以下のようなメール本文から必要な情報を正規表現で取得をしています。
また計算しやすいように購入の場合はマイナスに売却の場合はプラスになるように調整

【注文内容】
アイテム名: リーリエ(通称:がんばリーリエ)
注文日時: 2023年06月04日 10時00分
購入価格/枠:¥2,000
枠数: 1枠
購入手数料(10%): ¥2,00
合計金額: ¥22,00(税込み)
支払い方法: ポイント

【注文内容】
アイテム名: リーリエ(通称:がんばリーリエ)
注文日時: 2023年06月04日 12時00分
注文タイプ: 希望価格で売る
希望価格/枠:¥2,500
枠数: 2枠
売却手数料(5%): ¥250
合計金額: ¥4,750(税込み)


  _extractTransactionInfo(body, multiplier) {
    const itemMatch = body.match(/アイテム名: (.*)/);
    const item = itemMatch ? itemMatch[1] : '-';

    const dateMatch = body.match(/注文日時: (.*)/);
    const date = dateMatch ? dateMatch[1] : '-';

    const typeMatch = body.match(/注文タイプ: (.*)/);
    const type = typeMatch ? typeMatch[1] : '-';

    const priceMatch = body.match(/(希望|購入)価格\/枠:¥(.*)/);
    const price = priceMatch ? Number(priceMatch[2].replace(/,/g, '')) * multiplier : '-';

    const quantityMatch = body.match(/枠数: (.*)枠/);
    const quantity = quantityMatch ? Number(quantityMatch[1].replace(/,/g, '')) * multiplier * -1 : '-';

    const feeMatch = body.match(/(売却|購入)手数料\((.*?)%\): ¥(.*)/);
    const fee = feeMatch ? Number(feeMatch[3].replace(/,/g, '')) * -1 : '-';

    const totalMatch = body.match(/合計金額: ¥(.*)(税込み)/);
    const total = totalMatch ? Number(totalMatch[1].replace(/,/g, '')) * multiplier : '-';

    const paymentMethodMatch = body.match(/支払い方法: (.*)/);
    const paymentMethod = paymentMethodMatch ? paymentMethodMatch[1] : '-';

    return [item, date, type, price, quantity, fee, total, paymentMethod];
  }

ヘッダーを作成するサブ関数

ヘッダー行を作成するのも手間なので、こちらもChatGPTに出力してもらいました。

function setHeaders() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const headers = [‘アイテム名’, ‘注文日時’, ‘注文タイプ’, ‘希望価格/枠’, ‘枠数’, ‘手数料’, ‘合計金額’, ‘支払い方法’, ‘メールID’];
sheet.getRange(1, 1, 1, headers.length).setValues([headers]);
}


こちら使用して取得したものをスプレッドシートに貼り付けます。

以下有料部分には、使用したメインのコードを掲載いたします。

公開時点で動作確認をしているコードになりますが、環境などの違いで動かない場合など保証はいたしかねます。
あくまで参考として参照してください。

作成したコード全体

ここから先は

2,867字

¥ 300

この記事が気に入ったらサポートをしてみませんか?