こんにちは♪
公式LINEなど担当していると、プレゼントにAmazonギフトカードを送付する業務とかありませんか?
私は広報業務で、1週間に100件ほどEmailタイプのギフト券を購入しています。
AmazonギフトカードのURLって一覧で届くわけではなく、1通ずつURLが送付されるんですよね
↑この黄色い【アカウントに登録する】をクリックしてURLを1件ずつ取得します。100名の人に贈りたいとすると×100回分・・・
同じURLを送るミスは絶対できないのでどうにか間違いのなく効率化しないと大変すぎる・・・
AmazonギフトカードURLをGoogle Apps Scriptで自動取得してスプレッドシート に管理
そこでChat GPTに相談して、Gmailに届くAmazonギフトカードのURLを自動取得し、Googleスプレッドシートに整理するスクリプトを作成してみました
このスクリプトを活用して、ギフトカードの受信日時、URL、取得日時を自動記録し管理できています✨
スクリプトの内容
✅ Gmailから特定の件名のメールを検索
✅ メール本文からAmazonギフトカードのURLを抽出
✅ 受信日順にソートしてスプレッドシートに保存
📌 導入メリット
✔️ 手作業ゼロでURLを取得!
✔️ ギフトカードの管理が一目でわかる!
✔️ ミスなく正確に記録できる!
📝 導入手順
1️⃣ スプレッドシートを作成し、シート名を「Amazonギフトカード」に変更
2️⃣ Google Apps Script(GAS)を開き、スクリプトを貼り付け
3️⃣ 件名をコピペしてくださいのところは、「○○
様からAmazonギフトカードが届きました!」の件名をコピペ
4️⃣ スクリプトを実行し、自動でURLを取得!
私が使用しているスクリプト
function extractGiftCardUrls() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Amazonギフトカード");
if (!sheet) {
Logger.log("シートが見つかりません。");
return;
}
const query = 'subject:" メールの件名をコピペしてください"'; // 件名をコピペしてください
const threads = GmailApp.search(query);
if (threads.length === 0) {
Logger.log("該当するメールが見つかりませんでした。");
return;
}
// 既存のURLを取得(シートにデータがある場合のみ)
let existingUrls = [];
if (sheet.getLastRow() > 1) {
existingUrls = sheet.getRange(2, 2, sheet.getLastRow() - 1, 1).getValues().flat();
}
const urls = [];
threads.forEach(thread => {
thread.getMessages().forEach(message => {
const htmlBody = message.getBody();
const receivedDate = message.getDate();
const regex = /¥100[^\n]*?(https?:\/\/[^\s]+)(?=.*アカウントに登録する)/g;
let match;
while ((match = regex.exec(htmlBody)) !== null) {
if (!existingUrls.includes(match[1])) { // 既存のURLと重複しない場合
urls.push({ url: match[1], date: receivedDate });
}
}
});
});
if (urls.length > 0) {
// 受信日が古い順にソート
urls.sort((a, b) => a.date - b.date);
// 最後の行を取得
const lastRow = Math.max(sheet.getLastRow(), 1); // 最低でも1行目を確保
// 新しいデータをシートに追加
urls.forEach((item, index) => {
const newRow = lastRow + index;
sheet.getRange(newRow + 1, 1).setValue(Utilities.formatDate(item.date, Session.getScriptTimeZone(), "yyyy/MM/dd HH:mm:ss"));
sheet.getRange(newRow + 1, 2).setValue(item.url);
});
SpreadsheetApp.flush();
Logger.log(`${urls.length} 件のURLを追加しました。`);
} else {
Logger.log("新しいURLは見つかりませんでした。");
}
}
改善点などありそうですが、何度かコードを修正してとりあえずこれでURL取得地獄からは抜け出せました
必要なページを一括オープン
PC作業のお供
Google Apps Scriptの勉強に読んでいる本