5.2 การรายงานประสิทธิภาพ Performance Max (จํานวนคลิก, CPC, CPA, ROAS, มูลค่า Conversion, คําสั่งซื้อ, ตามผลิตภัณฑ์)
บทนําและผลกระทบทางธุรกิจ
คุณสามารถสร้างรายงานเพื่อวัดประสิทธิภาพของบัญชีหรือแคมเปญได้ การวิเคราะห์ข้อมูลจะช่วยให้ผู้ขายปรับเปลี่ยนและปรับปรุงแคมเปญให้บรรลุวัตถุประสงค์ทางธุรกิจได้
เราขอแนะนําให้รายงานเมตริกหลักเหล่านี้เป็นประจําทุกสัปดาห์และทุกเดือน
เมตริก | ความสําคัญ |
---|---|
การแสดงผล | วัดความถี่ที่โฆษณาในแคมเปญแสดง และเป็นสัญญาณแรกที่แสดงให้ผู้ขายเห็นว่า แคมเปญเริ่มต้นแล้วจริงๆ |
การคลิก* | จํานวนครั้งที่ผู้ใช้คลิกโฆษณาแคมเปญ เป็นสัญญาณบ่งบอกว่าโฆษณามีความน่าสนใจมากพอสําหรับผู้คนที่ต้องการทราบข้อมูลเพิ่มเติม |
ต้นทุน* | จํานวนเงินที่แคมเปญใช้ไป (ต่างจากงบประมาณรายวันที่ผู้ขายกําหนดไว้เป็นส่วนหนึ่งของการตั้งค่าแคมเปญ) |
Conversion* | จํานวนการซื้อที่ดําเนินการบนเว็บไซต์ของผู้ขายซึ่งเป็นแหล่งที่มาของแคมเปญ |
มูลค่า Conversion | รายได้นี้คือรายได้รวมของการซื้อที่เกิดจากแคมเปญ |
ผลตอบแทนจากค่าโฆษณา (ROAS) | นี่คือมูลค่า Conversion ทั้งหมดหารด้วยค่าใช้จ่ายรวม กล่าวคือ ค่านี้เป็นมูลค่า Conversion เฉลี่ยที่ผู้ขายได้รับจากเงินแต่ละบาทที่ใช้จ่ายไปกับโฆษณา แม้ว่าผู้ขายจะเข้าใจต้นทุนแคมเปญเป็นอย่างดี แต่ ROAS จะพิจารณาว่าแคมเปญเป็นการลงทุนที่คุ้มค่าหรือไม่ |
* ต้องใช้เพื่อดําเนินการตามฟังก์ชันขั้นต่ําที่จําเป็น (RMF) สําหรับ Performance Max
คําแนะนําประสบการณ์ของผู้ใช้
เมื่อออกแบบการรายงาน Performance Max คุณควรคํานึงถึงระดับความเชี่ยวชาญด้านการตลาดดิจิทัลสําหรับฐานผู้ใช้ของผู้ขาย ผู้ขายของคุณอาจไม่เข้าใจความหมายของเมตริกการตลาดดิจิทัลเหล่านี้ ในกรณีนี้ คุณควร อธิบายแต่ละเมตริกด้วยคําที่สัมพันธ์กัน ตัวอย่างเช่น การแสดงผล คือจํานวนครั้งที่ผลิตภัณฑ์ของคุณแสดงในโฆษณา
นอกจากนี้ คุณควรทราบความคาดหวังว่าผู้ขายจะเริ่มเห็นผลโดยสมบูรณ์จากการใช้แคมเปญ Performance Max เมื่อใด แคมเปญประเภทนี้ขับเคลื่อนโดยโมเดลแมชชีนเลิร์นนิง ซึ่งฝึกและปรับเปลี่ยนตามประสิทธิภาพแคมเปญ กระบวนการเพิ่มประสิทธิภาพ หรือที่เรียกอีกอย่างว่าระยะเวลาเรียนรู้ โดยทั่วไปจะใช้เวลา 1 ถึง 2 สัปดาห์ ดูรายละเอียดเพิ่มเติมได้ในปัญหาการตั้งค่าแคมเปญ Performance Max นอกจากนี้คุณอาจพิจารณาถึงเรื่องนี้หลังจากที่ผู้ขายสร้างแคมเปญแล้ว (ดูตัวอย่างของกล่องโต้ตอบการเปลี่ยนได้ด้านล่าง)
รวมถึงในบริบทของแคมเปญที่เพิ่งสร้างขึ้น ด้านล่างนี้เป็นตัวอย่าง
สําหรับการให้สถิติประสิทธิภาพของแคมเปญโดยละเอียด เราขอแนะนําหน้าเว็บเฉพาะที่ผู้ขายสามารถใช้ติดตามเมตริกสําคัญๆ ได้ คุณอาจอนุญาตให้ผู้ขายเปลี่ยนแปลงเมตริกที่แสดงได้ที่นี่ แต่โดยค่าเริ่มต้น เราขอแนะนําให้แสดงการแสดงผล จํานวนคลิก Conversion และมูลค่า Conversion คุณอาจพิจารณาให้ได้ว่ามูลค่า Conversion คือเมตริกที่แคมเปญ Performance Max เพิ่มประสิทธิภาพให้ ตัวอย่างลักษณะของหน้าจอการรายงานแคมเปญ แสดงอยู่ด้านล่างนี้
คําแนะนําด้านเทคนิค
ด้วยตัวเลือกการรายงานที่ยืดหยุ่นของ Google API ผู้ลงโฆษณาของคุณสามารถเรียกดูข้อมูลประสิทธิภาพสําหรับทรัพยากรทั้งหมด ซึ่งรวมถึงทุกอย่างจากทั้งแคมเปญ ไปจนถึงการดูการคลิกและการกระทําที่ถือเป็น Conversion ตัวอย่างเช่น การกระทําที่ถือเป็น Conversion จะใช้ได้ในทรัพยากร conversion_action
เตรียมการค้นหา
ตําราข้อความค้นหาจะแสดงชุดข้อความค้นหาใน ภาษาของคําค้นหาของ Google Ads (GAQL) ที่แสดงวิธีแสดงข้อมูลเหมือนกับบนหน้าจอใน UI ของ Google Ads คุณสามารถใช้การค้นหาเหล่านี้ตามที่เป็นอยู่ หรือใช้เป็นจุดเริ่มต้นในการสร้างการค้นหาของคุณเอง ส่วนแคมเปญ มีตัวอย่างรายงานที่ใช้กันทั่วไปสําหรับข้อมูลพื้นฐาน (ภาพรวมของแคมเปญ ได้แก่ เมตริกการคลิก การแสดงผล คะแนนการเพิ่มประสิทธิภาพของแคมเปญ และสถานะของแคมเปญ)
การค้นหาจะระบุทรัพยากรเพื่อสืบค้น แอตทริบิวต์ทรัพยากรและเมตริกประสิทธิภาพที่จะดึงข้อมูล ส่วนที่ใช้สําหรับกรองคําขอ และกลุ่มที่จะใช้เพื่อแจกแจงสถิติประสิทธิภาพเพิ่มเติม
เพื่อความสะดวก Google ยังมีเครื่องมือสร้างคําค้นหาของ Google Ads เพื่อช่วยคุณสร้างคําค้นหา GAQL
ใช้คําค้นหา GoogleAdsService
คุณสามารถใช้แคมเปญ GoogleAdsService.SearchStream
ในการเรียกแอตทริบิวต์และเมตริกประสิทธิภาพสําหรับแคมเปญ Performance Max เช่นเดียวกับแคมเปญประเภทอื่นๆ
GoogleAdsService
เป็นบริการรวมเพียงรายการเดียวสําหรับการดึงข้อมูลและเมตริกในทรัพยากรต่างๆ โดยสามารถส่งกลับผลลัพธ์ในวิธีต่อไปนี้:
GoogleAdsService.SearchStream
แสดงผลแถวทั้งหมดในการตอบกลับแบบสตรีมเดียว ซึ่งมีประสิทธิภาพมากกว่าสําหรับชุดผลลัพธ์ขนาดใหญ่ (มากกว่า 10,000 แถว)SearchStream
อาจเหมาะสมกว่าหากคุณต้องการดาวน์โหลดข้อมูล ให้เร็วที่สุดเท่าที่จะทําได้GoogleAdsService.Search
จะแยกคําตอบขนาดใหญ่ออกเป็นหน้าผลการค้นหาที่สามารถจัดการได้ การดําเนินการนี้อาจเหมาะสมกว่าหากคุณต้องการแสดง หน้าผลการค้นหาทีละหน้า
สําหรับสรุปคุณลักษณะสําหรับการเรียกข้อมูลเหล่านี้ โปรดดูที่รายงานสตรีมมิง
คุณใช้คําค้นหาเพื่อสร้างคําขอ Search
และ SearchStream
ทั้งหมดสําหรับ GoogleAdsService
ใช้รายงาน Shopping โดยเฉพาะ
มุมมองประสิทธิภาพ Shopping แสดงสถิติแคมเปญ Shopping โดยรวมที่ระดับมิติข้อมูลผลิตภัณฑ์หลายรายการ เช่น แบรนด์ หมวดหมู่ แอตทริบิวต์ที่กําหนดเอง สภาพผลิตภัณฑ์ และประเภทผลิตภัณฑ์
ต่อไปนี้คือตัวอย่างการเรียก impressions
, clicks
,
cost_micros
, conversions
และ all_conversions
สําหรับผลิตภัณฑ์โดย
product_item_id
ที่มีการคลิกในช่วง 30 วันที่ผ่านมา
SELECT
segments.product_item_id,
metrics.clicks,
metrics.cost_micros,
metrics.impressions,
metrics.conversions,
metrics.all_conversions
FROM shopping_performance_view
WHERE segments.date DURING LAST_30_DAYS
AND metrics.clicks > 0
ORDER BY
metrics.all_conversions DESC,
metrics.conversions DESC,
metrics.clicks DESC,
metrics.cost_micros DESC,
metrics.impressions DESC
มุมมองกลุ่มผลิตภัณฑ์แสดงสถิติการรายงานรวมสําหรับกลุ่มข้อมูล Shopping (เรียกว่ากลุ่มผลิตภัณฑ์ใน UI) ต่อไปนี้เป็นตัวอย่างการค้นหาที่เรียก impressions
, clicks
, conversions
และ all_conversions
สําหรับกลุ่มรายชื่อ Shopping โดย campaign
ที่มี impressions
ในช่วง 30 วันที่ผ่านมา
SELECT
campaign.name,
metrics.impressions,
metrics.clicks,
metrics.conversions,
metrics.all_conversions
FROM product_group_view
WHERE segments.date DURING LAST_30_DAYS
AND metrics.impressions > 0
ORDER BY
metrics.all_conversions DESC,
metrics.conversions DESC,
metrics.clicks DESC,
metrics.impressions DESC
ส่งข้อความค้นหา
ใช้ไลบรารีของไคลเอ็นต์
Google แนะนําให้ใช้ไลบรารีไคลเอ็นต์อย่างเป็นทางการสําหรับโค้ดเวอร์ชันที่ใช้งานจริง แทนที่จะใช้อินเทอร์เฟซ REST
ข้อมูลโค้ดต่อไปนี้ใช้ไลบรารีของไคลเอ็นต์เพื่อแสดงคีย์เวิร์ดทั้งหมดจากแคมเปญ Search ที่มีเมตริกในช่วง 7 วันที่ผ่านมา คุณสามารถแก้ไขส่วน ที่ทําซ้ําวัตถุ GoogleAdsRow ทั้งหมดตามที่ต้องการ
Java
// Copyright 2018 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.google.ads.googleads.examples.reporting; import com.beust.jcommander.Parameter; import com.google.ads.googleads.examples.utils.ArgumentNames; import com.google.ads.googleads.examples.utils.CodeSampleParams; import com.google.ads.googleads.lib.GoogleAdsClient; import com.google.ads.googleads.v14.common.Metrics; import com.google.ads.googleads.v14.errors.GoogleAdsError; import com.google.ads.googleads.v14.errors.GoogleAdsException; import com.google.ads.googleads.v14.resources.AdGroup; import com.google.ads.googleads.v14.resources.AdGroupCriterion; import com.google.ads.googleads.v14.resources.Campaign; import com.google.ads.googleads.v14.services.GoogleAdsRow; import com.google.ads.googleads.v14.services.GoogleAdsServiceClient; import com.google.ads.googleads.v14.services.SearchGoogleAdsStreamRequest; import com.google.ads.googleads.v14.services.SearchGoogleAdsStreamResponse; import com.google.api.gax.rpc.ServerStream; import java.io.FileNotFoundException; import java.io.IOException; /** * Gets keyword performance statistics for the 50 keywords with the most impressions over the last 7 * days. */ public class GetKeywordStats { private static class GetKeywordStatsParams extends CodeSampleParams { @Parameter(names = ArgumentNames.CUSTOMER_ID, required = true) private Long customerId; } public static void main(String[] args) throws IOException { GetKeywordStatsParams params = new GetKeywordStatsParams(); if (!params.parseArguments(args)) { // Either pass the required parameters for this example on the command line, or insert them // into the code here. See the parameter class definition above for descriptions. params.customerId = Long.parseLong("INSERT_CUSTOMER_ID_HERE"); } GoogleAdsClient googleAdsClient = null; try { googleAdsClient = GoogleAdsClient.newBuilder().fromPropertiesFile().build(); } catch (FileNotFoundException fnfe) { System.err.printf( "Failed to load GoogleAdsClient configuration from file. Exception: %s%n", fnfe); System.exit(1); } catch (IOException ioe) { System.err.printf("Failed to create GoogleAdsClient. Exception: %s%n", ioe); System.exit(1); } try { new GetKeywordStats().runExample(googleAdsClient, params.customerId); } catch (GoogleAdsException gae) { // GoogleAdsException is the base class for most exceptions thrown by an API request. // Instances of this exception have a message and a GoogleAdsFailure that contains a // collection of GoogleAdsErrors that indicate the underlying causes of the // GoogleAdsException. System.err.printf( "Request ID %s failed due to GoogleAdsException. Underlying errors:%n", gae.getRequestId()); int i = 0; for (GoogleAdsError googleAdsError : gae.getGoogleAdsFailure().getErrorsList()) { System.err.printf(" Error %d: %s%n", i++, googleAdsError); } System.exit(1); } } /** * Runs the example. * * @param googleAdsClient the Google Ads API client. * @param customerId the client customer ID. * @throws GoogleAdsException if an API request failed with one or more service errors. */ private void runExample(GoogleAdsClient googleAdsClient, long customerId) { try (GoogleAdsServiceClient googleAdsServiceClient = googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) { String searchQuery = "SELECT campaign.id, " + "campaign.name, " + "ad_group.id, " + "ad_group.name, " + "ad_group_criterion.criterion_id, " + "ad_group_criterion.keyword.text, " + "ad_group_criterion.keyword.match_type, " + "metrics.impressions, " + "metrics.clicks, " + "metrics.cost_micros " + "FROM keyword_view " + "WHERE segments.date DURING LAST_7_DAYS " + "AND campaign.advertising_channel_type = 'SEARCH' " + "AND ad_group.status = 'ENABLED' " + "AND ad_group_criterion.status IN ('ENABLED', 'PAUSED') " // Limits to the 50 keywords with the most impressions in the date range. + "ORDER BY metrics.impressions DESC " + "LIMIT 50"; // Constructs the SearchGoogleAdsStreamRequest. SearchGoogleAdsStreamRequest request = SearchGoogleAdsStreamRequest.newBuilder() .setCustomerId(Long.toString(customerId)) .setQuery(searchQuery) .build(); // Creates and issues a search Google Ads stream request that will retrieve all of the // requested field values for the keyword. ServerStream<SearchGoogleAdsStreamResponse> stream = googleAdsServiceClient.searchStreamCallable().call(request); // Iterates through the results in the stream response and prints all of the requested // field values for the keyword in each row. for (SearchGoogleAdsStreamResponse response : stream) { for (GoogleAdsRow googleAdsRow : response.getResultsList()) { Campaign campaign = googleAdsRow.getCampaign(); AdGroup adGroup = googleAdsRow.getAdGroup(); AdGroupCriterion adGroupCriterion = googleAdsRow.getAdGroupCriterion(); Metrics metrics = googleAdsRow.getMetrics(); System.out.printf( "Keyword text '%s' with " + "match type '%s' " + "and ID %d " + "in ad group '%s' " + "with ID %d " + "in campaign '%s' " + "with ID %d " + "had %d impression(s), " + "%d click(s), " + "and %d cost (in micros) " + "during the last 7 days.%n", adGroupCriterion.getKeyword().getText(), adGroupCriterion.getKeyword().getMatchType(), adGroupCriterion.getCriterionId(), adGroup.getName(), adGroup.getId(), campaign.getName(), campaign.getId(), metrics.getImpressions(), metrics.getClicks(), metrics.getCostMicros()); } } } } }
C#
// Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. using CommandLine; using Google.Ads.Gax.Examples; using Google.Ads.GoogleAds.Lib; using Google.Ads.GoogleAds.V14.Errors; using Google.Ads.GoogleAds.V14.Services; using System; using System.Collections.Generic; namespace Google.Ads.GoogleAds.Examples.V14 { /// <summary> /// This code example illustrates getting keyword stats. /// </summary> public class GetKeywordStats : ExampleBase { /// <summary> /// Command line options for running the <see cref="GetKeywordStats"/> example. /// </summary> public class Options : OptionsBase { /// <summary> /// The Google Ads customer Id. /// </summary> [Option("customerId", Required = true, HelpText = "The Google Ads customer ID for which the call is made.")] public long CustomerId { get; set; } } /// <summary> /// Main method, to run this code example as a standalone application. /// </summary> /// <param name="args">The command line arguments.</param> public static void Main(string[] args) { Options options = ExampleUtilities.ParseCommandLine<Options>(args); GetKeywordStats codeExample = new GetKeywordStats(); Console.WriteLine(codeExample.Description); codeExample.Run(new GoogleAdsClient(), options.CustomerId); } /// <summary> /// Returns a description about the code example. /// </summary> public override string Description => "This code example illustrates getting keyword stats."; /// <summary> /// Runs the code example. /// </summary> /// <param name="client">The Google Ads client.</param> /// <param name="customerId">The Google Ads customer ID for which the call is made.</param> public void Run(GoogleAdsClient client, long customerId) { // Get the GoogleAdsService. GoogleAdsServiceClient googleAdsService = client.GetService( Services.V14.GoogleAdsService); // Create the query. string query = @"SELECT campaign.id, campaign.name, ad_group.id, ad_group.name, ad_group_criterion.criterion_id, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, metrics.impressions, metrics.clicks, metrics.cost_micros FROM keyword_view WHERE segments.date DURING LAST_7_DAYS AND campaign.advertising_channel_type = 'SEARCH' AND ad_group.status = 'ENABLED' AND ad_group_criterion.status IN ('ENABLED','PAUSED') ORDER BY metrics.impressions DESC LIMIT 50"; try { // Issue a search request. googleAdsService.SearchStream(customerId.ToString(), query, delegate (SearchGoogleAdsStreamResponse resp) { // Display the results. foreach (GoogleAdsRow criterionRow in resp.Results) { Console.WriteLine( "Keyword with text " + $"'{criterionRow.AdGroupCriterion.Keyword.Text}', match type " + $"'{criterionRow.AdGroupCriterion.Keyword.MatchType}' and ID " + $"{criterionRow.AdGroupCriterion.CriterionId} in ad group " + $"'{criterionRow.AdGroup.Name}' with ID " + $"{criterionRow.AdGroup.Id} in campaign " + $"'{criterionRow.Campaign.Name}' with ID " + $"{criterionRow.Campaign.Id} had " + $"{criterionRow.Metrics.Impressions.ToString()} impressions, " + $"{criterionRow.Metrics.Clicks} clicks, and " + $"{criterionRow.Metrics.CostMicros} cost (in micros) during the " + "last 7 days."); } } ); } catch (GoogleAdsException e) { Console.WriteLine("Failure:"); Console.WriteLine($"Message: {e.Message}"); Console.WriteLine($"Failure: {e.Failure}"); Console.WriteLine($"Request ID: {e.RequestId}"); throw; } } } }
PHP
<?php /** * Copyright 2018 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ namespace Google\Ads\GoogleAds\Examples\Reporting; require __DIR__ . '/../../vendor/autoload.php'; use GetOpt\GetOpt; use Google\Ads\GoogleAds\Examples\Utils\ArgumentNames; use Google\Ads\GoogleAds\Examples\Utils\ArgumentParser; use Google\Ads\GoogleAds\Lib\V14\GoogleAdsClient; use Google\Ads\GoogleAds\Lib\V14\GoogleAdsClientBuilder; use Google\Ads\GoogleAds\Lib\V14\GoogleAdsException; use Google\Ads\GoogleAds\Lib\V14\GoogleAdsServerStreamDecorator; use Google\Ads\GoogleAds\Lib\OAuth2TokenBuilder; use Google\Ads\GoogleAds\V14\Enums\KeywordMatchTypeEnum\KeywordMatchType; use Google\Ads\GoogleAds\V14\Errors\GoogleAdsError; use Google\Ads\GoogleAds\V14\Services\GoogleAdsRow; use Google\Ads\GoogleAds\V14\Services\SearchGoogleAdsStreamRequest; use Google\ApiCore\ApiException; /** * This example gets keyword performance statistics for the 50 keywords with the most impressions * over the last 7 days. */ class GetKeywordStats { private const CUSTOMER_ID = 'INSERT_CUSTOMER_ID_HERE'; public static function main() { // Either pass the required parameters for this example on the command line, or insert them // into the constants above. $options = (new ArgumentParser())->parseCommandArguments([ ArgumentNames::CUSTOMER_ID => GetOpt::REQUIRED_ARGUMENT ]); // Generate a refreshable OAuth2 credential for authentication. $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build(); // Construct a Google Ads client configured from a properties file and the // OAuth2 credentials above. $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile() ->withOAuth2Credential($oAuth2Credential) // We set this value to true to show how to use GAPIC v2 source code. You can remove the // below line if you wish to use the old-style source code. Note that in that case, you // probably need to modify some parts of the code below to make it work. // For more information, see // https://developers.devsite.corp.google.com/google-ads/api/docs/client-libs/php/gapic. ->usingGapicV2Source(true) ->build(); try { self::runExample( $googleAdsClient, $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID ); } catch (GoogleAdsException $googleAdsException) { printf( "Request with ID '%s' has failed.%sGoogle Ads failure details:%s", $googleAdsException->getRequestId(), PHP_EOL, PHP_EOL ); foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) { /** @var GoogleAdsError $error */ printf( "\t%s: %s%s", $error->getErrorCode()->getErrorCode(), $error->getMessage(), PHP_EOL ); } exit(1); } catch (ApiException $apiException) { printf( "ApiException was thrown with message '%s'.%s", $apiException->getMessage(), PHP_EOL ); exit(1); } } /** * Runs the example. * * @param GoogleAdsClient $googleAdsClient the Google Ads API client * @param int $customerId the customer ID */ public static function runExample(GoogleAdsClient $googleAdsClient, int $customerId) { $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); // Creates a query that retrieves all keyword statistics. $query = "SELECT campaign.id, " . "campaign.name, " . "ad_group.id, " . "ad_group.name, " . "ad_group_criterion.criterion_id, " . "ad_group_criterion.keyword.text, " . "ad_group_criterion.keyword.match_type, " . "metrics.impressions, " . "metrics.clicks, " . "metrics.cost_micros " . "FROM keyword_view " . "WHERE segments.date DURING LAST_7_DAYS " . "AND campaign.advertising_channel_type = 'SEARCH' " . "AND ad_group.status = 'ENABLED' " . "AND ad_group_criterion.status IN ('ENABLED', 'PAUSED') " // Limits to the 50 keywords with the most impressions in the date range. . "ORDER BY metrics.impressions DESC " . "LIMIT 50"; // Issues a search stream request. /** @var GoogleAdsServerStreamDecorator $stream */ $stream = $googleAdsServiceClient->searchStream( SearchGoogleAdsStreamRequest::build($customerId, $query) ); // Iterates over all rows in all messages and prints the requested field values for // the keyword in each row. foreach ($stream->iterateAllElements() as $googleAdsRow) { /** @var GoogleAdsRow $googleAdsRow */ $campaign = $googleAdsRow->getCampaign(); $adGroup = $googleAdsRow->getAdGroup(); $adGroupCriterion = $googleAdsRow->getAdGroupCriterion(); $metrics = $googleAdsRow->getMetrics(); printf( "Keyword text '%s' with " . "match type %s " . "and ID %d " . "in ad group '%s' " . "with ID %d " . "in campaign '%s' " . "with ID %d " . "had %d impression(s), " . "%d click(s), " . "and %d cost (in micros) " . "during the last 7 days.%s", $adGroupCriterion->getKeyword()->getText(), KeywordMatchType::name($adGroupCriterion->getKeyword()->getMatchType()), $adGroupCriterion->getCriterionId(), $adGroup->getName(), $adGroup->getId(), $campaign->getName(), $campaign->getId(), $metrics->getImpressions(), $metrics->getClicks(), $metrics->getCostMicros(), PHP_EOL ); } } } GetKeywordStats::main();
Python
#!/usr/bin/env python # Copyright 2020 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """This example illustrates how to get campaign criteria. Retrieves negative keywords in a campaign. """ import argparse import sys from google.ads.googleads.client import GoogleAdsClient from google.ads.googleads.errors import GoogleAdsException def main(client, customer_id): ga_service = client.get_service("GoogleAdsService") query = """ SELECT campaign.id, campaign.name, ad_group.id, ad_group.name, ad_group_criterion.criterion_id, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, metrics.impressions, metrics.clicks, metrics.cost_micros FROM keyword_view WHERE segments.date DURING LAST_7_DAYS AND campaign.advertising_channel_type = 'SEARCH' AND ad_group.status = 'ENABLED' AND ad_group_criterion.status IN ('ENABLED', 'PAUSED') ORDER BY metrics.impressions DESC LIMIT 50""" # Issues a search request using streaming. search_request = client.get_type("SearchGoogleAdsStreamRequest") search_request.customer_id = customer_id search_request.query = query stream = ga_service.search_stream(search_request) for batch in stream: for row in batch.results: campaign = row.campaign ad_group = row.ad_group criterion = row.ad_group_criterion metrics = row.metrics print( f'Keyword text "{criterion.keyword.text}" with ' f'match type "{criterion.keyword.match_type.name}" ' f"and ID {criterion.criterion_id} in " f'ad group "{ad_group.name}" ' f'with ID "{ad_group.id}" ' f'in campaign "{campaign.name}" ' f"with ID {campaign.id} " f"had {metrics.impressions} impression(s), " f"{metrics.clicks} click(s), and " f"{metrics.cost_micros} cost (in micros) during " "the last 7 days." ) if __name__ == "__main__": # GoogleAdsClient will read the google-ads.yaml configuration file in the # home directory if none is specified. googleads_client = GoogleAdsClient.load_from_storage(version="v14") parser = argparse.ArgumentParser( description=("Retrieves a campaign's negative keywords.") ) # The following argument(s) should be provided to run the example. parser.add_argument( "-c", "--customer_id", type=str, required=True, help="The Google Ads customer ID.", ) args = parser.parse_args() try: main(googleads_client, args.customer_id) except GoogleAdsException as ex: print( f'Request with ID "{ex.request_id}" failed with status ' f'"{ex.error.code().name}" and includes the following errors:' ) for error in ex.failure.errors: print(f'\tError with message "{error.message}".') if error.location: for field_path_element in error.location.field_path_elements: print(f"\t\tOn field: {field_path_element.field_name}") sys.exit(1)
Ruby
#!/usr/bin/ruby # Encoding: utf-8 # # Copyright:: Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # This code example illustrates how to get campaign criteria, which is getting # negative keywords in a campaign. require 'optparse' require 'google/ads/google_ads' def get_keyword_stats(customer_id) # GoogleAdsClient will read a config file from # ENV['HOME']/google_ads_config.rb when called without parameters client = Google::Ads::GoogleAds::GoogleAdsClient.new ga_service = client.service.google_ads # Limits to the 50 keywords with the most impressions in the date range. # If you wish to exclude entries with zero impressions, include a # predicate in the WHERE statement like 'metrics.impressions > 0' query = <<~QUERY SELECT campaign.id, campaign.name, ad_group.id, ad_group.name, ad_group_criterion.criterion_id, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, metrics.impressions, metrics.clicks, metrics.cost_micros FROM keyword_view WHERE segments.date DURING LAST_7_DAYS AND campaign.advertising_channel_type = 'SEARCH' AND ad_group.status = 'ENABLED' AND ad_group_criterion.status IN ('ENABLED', 'PAUSED') ORDER BY metrics.impressions DESC LIMIT 50 QUERY responses = ga_service.search_stream(customer_id: customer_id, query: query) responses.each do |response| response.results.each do |row| campaign = row.campaign ad_group = row.ad_group criterion = row.ad_group_criterion metrics = row.metrics puts "Keyword text '#{criterion.keyword.text}' with match type "\ "'#{criterion.keyword.match_type}' and ID #{criterion.criterion_id} in "\ "ad group '#{ad_group.name}' with ID #{ad_group.id} in campaign "\ "'#{campaign.name}' with ID #{campaign.id} had #{metrics.impressions} "\ "impression(s), #{metrics.clicks} click(s), and #{metrics.cost_micros} "\ "cost (in micros) during the last 7 days." end end end if __FILE__ == $PROGRAM_NAME PAGE_SIZE = 1000 options = {} # The following parameter(s) should be provided to run the example. You can # either specify these by changing the INSERT_XXX_ID_HERE values below, or on # the command line. # # Parameters passed on the command line will override any parameters set in # code. # # Running the example with -h will print the command line usage. options[:customer_id] = 'INSERT_GOOGLE_ADS_CUSTOMER_ID_HERE' OptionParser.new do |opts| opts.banner = sprintf('Usage: ruby %s [options]', File.basename(__FILE__)) opts.separator '' opts.separator 'Options:' opts.on('-C', '--customer-id CUSTOMER-ID', String, 'Customer ID') do |v| options[:customer_id] = v end opts.separator '' opts.separator 'Help:' opts.on_tail('-h', '--help', 'Show this message') do puts opts exit end end.parse! begin get_keyword_stats(options.fetch(:customer_id).tr("-", "")) rescue Google::Ads::GoogleAds::Errors::GoogleAdsError => e e.failure.errors.each do |error| STDERR.printf("Error with message: %s\n", error.message) if error.location error.location.field_path_elements.each do |field_path_element| STDERR.printf("\tOn field: %s\n", field_path_element.field_name) end end error.error_code.to_h.each do |k, v| next if v == :UNSPECIFIED STDERR.printf("\tType: %s\n\tCode: %s\n", k, v) end end raise end end
Perl
#!/usr/bin/perl -w # # Copyright 2019, Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # This example gets keyword performance statistics for the 50 keywords with the # most impressions over the last 7 days. use strict; use warnings; use utf8; use FindBin qw($Bin); use lib "$Bin/../../lib"; use Google::Ads::GoogleAds::Client; use Google::Ads::GoogleAds::Utils::GoogleAdsHelper; use Google::Ads::GoogleAds::Utils::SearchStreamHandler; use Google::Ads::GoogleAds::V14::Services::GoogleAdsService::SearchGoogleAdsStreamRequest; use Getopt::Long qw(:config auto_help); use Pod::Usage; use Cwd qw(abs_path); # The following parameter(s) should be provided to run the example. You can # either specify these by changing the INSERT_XXX_ID_HERE values below, or on # the command line. # # Parameters passed on the command line will override any parameters set in # code. # # Running the example with -h will print the command line usage. my $customer_id = "INSERT_CUSTOMER_ID_HERE"; sub get_keyword_stats { my ($api_client, $customer_id) = @_; # Limit to the 50 keywords with the most impressions in the date range. # If you wish to exclude entries with zero impressions, include a # predicate in the WHERE statement like 'metrics.impressions > 0'. my $search_query = "SELECT campaign.id, campaign.name, ad_group.id, ad_group.name, " . "ad_group_criterion.criterion_id, ad_group_criterion.keyword.text, " . "ad_group_criterion.keyword.match_type, " . "metrics.impressions, metrics.clicks, metrics.cost_micros " . "FROM keyword_view WHERE segments.date DURING LAST_7_DAYS " . "AND campaign.advertising_channel_type = 'SEARCH' " . "AND ad_group.status = 'ENABLED' " . "AND ad_group_criterion.status IN ('ENABLED', 'PAUSED') " . "ORDER BY metrics.impressions DESC LIMIT 50"; # Create a search Google Ads stream request that will retrieve all keyword # statistics. my $search_stream_request = Google::Ads::GoogleAds::V14::Services::GoogleAdsService::SearchGoogleAdsStreamRequest ->new({ customerId => $customer_id, query => $search_query, }); # Get the GoogleAdsService. my $google_ads_service = $api_client->GoogleAdsService(); my $search_stream_handler = Google::Ads::GoogleAds::Utils::SearchStreamHandler->new({ service => $google_ads_service, request => $search_stream_request }); # Issue a search request and process the stream response to print the requested # field values for the keyword in each row. $search_stream_handler->process_contents( sub { my $google_ads_row = shift; my $campaign = $google_ads_row->{campaign}; my $ad_group = $google_ads_row->{adGroup}; my $ad_group_criterion = $google_ads_row->{adGroupCriterion}; my $metrics = $google_ads_row->{metrics}; printf "Keyword text '%s' with match type '%s' and ID %d in ad group" . " '%s' with ID %d in campaign '%s' with ID %d had %d impression(s), " . "%d click(s), and %d cost (in micros) during the last 7 days.\n", $ad_group_criterion->{keyword}{text}, $ad_group_criterion->{keyword}{matchType}, $ad_group_criterion->{criterionId}, $ad_group->{name}, $ad_group->{id}, $campaign->{name}, $campaign->{id}, $metrics->{impressions}, $metrics->{clicks}, $metrics->{costMicros}; }); return 1; } # Don't run the example if the file is being included. if (abs_path($0) ne abs_path(__FILE__)) { return 1; } # Get Google Ads Client, credentials will be read from ~/googleads.properties. my $api_client = Google::Ads::GoogleAds::Client->new(); # By default examples are set to die on any server returned fault. $api_client->set_die_on_faults(1); # Parameters passed on the command line will override any parameters set in code. GetOptions("customer_id=s" => \$customer_id); # Print the help message if the parameters are not initialized in the code nor # in the command line. pod2usage(2) if not check_params($customer_id); # Call the example. get_keyword_stats($api_client, $customer_id =~ s/-//gr); =pod =head1 NAME get_keyword_stats =head1 DESCRIPTION This example gets keyword performance statistics for the 50 keywords with the most impressions over the last 7 days. =head1 SYNOPSIS get_keyword_stats.pl [options] -help Show the help message. -customer_id The Google Ads customer ID. =cut
ดูวิดีโอแสดงวิธีการของตัวอย่างโค้ด Java
คุณใช้ GoogleAdsFieldService
เพื่อขอแคตตาล็อกแบบไดนามิกสําหรับทรัพยากร ช่องของทรัพยากร คีย์การแบ่งกลุ่ม และเมตริกที่มีอยู่ในเมธอด GoogleAdsService
, Search
และ SearchStream
ได้ แคตตาล็อกจะให้ข้อมูลข้อมูลเมตาที่ไคลเอ็นต์ Google Ads API สามารถใช้เพื่อตรวจสอบความถูกต้องและการสร้างคําสั่ง GAQL โปรดดูรายละเอียดที่ข้อมูลเมตาของทรัพยากร
ส่งคําถามโดยใช้ปลายทาง REST
คุณใช้อินเทอร์เฟซ REST เพื่อทดสอบคําขอได้ คําขอประกอบด้วย HTTP POST ไปยังเซิร์ฟเวอร์ Google Ads API ที่ URL ต่อไปนี้ (แทนรหัสลูกค้าสําหรับ custID
)
https://googleads.googleapis.com/v10/customers/custID/googleAds:searchStream
ตัวอย่างต่อไปนี้แสดงการค้นหาที่อยู่ภายในคําขอ HTTP POST
POST /v10/customers/{customer_id}/googleAds:searchStream HTTP/1.1
Host: googleads.googleapis.com
User-Agent: curl
Content-Type: application/json
Accept: application/json
Authorization: Bearer [Enter OAuth 2.0 access token here]
developer-token: [Enter developerToken here]
Parameters:
{
"query" : "SELECT campaign.name, campaign.status, segments.device,
metrics.impressions, metrics.clicks, metrics.ctr,
metrics.average_cpc, metrics.cost_micros
FROM campaign
WHERE segments.date DURING LAST_30_DAYS"
}
ดูเพิ่มเติมที่การค้นหาและSearchStream