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

סקירה כללית

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

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

בוחרים את חלון הקנייה שעבורו רוצים לשלוח שאילתה לגבי מדדי נכונות הצפייה:

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

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

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

כדי להריץ את השאילתה שקיבלה אישור MRC דרך התבנית:

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

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

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

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

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

  • קובץ סודות הלקוח
  • מספר לקוח
  • מפתח 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))

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

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

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