שירות AdSense

שירות AdSense מאפשר לכם להשתמש ב-AdSense Management API ב-Apps Script. ממשק ה-API הזה מאפשר ללקוחות AdSense לקבל מידע על המבנה של החשבון שלהם ולהריץ דוחות על הביצועים שלו.

חומרי עזר

למידע מפורט על השירות הזה, ראו את מאמרי העזרה של AdSense Management API. כמו כל השירותים המתקדמים ב-Apps Script, גם בשירות AdSense נעשה שימוש באותם אובייקטים, שיטות ופרמטרים כמו ב-API הציבורי. מידע נוסף זמין במאמר איך נקבעות חתימות השיטות.

כדי לדווח על בעיות ולקבל תמיכה נוספת, אפשר לפרסם שאלה ב-Stack Overflow באמצעות התג adsense-api.

קוד לדוגמה

בקוד לדוגמה שבהמשך נעשה שימוש בגרסה 2 של ה-API.

הצגת רשימה של חשבונות

בדוגמה הזו מפורטים כל החשבונות שזמינים למשתמש. החשבונות מצוינים בתור שמות משאבים, לדוגמה 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. אפשר לקבל את שם המשאב של החשבון באמצעות הקוד לדוגמה List accounts.

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()
  };
}