ניראות של שאילתות ומדדי תנועה לא חוקיים

סקירה כללית

בהוראות שבהמשך מפורטות דוגמאות לשליחת שאילתות באמצעות ה-API גם על תנועה חוקית של ניראות וגם על תנועה לא חוקית. המדדים האלה מוגבלים למלאי שטחי פרסום שנרכש דרך Google Ads, רשת המדיה Video 360 ו-YouTube Reserve.

לתשומת ליבכם: כדי להשתמש במדדי הצפיות במודעות TrueView שקיבלו אישור על ידי ה-MRC, צריך להשתמש ב-ADH API, כי לא משויכת אליו שאילתה בתבנית. בנוסף, אין לבלבל בין מדדי הצפיות ב-TrueView לבין מדדי הניראות.

צריך לבחור את דלת הקנייה שעבורה רוצים להריץ שאילתה על מדדי הניראות:

שליחת שאילתה למדדי הניראות באמצעות ממשק המשתמש

שאילתת הניראות בתבנית מספקת מדדים שקיבלו אישור מה-MRC.

האישור של MRC הוא בינארי – אפשר לקבל אישור על התוצאות או לא – והוא חל על כל טבלת התוצאות. ב-BigQuery, המערכת מחילה את התווית adh-mrc-accredited על כל התוצאות שקיבלו אישור מטעם ה-MRC. כדי שהמדדים שלכם יקבלו אישור מ-MRC, צריך להריץ את השאילתה בתבנית.

כדי להריץ את השאילתה שאושרה על ידי MRC באמצעות התבנית:

  1. עליכם לפעול לפי ההוראות ליצירת שאילתה ולבחור באפשרות YouTube Reserve בתור דלת הקנייה וניראות של מודעות וידאו בתור תבנית השאילתה.
  2. לוחצים על הלחצן הפעלה לצד שימוש בתבנית.

שליחת שאילתות לגבי מדדי תנועה לא חוקית וניראות באמצעות ה-API

ניתן לאחזר מדדים של תנועה לא חוקית וניראות מ-ADH API באמצעות נקודות הקצה generateIvtReport ו-startAnalysis. במקרה של תנועה פסולה, צריך לאחזר את המדדים דרך generateIvtReport כדי שהתווית adh-mrc-accredited תיושם והמדדים יקבלו אישור מ-MRC. באופן דומה, יש להשתמש בשאילתה הגלובלית שצוינה בהמשך כדי לקבל מדדי ניראות דרך ADH API, לצורך קבלת אישור מטעם ה-MRC. בקטע הזה מוסבר איך לשלוח בקשה לנקודת הקצה הזו באמצעות ספריית הלקוח של Python.

פועלים לפי ההוראות להגדרה ולהרשאה/אימות המפורטות במדריך למתחילים של API.

אחרי שמחליפים את השדות הבאים במידע שרלוונטי לחשבון שלכם, אפשר להריץ את השאילתה הבאה כדי לאחזר דוח על תנועה לא חוקית YouTube Reserve הקמפיינים:

  • קובץ Secret של לקוחות
  • מספר לקוח
  • מפתח API
  • Order IDs
  • אזור זמן

קוד לדוגמה

תנועה לא חוקית (IVT)

from __future__ import print_function
import json
import os.path
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build

# If modifying these scopes, delete the file `token.json`.
SCOPES = ['https://www.googleapis.com/auth/adsdatahub']
TOKEN_FILE = 'token.json'

creds = None

# The file token.json stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
if os.path.exists(TOKEN_FILE):
    creds = Credentials.from_authorized_user_file(TOKEN_FILE, SCOPES)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
    if creds and creds.expired and creds.refresh_token:
        creds.refresh(Request())
    else:
        flow = InstalledAppFlow.from_client_secrets_file(
            'YOUR_CLIENT_SECRETS.json', SCOPES)
        creds = flow.run_local_server(port=0)
    # Save the credentials for the next run.
    with open(TOKEN_FILE, 'w') as token:
        token.write(creds.to_json())

service = build('adsdatahub', 'v1', credentials=creds,
                developerKey='YOUR_API_KEY',
                discoveryServiceUrl='https://adsdatahub.googleapis.com/$discovery/rest?version=v1&labels=')

body = {
    'ads_data_customer_id': YOUR_CUSTOMER_ID,
    'start_date': {
        'year': 2019,
        'month': 12,
        'day': 15
    },
    'end_date': {
        'year': 2019,
        'month': 12,
        'day': 20
    },
    'time_zone': 'YOUR_TIMEZONE',
    'yt_reserve_dimensions': {
        'order_ids': [YOUR_ORDER_IDS],
        'metric_type': 'METRIC_TYPE_IMPRESSION'
    },
    'dest_table': 'YOUR_DESTINATION_TABLE'
}

resp = service.customers().generateIvtReport(name='customers/YOUR_CUSTOMER_ID,
                                             body=body).execute()
print(json.dumps(resp))

מדדי ניראות

from __future__ import print_function
import json
import os.path
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build

# If modifying these scopes, delete the file `token.json`.
SCOPES = ['https://www.googleapis.com/auth/adsdatahub']
TOKEN_FILE = 'token.json'

creds = None

# The file token.json stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
if os.path.exists(TOKEN_FILE):
    creds = Credentials.from_authorized_user_file(TOKEN_FILE, SCOPES)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
    if creds and creds.expired and creds.refresh_token:
        creds.refresh(Request())
    else:
        flow = InstalledAppFlow.from_client_secrets_file(
            'YOUR_CLIENT_SECRETS.json', SCOPES)
        creds = flow.run_local_server(port=0)
    # Save the credentials for the next run.
    with open(TOKEN_FILE, 'w') as token:
        token.write(creds.to_json())

service = build('adsdatahub', 'v1', credentials=creds,
                developerKey='YOUR_API_KEY',
                discoveryServiceUrl='https://adsdatahub.googleapis.com/$discovery/rest?version=v1&labels=')

name = 'customers/global/analysisQueries/ad88e8562a8f4baa9c8522945fe95522'
body = {
  'spec': {
    'ads_data_customer_id': YOUR_CUSTOMER_ID,
    'start_date': {
      'year': 2019,
      'month': 12,
      'day': 15
    },
    'end_date': {
      'year': 2019,
      'month': 12,
      'day': 20
    },
    'time_zone': 'YOUR_TIMEZONE',
    'parameter_values': {
      'line_item_ids': {
        'array_value': {
          'values': [
            {
              'value': 'YOUR_LINE_ITEM_ID'
            },
          ]
        }
      }
    }
  },
  'dest_table': 'YOUR_DESTINATION_TABLE',
  'customer_id': YOUR_CUSTOMER_ID
}

resp = service.customers().analysisQueries().start(name=name,body=body).execute()
print(json.dumps(resp))

חישוב מדדי הניראות בניכוי תנועה פסולה כללית (GIVT)

יש להשתמש בנוסחאות הבאות כדי להסיק מדדי ניראות שקיבלו אישור MRC, בניכוי תנועה לא חוקית כללית (GIVT):

  • סה"כ חשיפות (נטו של GIVT): סה"כ חשיפות - חשיפות לא חוקיות כלליות
  • חשיפות שניתנות לצפייה (נטו של GIVT): חשיפות שניתנות לצפייה + חשיפות לא חוקיות שניתנות לצפייה - חשיפות שניתנות לצפייה
  • חשיפות שניתנות למדידה (נטו של GIVT): חשיפות שניתנות למדידה + חשיפות לא חוקיות שניתנות למדידה – חשיפות שניתנות למדידה של GIVT
  • חשיפות כשירות (נטו של GIVT): חשיפות תקינות + חשיפות כשירות לא תקפות – חשיפות תקינות של תנועה לא חוקית כללית (GIVT)
  • חשיפות שאינן ניתנות לצפייה (נטו של GIVT) : חשיפות שניתנות למדידה (נטו של GIVT) - חשיפות שניתנות לצפייה (נטו של GIVT)
  • חשיפות שלא ניתנות למדידה (נטו של GIVT): חשיפות תקינות (נטו של GIVT) – חשיפות שניתנות למדידה (נטו של GIVT)
  • אחוז החשיפות שניתנות למדידה (נטו של GIVT): חשיפות שניתנות למדידה (נטו של תנועה פסולה כללית (GIVT)) / חשיפות כשירות (נטו של GIVT)
  • % החשיפות שניתנות לצפייה (נטו של GIVT): חשיפות שניתנות לצפייה (נטו של GIVT) / חשיפות שניתנות למדידה (נטו של GIVT)