AdSense サービス

AdSense サービスを使用すると、Apps Script で AdSense Management API を使用できます。この API を使用すると、AdSense のお客様はアカウントの構造に関する情報を取得し、アカウントのパフォーマンスに関するレポートを実行できます。

リファレンス

このサービスの詳細については、AdSense Management API のリファレンス ドキュメントをご覧ください。Apps Script のすべての高度なサービスと同様に、AdSense サービスでは、公開 API と同じオブジェクト、メソッド、パラメータを使用します。詳細については、メソッド シグネチャの決定方法をご覧ください。

問題を報告したり、その他のサポートを探したりするには、adsense-api タグを使用して Stack Overflow で質問してください。

サンプルコード

以下のサンプルコードでは、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()
  };
}