借助 AdSense 服务,您可以在 Apps 脚本中使用 AdSense Management API。借助此 API,AdSense 客户能够获取其帐号结构的相关信息,并生成报告并生成报告。
参考
如需详细了解此服务,请参阅 AdSense Management API 的参考文档。与 Apps 脚本中的所有高级服务一样,AdSense 服务使用的对象、方法和参数与公共 API 相同。如需了解详情,请参阅如何确定方法签名。
要报告问题并寻求其他支持,请在 Stack Overflow 上提问并使用 adsense-api 标记。
示例代码
以下示例代码使用的是该 API 的版本 2。
列出账号
此示例列出了该用户可用的所有帐号。帐号被指定为资源名称(例如 accounts/pub-12345
),可以用于其他方法(如列出广告客户)。请注意使用页面令牌来访问完整的结果列表。
advanced/adsense.gs
/** * Lists available AdSense accounts. */ function listAccounts() { let pageToken; do { const response = AdSense.Accounts.list({pageToken: pageToken}); if (!response.accounts) { console.log('No accounts found.'); return; } for (const account of response.accounts) { console.log('Found account with resource name "%s" and display name "%s".', account.name, account.displayName); } pageToken = response.nextPageToken; } while (pageToken); }
列出广告客户
此示例列出了给定帐号的所有广告客户。将帐号指定为资源名称,例如 accounts/pub-12345
。您可以使用列出帐号示例代码来获取帐号资源名称。
advanced/adsense.gs
/** * Logs available Ad clients for an account. * * @param {string} accountName The resource name of the account that owns the * collection of ad clients. */ function listAdClients(accountName) { let pageToken; do { const response = AdSense.Accounts.Adclients.list(accountName, { pageToken: pageToken }); if (!response.adClients) { console.log('No ad clients found for this account.'); return; } for (const adClient of response.adClients) { console.log('Found ad client for product "%s" with resource name "%s".', adClient.productCode, adClient.name); console.log('Reporting dimension ID: %s', adClient.reportingDimensionId ?? 'None'); } pageToken = response.nextPageToken; } while (pageToken); }
列出广告单元
此示例列出了给定广告客户的所有广告单元。将广告客户端指定为资源名称,例如 accounts/pub-12345/adclients/ca-pub-12345
。您可以使用列出广告客户示例代码来获取广告客户资源名称。
advanced/adsense.gs
/** * Lists ad units. * @param {string} adClientName The resource name of the ad client that owns the collection * of ad units. */ function listAdUnits(adClientName) { let pageToken; do { const response = AdSense.Accounts.Adclients.Adunits.list(adClientName, { pageSize: 50, pageToken: pageToken }); if (!response.adUnits) { console.log('No ad units found for this ad client.'); return; } for (const adUnit of response.adUnits) { console.log('Found ad unit with resource name "%s" and display name "%s".', adUnit.name, adUnit.displayName); } pageToken = response.nextPageToken; } while (pageToken); }
生成报告
此示例会针对您的 AdSense 帐号生成一份报告,并将结果输出到电子表格。
advanced/adsense.gs
/** * Generates a spreadsheet report for a specific ad client in an account. * @param {string} accountName The resource name of the account. * @param {string} adClientReportingDimensionId The reporting dimension ID * of the ad client. */ function generateReport(accountName, adClientReportingDimensionId) { // Prepare report. const today = new Date(); const oneWeekAgo = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000); const report = AdSense.Accounts.Reports.generate(accountName, { // Specify the desired ad client using a filter. filters: ['AD_CLIENT_ID==' + escapeFilterParameter(adClientReportingDimensionId)], metrics: ['PAGE_VIEWS', 'AD_REQUESTS', 'AD_REQUESTS_COVERAGE', 'CLICKS', 'AD_REQUESTS_CTR', 'COST_PER_CLICK', 'AD_REQUESTS_RPM', 'ESTIMATED_EARNINGS'], dimensions: ['DATE'], ...dateToJson('startDate', oneWeekAgo), ...dateToJson('endDate', today), // Sort by ascending date. orderBy: ['+DATE'] }); if (!report.rows) { console.log('No rows returned.'); return; } const spreadsheet = SpreadsheetApp.create('AdSense Report'); const sheet = spreadsheet.getActiveSheet(); // Append the headers. sheet.appendRow(report.headers.map((header) => header.name)); // Append the results. sheet.getRange(2, 1, report.rows.length, report.headers.length) .setValues(report.rows.map((row) => row.cells.map((cell) => cell.value))); console.log('Report spreadsheet created: %s', spreadsheet.getUrl()); } /** * Escape special characters for a parameter being used in a filter. * @param {string} parameter The parameter to be escaped. * @return {string} The escaped parameter. */ function escapeFilterParameter(parameter) { return parameter.replace('\\', '\\\\').replace(',', '\\,'); } /** * Returns the JSON representation of a Date object (as a google.type.Date). * * @param {string} paramName the name of the date parameter * @param {Date} value the date * @return {object} formatted date */ function dateToJson(paramName, value) { return { [paramName + '.year']: value.getFullYear(), [paramName + '.month']: value.getMonth() + 1, [paramName + '.day']: value.getDate() }; }