סקירה כללית
בהוראות שבהמשך מופיעות דוגמאות לאופן שליפת נתונים של תנועה תקפה של שיעורי צפייה ושל תנועה פסולה באמצעות ה-API. המדדים האלה מוגבלים למלאי שטחי פרסום שנרכש באמצעות Google Ads, Display & Video 360 ו-YouTube Reserve.
שימו לב: כדי להשתמש במדדי הצפייה של TrueView שאושרו על ידי MRC, צריך להשתמש ב-ADH API, כי אין שאילתה מבוססת-תבנית שמשויכת למדדים האלה. בנוסף, חשוב לשים לב להבדל בין מדדי צפייה במודעות TrueView לבין מדדי ניראות.
בוחרים את פלטפורמת הקנייה שלגביה רוצים לשלוח שאילתה לגבי מדדי ניראות:
שאילתת מדדי ניראות באמצעות ממשק המשתמש
שאילתת הנראות מבוססת על תבנית ומספקת מדדים שאושרו על ידי MRC.
ההסמכה של MRC היא בינארית – התוצאות שלכם יכולות להיות מוסמכות או לא – והיא חלה על כל טבלת התוצאות. ב-BigQuery, התווית adh-mrc-accredited מוחלת על כל התוצאות שאושרו על ידי MRC. כדי שהמדדים שלכם יקבלו אישור של MRC, אתם צריכים להריץ את השאילתה דרך התבנית.
כדי להריץ את השאילתה שאושרה על ידי MRC באמצעות התבנית:
- פועלים לפי ההוראות במאמר איך יוצרים שאילתה, ומוודאים שבוחרים באפשרות Google Ads בתור פלטפורמת הקנייה ובאפשרות Video Viewability (שיעור הצפייה במודעות וידאו) בתור תבנית השאילתה.
- לוחצים על הלחצן הפעלה לצד שימוש בתבנית.
שאילתה לגבי מדדי תנועה פסולה וניראות באמצעות ה-API
אפשר לאחזר נתונים של תנועה פסולה ומדדי נראות מ-ADH API באמצעות נקודות הקצה generateIvtReport ו-startAnalysis. כדי שהadh-mrc-accredited תווית תוחל על המדדים שלכם והם יקבלו אישור של MRC, צריך לאחזר את המדדים של תנועה פסולה באמצעות generateIvtReport . באופן דומה, כדי לקבל אישור מ-MRC, צריך להשתמש בשאילתה עם אחזור נתונים גלובלי שמפורטת בהמשך כדי לחשב את מדדי הניראות דרך ADH API. בקטע הזה מוסבר איך לשלוח בקשה לנקודת הקצה הזו באמצעות ספריית הלקוח של Python.
פועלים לפי ההוראות להגדרה ולאישור/אימות שמפורטות במדריך למתחילים בנושא API.
אחרי שתחליפו את השדות הבאים במידע שרלוונטי לחשבון שלכם, תוכלו להריץ את השאילתה שבהמשך כדי לאחזר דוח על תנועה לא חוקית בקמפיינים Google Ads שלכם:
- קובץ אובייקטים מסוג secret
- מספר לקוח
- מפתח API
- Campaign IDs
- אזור זמן
קוד לדוגמה
תנועה לא חוקית
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',
'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))
מדדי ניראות
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/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))
חישוב מדדי נראות ללא תנועה פסולה כללית
כדי לחשב את מדדי הניראות שקיבלו אישור של MRC, בניכוי תנועה פסולה כללית (GIVT), צריך להשתמש בנוסחאות הבאות:
- סה"כ חשיפות (לא כולל GIVT): סה"כ חשיפות – חשיפות של תנועה כללית לא חוקית
- חשיפות שניתנות לצפייה (לא כולל GIVT): חשיפות שניתנות לצפייה + חשיפות פסולות שניתנות לצפייה – חשיפות שניתנות לצפייה של תנועה לא חוקית כללית (GIVT)
- חשיפות שניתנות למדידה (לא כולל GIVT): חשיפות שניתנות למדידה + חשיפות פסולות שניתנות למדידה – חשיפות שניתנות למדידה של תנועה כללית לא חוקית (GIVT)
- חשיפות שעומדות בדרישות (לא כולל GIVT): חשיפות שעומדות בדרישות + חשיפות לא חוקיות שעומדות בדרישות – חשיפות שעומדות בדרישות של GIVT
- חשיפה שלא ניתנת לצפייה (לא כולל GIVT) : חשיפות שניתנות למדידה (לא כולל GIVT) – חשיפות שניתנות לצפייה (לא כולל GIVT)
- חשיפות שלא ניתן למדוד (לאחר ניכוי GIVT): חשיפות שעומדות בדרישות (לאחר ניכוי GIVT) – חשיפות שניתנות למדידה (לאחר ניכוי GIVT)
- % חשיפות שניתנות למדידה (נטו של GIVT): חשיפות שניתנות למדידה (נטו של GIVT) / חשיפות שעומדות בדרישות (נטו של GIVT)
- % חשיפות שניתנות לצפייה (לא כולל GIVT): חשיפות שניתנות לצפייה (לא כולל GIVT) חלקי חשיפות שניתנות למדידה (לא כולל GIVT)