סקירה כללית
ההוראות הבאות מספקות דוגמאות לשאילתות על תנועה תקינה של ניראות ועל תנועה פסולה באמצעות ה-API. המדדים האלה מוגבלים למלאי שטחי הפרסום שנרכש באמצעות Google Ads ו-Display & Video 360.
שימו לב: כדי להשתמש במדדי צפיות תקפות שאושרו על ידי MRC, צריך להשתמש ב-ADH API, כי אין שאילתה משויכת עם תבנית. בנוסף, חשוב לא להתבלבל בין מדדי הצפיות התקפות לבין מדדי הניראות.
בוחרים את פלטפורמת הקנייה שרוצים לשלוח שאילתה לגבי מדדי הניראות שלה:
שאילתות על מדדי ניראות באמצעות ממשק המשתמש
השאילתה של תבנית הניראות מספקת מדדים שאושרו על ידי MRC.
ההסמכה של MRC היא בינארית – התוצאות יכולות לקבל אישור MRC או לא – והיא חלה על כל טבלת התוצאות. כדי שהמדדים יקבלו אישור של MRC, צריך להריץ את השאילתה דרך התבנית, בלי לשנות אותה, ובמצב בדיקת הבדלים. הסמכת ה-MRC של Ads Data Hub לא חלה על שאילתות שמופעלות במצב רעש.
כדי להריץ את השאילתה שקיבלה אישור MRC באמצעות התבנית:
- פועלים לפי ההוראות ליצירת שאילתה, ומוודאים שבוחרים באפשרות Google Ads בתור פלטפורמת הקנייה ובאפשרות Video viewability by device type (ניראות של מודעות וידאו לפי סוג מכשיר) בתור תבנית השאילתה.
- לוחצים על הכפתור Run (הפעלה) לצד Use template (שימוש בתבנית).
שאילתות לגבי מדדי תנועה פסולה (IVT) וניראות באמצעות ה-API
אפשר לאחזר מדדים של תנועה פסולה וניראות מ-ADH API באמצעות נקודות הקצה generateIvtReport ו-startAnalysis. כדי שהמדדים שלכם יקבלו את התווית adh-mrc-accredited ויוסמכו על ידי ה-MRC, אתם צריכים לאחזר את המדדים של תנועה פסולה (IVT) דרך generateIvtReport . באופן דומה, כדי לקבל הסמכה של MRC, צריך להשתמש בשאילתה עם אחזור נתונים גלובלי שמפורטת בהמשך למדדי ניראות דרך ADH API. בקטע הזה מוסבר איך לשלוח בקשה לנקודת הקצה הזו באמצעות ספריית הלקוח של Python.
פועלים לפי הוראות ההגדרה והאימות/ההרשאה שמפורטות במדריך למתחילים בנושא API.
אחרי שתחליפו את השדות הבאים במידע שרלוונטי לחשבון שלכם, תוכלו להריץ את השאילתה שבהמשך כדי לאחזר דוח תנועה פסולה (IVT) בקמפיינים של Google Ads :
- קובץ סודות לקוח
- מספר לקוח
- מפתח API
- Campaign IDs
- אזור זמן
קוד לדוגמה
תנועה לא חוקית
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', static_discovery=False)
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',
# Optional. Defaults to 'DAY' (one set of rows per day). Use
# 'ENTIRE_DATE_RANGE' for a single set of rows covering the whole range.
'date_dimension_granularity': 'DAY',
'google_ads_dimensions': {
'campaign_ids': [YOUR_CAMPAIGN_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))
מדדי ניראות
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', static_discovery=False)
name = 'customers/global/analysisQueries/f41320e7296d49158e572aba662f35b1'
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': {
'campaign_ids': {
'array_value': {
'values': [
{
'value': 'YOUR_CAMPAIGN_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) / חשיפות שניתנות למדידה (נטו ב-GIVT)