---
title: '撈出報表from CID'
disqus: hackmd
---
###### tags: `report` `Google Ads`
撈出報表from CID
===
[TOC]
## 筆記目的
了解如何從給定的CID(customerID)去撈出所屬的campaign,以及一些他們想要的欄位
## 實用連結
[Query Builder](https://developers.google.com/google-ads/api/fields/v8/query_validator)
## 不太懂要去哪裡看
1. 如何從後台看startdate 還有開播天數
1. Resource fields :把她想成設定
2. Segments:例如device
3. Metrics:KPI的指標
## 步驟
1. find each CID 的MCC
2. use CID and MCC to get information
3. put the information you get into java variable
4. write excel to my computer
## find each CID 的MCC
反過來,使用每個MCC的ID當作CID去獲得所有五個帳號的CID有哪些,
```java=
package com.example.value;
import com.example.value.properties.DefaultOAuthProperties;
import com.google.ads.googleads.lib.GoogleAdsClient;
import com.google.ads.googleads.v8.errors.GoogleAdsException;
//import com.google.ads.googleads.v8.resources.AdGroup;
//import com.google.ads.googleads.v8.enums.AdGroupStatusEnum.AdGroupStatus;
import com.google.ads.googleads.v8.errors.GoogleAdsError;
import com.google.ads.googleads.v8.services.GoogleAdsRow;
import com.google.ads.googleads.v8.services.GoogleAdsServiceClient;
import com.google.ads.googleads.v8.services.GoogleAdsServiceClient.SearchPagedResponse;
import com.google.ads.googleads.v8.services.SearchGoogleAdsRequest;
//import com.google.ads.googleads.v8.utils.ResourceNames;
import com.google.auth.Credentials;
import com.google.auth.oauth2.UserCredentials;
//import com.google.protobuf.Int64Value;
//import java.io.FileNotFoundException;
import java.io.IOException;
public class GetCustomerMCC {
//809-235-9339
private static final int PAGE_SIZE = 10000;
private static String MCCID = "825-849-0584";
private static String CID = "825-849-0584";
//124-574-0503
//809-235-9339 //APOC_MCC
//370-460-5386
//987-448-8471
public static void main(String[] args) throws IOException {
Long login_mcc_id = Long.parseLong(MCCID.replaceAll("-", ""));
Long customerId = Long.parseLong(CID.replaceAll("-", ""));
Credentials credentials = null;
GoogleAdsClient googleAdsClient = null;
try {
credentials = UserCredentials.newBuilder().setClientId(DefaultOAuthProperties.Default_ClientId)
.setClientSecret(DefaultOAuthProperties.Default_ClientSecret)
.setRefreshToken(DefaultOAuthProperties.Default_RefreshToken).build();
googleAdsClient = GoogleAdsClient.newBuilder().setCredentials(credentials)
.setDeveloperToken(DefaultOAuthProperties.Default_DeveloperToken).setLoginCustomerId(login_mcc_id) // Manager
// accounts
// only.
.build();
} catch (GoogleAdsException adse) {
System.out.println(adse.toString());
} catch (Exception e) {
System.out.println(e.toString());
}
try {
runExample(googleAdsClient, customerId);
} catch (GoogleAdsException gae) {
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);
}
}
}
private static void runExample(GoogleAdsClient googleAdsClient, long customerId) {
try (GoogleAdsServiceClient googleAdsServiceClient = googleAdsClient.getLatestVersion()
.createGoogleAdsServiceClient()) {
String resultString="SELECT customer_client.client_customer,customer_client.currency_code,customer_client.hidden,customer_client.id,customer_client.level,customer_client.manager,customer_client.resource_name,customer_client.resource_name,customer_client.test_account,customer_client.time_zone FROM customer_client";
SearchGoogleAdsRequest request = SearchGoogleAdsRequest.newBuilder()
.setCustomerId(Long.toString(customerId)).setPageSize(PAGE_SIZE)
.setQuery(resultString).build();
// Issues the search request.
SearchPagedResponse searchPagedResponse = googleAdsServiceClient.search(request);
// Iterates over all rows in all pages and prints the requested field values for
// the campaign
// in each row.
for (GoogleAdsRow googleAdsRow : searchPagedResponse.iterateAll()) {
System.out.printf(" CustomerID %d and itsMCC '%s' was found.%n", googleAdsRow.getCustomerClient().getId(),
customerId);
}
}
}
}
```
## use CID and MCC to get information
write gaql and get it
```java=
String resultString="SELECT customer.id,campaign.id, campaign.name,campaign.bidding_strategy_type,campaign.start_date FROM campaign WHERE campaign.status=ENABLED ORDER BY campaign.id";
SearchGoogleAdsRequest request = SearchGoogleAdsRequest.newBuilder()
.setCustomerId(Long.toString(customerId)).setPageSize(10000)
.setQuery(resultString).build();
// Issues the search request.
SearchPagedResponse searchPagedResponse = googleAdsServiceClient.search(request);
```
## put the information you get into java variable
```java=
List<ReportBean> reportBeanList=new ArrayList<ReportBean>();
for (GoogleAdsRow googleAdsRow : searchPagedResponse.iterateAll()) {
Long CID=googleAdsRow.getCustomer().getId();
String CIDused=formatString(CID);
Long CampaignID=googleAdsRow.getCampaign().getId();
String CampaignName=googleAdsRow.getCampaign().getName();
String BiddingStrategyType=googleAdsRow.getCampaign().getBiddingStrategyType().toString();
String start_date=googleAdsRow.getCampaign().getStartDate();
Date start_dateused = sdf.parse(start_date);
int days=differentDaysByMillisecond(start_dateused,todayused);
ReportBean tempReportBean=new ReportBean(CIDused,CampaignID,CampaignName,BiddingStrategyType,days);
reportBeanList.add( tempReportBean);
}
```
## write excel to my computer
use opencsv library which can help you write csv with **pojo** bean
## 程式碼部分
1. 有個特殊的語法可以取得 這張報表主要是去撈出 CID 所屬的MCC
QUSTION: 我的理解是這張報表是撈出MCC下面有哪些CID
沒錯:我的理解是隊的
### MAIN
```java=
package com.example.value;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.example.value.agent.GoogleAdsServiceClientAgent;
import com.example.value.bean.ReportBean;
import com.example.value.properties.ClientOAuthPropertiesBean;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import com.fasterxml.jackson.core.JsonGenerator;
import com.google.ads.googleads.lib.GoogleAdsClient;
import com.google.ads.googleads.v8.services.GoogleAdsRow;
import com.google.ads.googleads.v8.services.GoogleAdsServiceClient;
import com.google.ads.googleads.v8.services.SearchGoogleAdsRequest;
import com.opencsv.bean.ColumnPositionMappingStrategy;
import com.opencsv.bean.StatefulBeanToCsv;
import com.opencsv.bean.StatefulBeanToCsvBuilder;
import com.google.ads.googleads.v8.services.GoogleAdsServiceClient.SearchPagedResponse;
public class GetAllMCCandCID {
public static void main(String[] args) throws Exception {
String Today="2021-09-06";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date todayused = sdf.parse(Today);
String targetArray[]={"140-874-5225","156-635-7556","243-700-1598","280-836-1164","373-439-1099","398-786-8147"
,"468-623-6768","478-943-4442","860-067-8392","921-088-1239","923-406-2250","929-054-5168","948-654-1588"
,"985-870-8791","124-574-0503","175-056-1101","294-016-4382","346-683-3519","357-040-8515","381-777-8239"
,"393-418-9244","609-898-7539","703-903-8427","918-840-1939","952-385-6094","967-653-8501","971-746-4629"
,"139-751-8807","169-507-9690","207-267-2364","258-974-4517","272-014-1494","372-901-4794","380-606-4786","383-335-2976","391-893-8876","434-107-4988"
,"603-955-3093","661-412-2893","721-356-1774","741-868-8944","793-091-1548","823-753-7909"};
// step1 get all mcc's Cid
String MCCarray[]= {"370-460-5386","673-120-8557","676-033-5214","809-235-9339","825-849-0584"};
Long MCCarrayused[]=new Long[MCCarray.length];
Long targetArrayused[]=new Long[targetArray.length];
//change String to Long number
for(int i=0;i<MCCarray.length;i++) {
MCCarrayused[i] = Long.parseLong(MCCarray[i].replaceAll("-", ""));
}
for(int i=0;i<targetArray.length;i++) {
targetArrayused[i] = Long.parseLong(targetArray[i].replaceAll("-", ""));
}
System.out.println(targetArrayused);
System.out.println(Arrays.toString(MCCarrayused));
System.out.println("targetArrayused總共有"+targetArrayused+"筆");
//declare OAuthBean
ClientOAuthPropertiesBean clientOAuthPropertiesBean = new ClientOAuthPropertiesBean();
//declare AllMCC_CustomerIdMap
HashMap<Long,Long >AllMCC_CustomerIdMap=new HashMap<Long, Long>();
for(int i=0;i<MCCarrayused.length;i++) {
GoogleAdsServiceClientAgent gasAgent = new GoogleAdsServiceClientAgent(MCCarrayused[i], clientOAuthPropertiesBean);
GoogleAdsClient googleAdsClient = gasAgent.giveMeAnUsefulGoogleAdsClient();
HashMap<Long,Long > map=giveMeSingleMCC_CustomerID(googleAdsClient, MCCarrayused[i]);
AllMCC_CustomerIdMap.putAll(map);
}
System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
System.out.println("總共有多少個customerID在所有MCC當中"+""+AllMCC_CustomerIdMap.size()+"個");
System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
HashMap<Long,Long >target_CustomerIdMap=new HashMap<Long, Long>();
for(int i=0;i<targetArrayused.length;i++) {
target_CustomerIdMap.put( targetArrayused[i],AllMCC_CustomerIdMap.get(targetArrayused[i]));
}
System.out.println("總共有多少個目標customerID還有他們對應的MCC"+""+target_CustomerIdMap.size()+"個");
List<ReportBean> targetreportBeanList=new ArrayList<ReportBean>();
for(Map.Entry<Long,Long> entry : target_CustomerIdMap.entrySet() ) {
GoogleAdsServiceClientAgent gasAgent = new GoogleAdsServiceClientAgent(entry.getValue(), clientOAuthPropertiesBean);
GoogleAdsClient googleAdsClient = gasAgent.giveMeAnUsefulGoogleAdsClient();
List<ReportBean> list=giveMeSingleCustomerIdInfo(googleAdsClient, entry.getKey(), todayused);
targetreportBeanList.addAll(list);
}
System.out.println("總共有多少個目標campaign在All target customerID當中"+""+targetreportBeanList.size()+"個" );
for(int i=0;i<50;i++) {
System.out.println(targetreportBeanList.get(i).toString());
}
// File csvOutputFile = new File("C:\\Users\\TDG_USER\\Documents\\doc\\resultforme.csv");
// CsvMapper mapper = new CsvMapper();
// mapper.configure(JsonGenerator.Feature.IGNORE_UNKNOWN, true);
//
// CsvSchema schema = CsvSchema.builder().setUseHeader(true)
// .addColumn("CID")
// .addColumn("CampaignID")
// .addColumn("CampaignName")
// .addColumn("BiddingStrategyType")
// .addColumn("periods")
// .build();
//
// ObjectWriter writer = mapper.writerFor(ReportBean.class).with(schema);
//
// writer.writeValues(csvOutputFile).writeAll(targetreportBeanList);
//
// System.out.println("data saved to csv file under path: ");
// System.out.println(csvOutputFile);
////write csv
////used opencsv
final String CSV_LOCATION = "C:\\Users\\TDG_USER\\Documents\\doc\\resultforteacher.csv";
try {
// Creating writer class to generate
// csv file
FileWriter writer = new
FileWriter(CSV_LOCATION);
writer.append("CID, CampaignID, CampaignName, BiddingStrategyType,開播天數(日)\n");
ColumnPositionMappingStrategy mappingStrategy=
new ColumnPositionMappingStrategy();
mappingStrategy.setType(ReportBean.class);
// Arrange column name as provided in below array.
String[] columns = new String[]
{ "CID", "CampaignID", "CampaignName", "BiddingStrategyType","periods" };
mappingStrategy.setColumnMapping(columns);
// Createing StatefulBeanToCsv object
StatefulBeanToCsvBuilder<ReportBean> builder=
new StatefulBeanToCsvBuilder(writer);
StatefulBeanToCsv beanWriter =
builder.withMappingStrategy(mappingStrategy).build();
// Write list to StatefulBeanToCsv object
beanWriter.write(targetreportBeanList);
// closing the writer object
writer.close();
}
catch (Exception e) {
e.printStackTrace();
}
// 3704605386L
// 6731208557L
// 6760335214L
// 8092359339L
// 8258490584L
// 9874888471L //wrong dont use
// Long testMCC=3704605386L;
// GoogleAdsServiceClientAgent gasAgent = new GoogleAdsServiceClientAgent(testMCC, clientOAuthPropertiesBean);
// GoogleAdsClient googleAdsClient = gasAgent.giveMeAnUsefulGoogleAdsClient();
// HashMap<Long, Long > map=giveMeSingleMCC_CustomerID(googleAdsClient, testMCC);
// System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
// System.out.println(testMCC+"總共有"+map.size());
// System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
//AllMCC_CustomerID this map has key=customerID and value=MCC and
}
private static List<ReportBean> giveMeSingleCustomerIdInfo(GoogleAdsClient googleAdsClient, long customerId,Date todayused) throws ParseException {
try (GoogleAdsServiceClient googleAdsServiceClient = googleAdsClient.getLatestVersion()
.createGoogleAdsServiceClient()) {
// Creates a request that will retrieve all campaigns using pages of the
// specified page size.
String resultString="SELECT customer.id,campaign.id, campaign.name,campaign.bidding_strategy_type,campaign.start_date FROM campaign WHERE campaign.status=ENABLED ORDER BY campaign.id";
SearchGoogleAdsRequest request = SearchGoogleAdsRequest.newBuilder()
.setCustomerId(Long.toString(customerId)).setPageSize(10000)
.setQuery(resultString).build();
// Issues the search request.
SearchPagedResponse searchPagedResponse = googleAdsServiceClient.search(request);
// Iterates over all rows in all pages and prints the requested field values for
// the campaign
// in each row.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
List<ReportBean> reportBeanList=new ArrayList<ReportBean>();
for (GoogleAdsRow googleAdsRow : searchPagedResponse.iterateAll()) {
Long CID=googleAdsRow.getCustomer().getId();
String CIDused=formatString(CID);
Long CampaignID=googleAdsRow.getCampaign().getId();
String CampaignName=googleAdsRow.getCampaign().getName();
String BiddingStrategyType=googleAdsRow.getCampaign().getBiddingStrategyType().toString();
String start_date=googleAdsRow.getCampaign().getStartDate();
Date start_dateused = sdf.parse(start_date);
int days=differentDaysByMillisecond(start_dateused,todayused);
ReportBean tempReportBean=new ReportBean(CIDused,CampaignID,CampaignName,BiddingStrategyType,days);
reportBeanList.add( tempReportBean);
}
return reportBeanList;
}
}
private static HashMap<Long, Long > giveMeSingleMCC_CustomerID(GoogleAdsClient googleAdsClient, long customerId) {
try (GoogleAdsServiceClient googleAdsServiceClient = googleAdsClient.getLatestVersion()
.createGoogleAdsServiceClient()) {
String resultString="SELECT customer_client.id,customer_client.manager,customer_client.resource_name FROM customer_client";
SearchGoogleAdsRequest request = SearchGoogleAdsRequest.newBuilder()
.setCustomerId(Long.toString(customerId)).setPageSize(10000)
.setQuery(resultString).build();
// Issues the search request.
SearchPagedResponse searchPagedResponse = googleAdsServiceClient.search(request);
HashMap< Long, Long > mccMap=new HashMap<Long, Long>();
for (GoogleAdsRow googleAdsRow : searchPagedResponse.iterateAll()) {
mccMap.put(googleAdsRow.getCustomerClient().getId() ,customerId );
// System.out.printf("MCC with customerID %d was found.%n", googleAdsRow.getCustomerClient().getId()
// );
}
return mccMap;
}//end for try
}//end for function
public static String formatString(Long data) {
String y= data.toString();
String result=y.substring(0,3) +"-"+y.substring(3,6)+"-"+y.substring(6);
return result;
}
public static int differentDaysByMillisecond(Date date1,Date date2)
{
int days = (int) ((date2.getTime() - date1.getTime()) / (1000*3600*24));
return days;
}
}
```
### GoogleAdsServiceClientAgent
```java=
package com.example.value.agent;
import com.example.value.properties.ClientOAuthPropertiesBean;
import com.google.ads.googleads.lib.GoogleAdsClient;
import com.google.auth.Credentials;
import com.google.auth.oauth2.UserCredentials;
public class GoogleAdsServiceClientAgent {
private Long loginCustomerId;
private ClientOAuthPropertiesBean clientOAuthPropertiesBean;
private Credentials credentials;
private GoogleAdsClient googleAdsClient;
public GoogleAdsServiceClientAgent(ClientOAuthPropertiesBean clientOAuthPropertiesBean) {
super();
this.clientOAuthPropertiesBean = clientOAuthPropertiesBean;
}
public GoogleAdsServiceClientAgent(Long loginCustomerId, ClientOAuthPropertiesBean clientOAuthPropertiesBean) {
super();
this.loginCustomerId = loginCustomerId;
this.clientOAuthPropertiesBean = clientOAuthPropertiesBean;
}
public GoogleAdsClient giveMeAnUsefulGoogleAdsClient() throws Exception {
makingAnUsefulGoogleAdsClient();
return this.googleAdsClient;
}//End function
private void makingAnUsefulGoogleAdsClient() {
try{
credentials =
UserCredentials.newBuilder()
.setClientId(clientOAuthPropertiesBean.getClientId())
.setClientSecret(clientOAuthPropertiesBean.getClientSecret())
.setRefreshToken(clientOAuthPropertiesBean.getRefreshToken())
.build();
googleAdsClient =
GoogleAdsClient.newBuilder()
.setCredentials(credentials)
.setDeveloperToken(clientOAuthPropertiesBean.getDeveloperToken())
.setLoginCustomerId(loginCustomerId) // Manager accounts only.
.build();
} catch(Exception e) {
e.printStackTrace();
System.out.println(e.toString());
}
}//End function
public Long getLoginCustomerId() {
return loginCustomerId;
}
public void setLoginCustomerId(Long loginCustomerId) {
this.loginCustomerId = loginCustomerId;
}
public ClientOAuthPropertiesBean getClientOAuthPropertiesBean() {
return clientOAuthPropertiesBean;
}
public void setClientOAuthPropertiesBean(ClientOAuthPropertiesBean clientOAuthPropertiesBean) {
this.clientOAuthPropertiesBean = clientOAuthPropertiesBean;
}
public Credentials getCredentials() {
return credentials;
}
public void setCredentials(Credentials credentials) {
this.credentials = credentials;
}
public GoogleAdsClient getGoogleAdsClient() {
return googleAdsClient;
}
public void setGoogleAdsClient(GoogleAdsClient googleAdsClient) {
this.googleAdsClient = googleAdsClient;
}
}//End class
```
### ClientOAuthPropertiesBean
```java=
package com.example.value.properties;
public class ClientOAuthPropertiesBean {
private String ClientId;
private String ClientSecret;
private String RefreshToken;
private String DeveloperToken;
public ClientOAuthPropertiesBean() {
super();
this.ClientId = DefaultOAuthProperties.Default_ClientId;
this.ClientSecret = DefaultOAuthProperties.Default_ClientSecret;
this.RefreshToken = DefaultOAuthProperties.Default_RefreshToken;
this.DeveloperToken = DefaultOAuthProperties.Default_DeveloperToken;
}
public ClientOAuthPropertiesBean(String clientId, String clientSecret, String refreshToken, String developerToken) {
super();
ClientId = clientId;
ClientSecret = clientSecret;
RefreshToken = refreshToken;
DeveloperToken = developerToken;
}
public String getClientId() {
return ClientId;
}
public void setClientId(String clientId) {
ClientId = clientId;
}
public String getClientSecret() {
return ClientSecret;
}
public void setClientSecret(String clientSecret) {
ClientSecret = clientSecret;
}
public String getRefreshToken() {
return RefreshToken;
}
public void setRefreshToken(String refreshToken) {
RefreshToken = refreshToken;
}
public String getDeveloperToken() {
return DeveloperToken;
}
public void setDeveloperToken(String developerToken) {
DeveloperToken = developerToken;
}
}//End class
```
### DefaultOAuthProperties
```java
package com.example.value.properties;
public class DefaultOAuthProperties {
/*
* @Email Account: engr01.api@tradeserv.com
*
* Google API Console Project: GoogleAdsAPI-Robin
*
* OAuth 2.0 用戶端 ID Name: Allproduct Ads API
*/
public static final String Default_ClientId = "557959983907-4bc3ao5ltjl4ikjnbcu5cq2a5al8rktn.apps.googleusercontent.com";
public static final String Default_ClientSecret = "Y-SuRlSLFdkh3tWHHPOHYvDk";
public static final String Default_RefreshToken = "1/FreU73mj-clmQc0ZAaBz8J1bd4j_b4WwaIpiGeYHggE";
public static final String Default_DeveloperToken = "LKt5cU2jKFCvjk9UNfyM0A";
}//End class
```
### ReportBean
```java
package com.example.value.bean;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvBindByPosition;
@JsonIgnoreProperties(ignoreUnknown = true)
public class ReportBean {
// @CsvBindByName(column = "CID")
// @CsvBindByPosition(position = 0)
String CID;
@CsvBindByName(column = "CampaignID")
// @CsvBindByPosition(position = 1)
Long CampaignID;
@CsvBindByName(column = "CampaignName")
// @CsvBindByPosition(position = 2)
String CampaignName;
@CsvBindByName(column = "BiddingStrategyType")
// @CsvBindByPosition(position = 3)
String BiddingStrategyType;
@CsvBindByName(column = "periods")
// @CsvBindByPosition(position = 4)
int periods;
public ReportBean() {
super();
}
public String getCID() {
return CID;
}
public void setCID(String cID) {
CID = cID;
}
public Long getCampaignID() {
return CampaignID;
}
public void setCampaignID(Long campaignID) {
CampaignID = campaignID;
}
public String getCampaignName() {
return CampaignName;
}
public void setCampaignName(String campaignName) {
CampaignName = campaignName;
}
public String getBiddingStrategyType() {
return BiddingStrategyType;
}
public void setBiddingStrategyType(String biddingStrategyType) {
BiddingStrategyType = biddingStrategyType;
}
public int getPeriods() {
return periods;
}
public void setPeriods(int periods) {
this.periods = periods;
}
public ReportBean(String cID, Long campaignID, String campaignName, String biddingStrategyType, int periods) {
super();
CID = cID;
CampaignID = campaignID;
CampaignName = campaignName;
BiddingStrategyType = biddingStrategyType;
this.periods = periods;
}
@Override
public String toString() {
return "ReportBean [CID=" + CID + ", CampaignID=" + CampaignID + ", CampaignName=" + CampaignName
+ ", BiddingStrategyType=" + BiddingStrategyType + ", periods=" + periods + "]";
}
}
```