คู่มือนี้มีตัวอย่างการเรียกใช้ปลายทาง REST โดยตรง โดยไม่มี ที่ใช้ไลบรารีของไคลเอ็นต์
ข้อกำหนดเบื้องต้น
ตัวอย่างทั้งหมดด้านล่างนี้มีวัตถุประสงค์เพื่อคัดลอกและวางลงใน Bash เชลล์โดยใช้คำสั่ง curl
นอกจากนี้ คุณจะต้องมีโทเค็นของนักพัฒนา การทดสอบ สิทธิ์การเข้าถึงบัญชีนั้นดีหรือไม่ และ บัญชีดูแลจัดการ Google Ads ที่มีบัญชีลูกค้าอย่างน้อย 1 บัญชี
ตัวแปรสภาพแวดล้อม
ป้อนข้อมูลประจำตัวของบัญชีและรหัสบัญชีด้านล่าง แล้วคัดลอกและวางลงใน เพื่อกำหนดค่าตัวแปรสภาพแวดล้อมที่ใช้ในตัวอย่างถัดไป คู่มือการให้สิทธิ์จะบอกวิธีสร้าง โทเค็นเพื่อการเข้าถึง OAuth 2.0
API_VERSION="17"
DEVELOPER_TOKEN="DEVELOPER_TOKEN"
OAUTH2_ACCESS_TOKEN="OAUTH_ACCESS_TOKEN"
MANAGER_CUSTOMER_ID="MANAGER_CUSTOMER_ID"
CUSTOMER_ID="CUSTOMER_ID"
รหัสออบเจ็กต์เพิ่มเติมที่ไม่บังคับ
ตัวอย่างต่อไปนี้ใช้กับงบประมาณหรือแคมเปญที่มีอยู่แล้ว หากคุณ มีรหัสของออบเจ็กต์ที่มีอยู่เพื่อใช้กับตัวอย่างเหล่านี้ โปรดป้อนรหัสที่ด้านล่าง
BUDGET_ID=BUDGET_ID
CAMPAIGN_ID=CAMPAIGN_ID
มิเช่นนั้น แอตทริบิวต์Mutates - สร้างตัวอย่างจะสร้างงบประมาณใหม่ และแคมเปญ
ค้นหา
คู่มือตำราอาหารในการค้นหามีข้อมูลการรายงานหลายอย่าง ตัวอย่างที่สอดคล้องกับหน้าจอเริ่มต้นของ Google Ads บางส่วนและทำงานร่วมกับ ตัวแปรสภาพแวดล้อมเดียวกันกับที่ใช้ในคู่มือนี้ คำถามแบบอินเทอร์แอกทีฟของเรา เครื่องมือสร้างคือ ยังเป็นแหล่งข้อมูลที่ดีในการสร้างการค้นหาที่กำหนดเองแบบอินเทอร์แอกทีฟ
แบ่งหน้าแล้ว
เมธอด search
ใช้การใส่เลขหน้าซึ่งมีขนาดหน้าคงที่ 10,000 รายการและ
page_token
ที่ระบุควบคู่กับ query
cURL
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:search" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data '{ "query": " SELECT campaign.name, campaign_budget.amount_micros, campaign.status, campaign.optimization_score, campaign.advertising_channel_type, metrics.clicks, metrics.impressions, metrics.ctr, metrics.average_cpc, metrics.cost_micros, campaign.bidding_strategy_type FROM campaign WHERE segments.date DURING LAST_7_DAYS AND campaign.status != 'REMOVED' ", "page_token":"${PAGE_TOKEN}" }'
GAQL
SELECT campaign.name, campaign_budget.amount_micros, campaign.status, campaign.optimization_score, campaign.advertising_channel_type, metrics.clicks, metrics.impressions, metrics.ctr, metrics.average_cpc, metrics.cost_micros, campaign.bidding_strategy_type FROM campaign WHERE segments.date DURING LAST_7_DAYS AND campaign.status != 'REMOVED'
สตรีมมิง
เมธอด searchStream
จะสตรีมผลลัพธ์ทั้งหมดเป็นการตอบกลับครั้งเดียว ดังนั้น
ไม่รองรับช่อง pageSize
cURL
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:searchStream" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data '{ "query": " SELECT campaign.name, campaign_budget.amount_micros, campaign.status, campaign.optimization_score, campaign.advertising_channel_type, metrics.clicks, metrics.impressions, metrics.ctr, metrics.average_cpc, metrics.cost_micros, campaign.bidding_strategy_type FROM campaign WHERE segments.date DURING LAST_7_DAYS AND campaign.status != 'REMOVED' " }'
GAQL
SELECT campaign.name, campaign_budget.amount_micros, campaign.status, campaign.optimization_score, campaign.advertising_channel_type, metrics.clicks, metrics.impressions, metrics.ctr, metrics.average_cpc, metrics.cost_micros, campaign.bidding_strategy_type FROM campaign WHERE segments.date DURING LAST_7_DAYS AND campaign.status != 'REMOVED'
เปลี่ยนแปลง
คุณสามารถส่งการดำเนินการเปลี่ยนแปลงหลายรายการ (create
, update
หรือ remove
) ใน
เนื้อหาของคำขอ JSON เดี่ยวโดยป้อนข้อมูลในอาร์เรย์ operations
สร้าง
ตัวอย่างนี้สร้างงบประมาณแคมเปญที่ใช้ร่วมกัน 2 รายการในคำขอเดียว
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaignBudgets:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'operations': [ { 'create': { 'name': 'My Campaign Budget #${RANDOM}', 'amountMicros': 500000, } }, { 'create': { 'name': 'My Campaign Budget #${RANDOM}', 'amountMicros': 500000, } } ] }"
ตัวอย่างถัดไปใช้งบประมาณ BUDGET_ID
ของแคมเปญที่มีอยู่ คุณสามารถ
คัดลอกและวางจากเอาต์พุตของขั้นตอนก่อนหน้า
BUDGET_ID=BUDGET_ID
แหล่งข้อมูลที่อ้างอิงถึงแหล่งข้อมูลอื่นๆ ดำเนินการโดย
ชื่อทรัพยากร แคมเปญที่สร้างไว้ด้านล่าง
อ้างถึง campaignBudget
ตามชื่อทรัพยากรที่มีค่าสตริง
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'operations': [ { 'create': { 'status': 'PAUSED', 'advertisingChannelType': 'SEARCH', 'geoTargetTypeSetting': { 'positiveGeoTargetType': 'PRESENCE_OR_INTEREST', 'negativeGeoTargetType': 'PRESENCE_OR_INTEREST' }, 'name': 'My Search campaign #${RANDOM}', 'campaignBudget': 'customers/${CUSTOMER_ID}/campaignBudgets/${BUDGET_ID}', 'targetSpend': {} } } ] }"
อัปเดต
อัปเดตแอตทริบิวต์ของออบเจ็กต์ที่มีอยู่โดยใช้การดำเนินการ update
ถัดไป
ตัวอย่างเช่น ใช้แคมเปญที่มีอยู่ คุณสามารถคัดลอกและวางจาก
เอาต์พุตของขั้นตอน
CAMPAIGN_ID=CAMPAIGN_ID
การอัปเดตทั้งหมดต้องมีฟิลด์ updateMask
ซึ่งเป็นรายการที่คั่นด้วยจุลภาคของ
แอตทริบิวต์ JSON ใดควรอยู่ในคำขอ ควรใช้เป็นแอตทริบิวต์
อัปเดต แอตทริบิวต์ที่แสดงใน updateMask
แต่ไม่มีอยู่ในคำขอ
ล้างเนื้อหาในออบเจ็กต์ แอตทริบิวต์ที่ไม่ได้แสดงใน updateMask
แต่มีอยู่
ในส่วนเนื้อหาของคำขอ จะถูกละเว้น
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'operations': [ { 'update': { 'resourceName': 'customers/${CUSTOMER_ID}/campaigns/${CAMPAIGN_ID}', 'name': 'A changed campaign name #${RANDOM}', }, 'updateMask': 'name' } ], }"
นำออก
ระบบจะนำออบเจ็กต์ออกโดยการระบุชื่อทรัพยากรเป็นการดำเนินการ remove
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'operations': [ { 'remove': 'customers/${CUSTOMER_ID}/campaigns/${CAMPAIGN_ID}' } ], }"
ไม่สำเร็จบางส่วน
เมื่อมีการดำเนินการหลายรายการในคำขอเดียว ให้ระบุ (ไม่บังคับ)
partialFailure
หากเป็น true
จะมีการดำเนินการที่สําเร็จ และ
การดำเนินการที่ไม่ถูกต้องแสดงผลข้อผิดพลาด หากเป็น false
การดำเนินการทั้งหมดในคำขอ
ประสบความสำเร็จได้ก็ต่อเมื่อทุกอย่างถูกต้อง
ตัวอย่างถัดไปใช้แคมเปญที่มีอยู่ คุณสามารถคัดลอกและวางจาก สร้างตัวอย่างเอาต์พุต
CAMPAIGN_ID=CAMPAIGN_ID
คำขอต่อไปนี้มีการดำเนินการ 2 อย่าง ความพยายามครั้งแรกที่จะเปลี่ยน
ของแคมเปญที่ระบุ และกลยุทธ์ถัดไปพยายามนำ
แคมเปญที่มีรหัสไม่ถูกต้อง เนื่องจากการดำเนินการที่สองทำให้เกิดข้อผิดพลาด (
รหัสแคมเปญไม่ถูกต้อง) และเนื่องจากตั้งค่า partialFailure
เป็น false
ค่า
การดำเนินการแรกไม่สำเร็จและกลยุทธ์การเสนอราคาของแคมเปญที่มีอยู่
ไม่ได้อัปเดต
curl --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'partialFailure': false, 'operations': [ { 'update': { 'resourceName': 'customers/${CUSTOMER_ID}/campaigns/${CAMPAIGN_ID}', 'manualCpc': { 'enhancedCpcEnabled': false } }, 'updateMask': 'manual_cpc.enhanced_cpc_enabled' }, { 'remove': 'customers/${CUSTOMER_ID}/campaigns/INVALID_CAMPAIGN_ID' } ] }"
การดำเนินการที่จัดกลุ่ม
เมธอด googleAds:mutate
รองรับการส่งกลุ่มการดำเนินการด้วย
ทรัพยากรหลากหลายประเภท คุณสามารถส่งการดำเนินการหลายประเภทที่แตกต่างกันให้กับ
เชื่อมโยงลำดับการดำเนินการที่ควรดำเนินการเป็นกลุ่มเข้าด้วยกัน
ชุดการดำเนินการจะสำเร็จถ้าไม่มีการดำเนินการที่ล้มเหลวหรือล้มเหลวทั้งหมด หากมี
การดำเนินการเดียวล้มเหลว
ตัวอย่างนี้แสดงการสร้างงบประมาณแคมเปญ แคมเปญ กลุ่มโฆษณา และ รวมกันเป็นชุดของการทำงานเดียว การดำเนินการติดต่อกันแต่ละรายการจะขึ้นอยู่กับ จากอันก่อนหน้า หากไม่สำเร็จ การดำเนินการทั้งกลุ่มจะล้มเหลว
ใช้จำนวนเต็มลบ (-1
, -2
, -3
) เป็นตัวยึดตำแหน่งในทรัพยากร
และเติมแบบไดนามิกขณะรันไทม์ด้วยผลลัพธ์จากลำดับ
การดำเนินงานได้
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'mutateOperations': [ { 'campaignBudgetOperation': { 'create': { 'resourceName': 'customers/${CUSTOMER_ID}/campaignBudgets/-1', 'name': 'My Campaign Budget #${RANDOM}', 'deliveryMethod': 'STANDARD', 'amountMicros': 500000, 'explicitlyShared': false } } }, { 'campaignOperation': { 'create': { 'resourceName': 'customers/${CUSTOMER_ID}/campaigns/-2', 'status': 'PAUSED', 'advertisingChannelType': 'SEARCH', 'geoTargetTypeSetting': { 'positiveGeoTargetType': 'PRESENCE_OR_INTEREST', 'negativeGeoTargetType': 'PRESENCE_OR_INTEREST' }, 'name': 'My Search campaign #${RANDOM}', 'campaignBudget': 'customers/${CUSTOMER_ID}/campaignBudgets/-1', 'targetSpend': {} } } }, { 'adGroupOperation': { 'create': { 'resourceName': 'customers/${CUSTOMER_ID}/adGroups/-3', 'campaign': 'customers/${CUSTOMER_ID}/campaigns/-2', 'name': 'My ad group #${RANDOM}', 'status': 'PAUSED', 'type': 'SEARCH_STANDARD' } } }, { 'adGroupAdOperation': { 'create': { 'adGroup': 'customers/${CUSTOMER_ID}/adGroups/-3', 'status': 'PAUSED', 'ad': { 'responsiveSearchAd': { 'headlines': [ { 'pinned_field': 'HEADLINE_1', 'text': 'An example headline' }, { 'text': 'Another example headline' }, { 'text': 'Yet another headline' } ], 'descriptions': [ { 'text': 'An example description' }, { 'text': 'Another example description' } ], 'path1': 'all-inclusive', 'path2': 'deals' }, 'finalUrls': ['https://www.example.com'] } } } } ] }"
การจัดการบัญชี
การสร้างบัญชี
สร้างบัญชีใหม่โดยใช้เมธอด createCustomerClient
โปรดทราบว่า URL
คุณต้องใช้รหัสบัญชีดูแลจัดการแทนรหัสบัญชีลูกค้า ลูกค้าใหม่
บัญชีสร้างขึ้นภายใต้บัญชีดูแลจัดการ
curl f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${MANAGER_CUSTOMER_ID}:createCustomerClient" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'customerClient': { 'descriptiveName': 'My Client #${RANDOM}', 'currencyCode': 'USD', 'timeZone': 'America/New_York' } }"
แสดงรายการบัญชีที่เข้าถึงได้
ใช้คำขอ GET
แบบง่ายไปยังเมธอด listAccessibleCustomers
เพื่อรับรายการ
ของบัญชี Google Ads ที่เข้าถึงได้ด้วยโทเค็นเพื่อการเข้าถึง OAuth 2.0 ที่กำหนด ไม่มีผู้จัดการ
หรือรหัสบัญชีลูกค้าในคำขอนี้
curl -f --request GET "https://googleads.googleapis.com/v${API_VERSION}/customers:listAccessibleCustomers" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
การอัปโหลดชิ้นงานไบนารี
เมธอด assets:mutate
ใช้สำหรับการอัปโหลดและจัดการ
ชิ้นงาน ข้อมูลไบนารี เช่น รูปภาพ จะเข้ารหัสเป็น
สตริงที่ใช้การเข้ารหัส base64 แบบมาตรฐานพร้อมระยะห่างจากขอบ มาตรฐานหรือ
ยอมรับการเข้ารหัส base64 ที่ปลอดภัยสำหรับ URL ไม่ว่าจะมีหรือไม่มีระยะห่างจากขอบ
ตัวอย่างนี้เข้ารหัส GIF ขนาด 1 พิกเซลเพื่อให้ตัวอย่างมีความกระชับ ในทางปฏิบัติ ค่า
เพย์โหลด data
มีขนาดใหญ่กว่ามาก
ใช้ยูทิลิตีบรรทัดคำสั่ง base64
(ส่วนหนึ่งของ
ยูทิลิตีหลักของ GNU)
เพื่อเข้ารหัสรูปภาพ GIF ขนาด 1 พิกเซล
base64 1pixel.gif
ค่าที่เข้ารหัสฐาน 64 จะระบุเป็นแอตทริบิวต์ data
ในคำขอ API
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/assets:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'operations': [ { 'create': { 'name': 'My image asset #${RANDOM}', 'type': 'IMAGE', 'imageAsset': { 'data': 'R0lGODlhAQABAAAAACH5BAEAAAAALAAAAAABAAEAAAIA' } } } ] }"