GASでAdSenseのレポートをSlackに送る方法
GASでGoogle AdSenseの前日のレポートを毎日Slackに送るようにした。うちの場合はirucaとmimemoで利用しているので、それぞれのレポートをそれぞれのSlackのchannelに送るように。GASのトリガーで実行させている。
ライブラリとしてDay.js(dayjs)を、サービスとしてAdSenseを追加している。また、AdSenseのパブリッシャーIDと、SlackのIncoming WebhookのURLの値(iruca用とmimemo用)をそれぞれスクリプトプロパティに登録している。
以下、コード。
dayjs.dayjs.locale("ja");
function notifyAdSenseData() {
const prop = PropertiesService.getScriptProperties().getProperty;
const account = `accounts/${prop("ADSENSE_PUBLISHER_ID")}`;
const sites = [
{ name: "iruca", domainName: "iruca.co", slackUrl: prop("SLACK_WEBHOOK_URL_IRUCA") },
{ name: "mimemo", domainName: "mimemo.io", slackUrl: prop("SLACK_WEBHOOK_URL_MIMEMO") }
];
const yesterday = dayjs.dayjs().subtract(1, "day").format("YYYY年M月D日(ddd)");
for (const site of sites) {
// see: https://developers.google.com/adsense/management/reference/rest/v2/accounts.reports/generate
const report = AdSense.Accounts.Reports.generate(account, {
filters: [`OWNED_SITE_DOMAIN_NAME==${site.domainName}`],
metrics: ["ESTIMATED_EARNINGS", "PAGE_VIEWS", "INDIVIDUAL_AD_IMPRESSIONS", "CLICKS"],
dimensions: ["DATE"],
dateRange: "YESTERDAY",
reportingTimeZone: "ACCOUNT_TIME_ZONE"
});
if (report?.rows) {
const fields = [
{ title: "推定収益額", value: `¥${addComma(report.rows[0].cells[1].value)}`, short: true },
{ title: "ページビュー", value: addComma(report.rows[0].cells[2].value), short: true },
{ title: "表示回数", value: addComma(report.rows[0].cells[3].value), short: true },
{ title: "クリック数", value: addComma(report.rows[0].cells[4].value), short: true }
];
const attachments = [{
fallback: yesterday,
title: `${yesterday}${site.name}`,
color: "#1A73E8",
fields,
mrkdwn_in: []
}];
const payload = {
username: "AdSense Report",
attachments
};
UrlFetchApp.fetch(
site.slackUrl,
{ method: "POST", contentType: "application/json", payload: JSON.stringify(payload) }
);
}
}
}
function addComma(number) {
return String(number).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
}