Google广告账户搭建,java调用google广告API(一)

由于公司做广告变现业务,投放直接去看谷歌平台数据会比较麻烦,所以有了直接拉取到谷歌全部广告平台的数据的需求,特意记录一下。

1.前期准备登录

先创建项目(这里我已经创建,如果没有自己创建一个新项目)

选择oauth同意屏幕(API和服务→OAuth同意屏幕→)

创建客户端(谷歌API大部分都是需要OAuth 2.0验证)

贴一张我创建成功后的截图,主要是需要客户端ID和

然后启用广告服务API

点击进去并且用该API

然后登录,左侧菜单找到管理员→API中心找到开发者令牌,如果已经有了可以直接使用,如果提示测试令牌则需要申请其他类型的令牌,请注意申请其他令牌需要等待的时间可能1-2个月,我申请的标准令牌就等了2个月,如果申请的话按照表单需要的数据填写,然后等待邮箱通知

至此所有编写代码前的步骤就准备完善

2.开发代码

依赖准备


            com.google.api-ads
            google-ads
            
                
                    com.google.guava
                    guava
                
            
        
        
            com.google.auth
            google-auth-library-oauth2-http
        
        
            com.google.api-client
            google-api-client
        
        
            com.google.http-client
            google-http-client-gson
        
        
            com.google.code.gson
            gson
        
        
            com.google.oauth-client
            google-oauth-client
        
        
            org.springframework.security
            spring-security-oauth2-client
        
        
            com.squareup.okhttp3
            okhttp
        
        
            com.restfb
            restfb
        
        
            com.google.http-client
            google-http-client-jackson2
        
        
            com.google.oauth-client
            google-oauth-client-jetty
        
        
            com.google.guava
            guava
        
        
            com.google.apis
            google-api-services-admob
        
        
            com.google.apis
            google-api-services-adsense
        

配置文件准备(第一步获取的所有数据)

client-id:客户端ID
client-secret:客户端密钥
refresh-token:刷新token(我是使用该token获取数据的)
developer-token:广告平台的开发者令牌

开始编写代码

@Service
@Slf4j
public class GoogleAdsServiceA {
    
    @Value("${google.ads.developer-token}")
    private String developerToken;
    
    @Value("${google.ads.client-id}")
    private String clientId;
    
    @Value("${google.ads.client-secret}")
    private String clientSecret;
    
    @Value("${google.ads.refresh-token}")
    private String refreshToken;
    
    private GoogleAdsClient googleAdsClient;
    @Autowired
    private IAdExchangeRateService adExchangeRateService;
    
    @PostConstruct
    public void init() {
        try {
            Credentials credentials = UserCredentials.newBuilder()
                    .setClientId(clientId)
                    .setClientSecret(clientSecret)
                    .setRefreshToken(refreshToken)
                    .build();
                
            googleAdsClient = GoogleAdsClient.newBuilder()
                    .setCredentials(credentials)
                    .setDeveloperToken(developerToken)
                    .build();
                    
            log.info("Google Ads Client 初始化成功");
        } catch (Exception e) {
            log.error("Google Ads Client 初始化失败", e);
            throw new RuntimeException("Google Ads Client 初始化失败", e);
        }
    }
}

上面是初始化客户端的代码,下面贴几个查询的api的关键sql代码,也可以去api中心去看文档

查询广告计划,是广告子账户的ID,是广告平台的顶级账号ID(也就是你要获取的那个账号数据)

public List getCampaigns(Long customerId, Long managerCustomerId) {
        GoogleAdsServiceClient googleAdsServiceClient = null;
        try {
            log.info("开始查询客户 ID {} 的广告系列", customerId);
            // 1. 创建 GoogleAdsClient,设置 login-customer-id 为 managerCustomerId
            Credentials credentials = UserCredentials.newBuilder()
                    .setClientId(clientId)
                    .setClientSecret(clientSecret)
                    .setRefreshToken(refreshToken)
                    .build();
            googleAdsClient = GoogleAdsClient.newBuilder()
                    .setCredentials(credentials)
                    .setDeveloperToken(developerToken)
                    .setLoginCustomerId(managerCustomerId)// 设置管理员账户 ID
                    .build();
            // 2. 创建 GoogleAdsServiceClient
            googleAdsServiceClient = googleAdsClient.getLatestVersion().createGoogleAdsServiceClient();
            // 3. 构建最简单的查询
            //String query = "SELECT campaign.id, campaign.name FROM campaign";
            String  query = "SELECT campaign.id, campaign.name, campaign.status, campaign.start_date, campaign.end_date, campaign.campaign_budget" +
                    " FROM campaign "+
                    "WHERE campaign.status IN ('ENABLED', 'PAUSED')";
            // 4. 创建请求
            SearchGoogleAdsRequest request = SearchGoogleAdsRequest.newBuilder()
                    .setCustomerId(String.valueOf(customerId)) // 设置目标客户 ID
                    .setQuery(query)
                    .build();
            // 5. 执行查询并处理结果
            List campaigns = new ArrayList();
            for (GoogleAdsRow row : googleAdsServiceClient.search(request).iterateAll()) {
                log.info("查询到的广告计划: {}", row.getCustomerClient());
                Campaign campaign = row.getCampaign();
                CampaignDto dto = new CampaignDto();
                dto.setCampaignId(campaign.getId());
                dto.setCampaignName(campaign.getName());
                dto.setStatus(campaign.getStatus().toString());
                dto.setBudget(campaign.getCampaignBudget());
                dto.setStartDate(campaign.getStartDate());
                dto.setEndDate(campaign.getEndDate());
                campaigns.add(dto);
            }
            log.info("成功获取到 {} 个广告系列", campaigns.size());
            return campaigns;
        } catch (Exception e) {
            log.error("查询广告系列失败: {}", e.getMessage(), e);
            throw new RuntimeException("查询广告系列失败: " + e.getMessage());
        } finally {
            // 确保关闭服务客户端
            if (googleAdsServiceClient != null) {
                try {
                    googleAdsServiceClient.close();
                } catch (Exception e) {
                    log.warn("关闭客户端时出错", e);
                }
            }
        }
    }

查询账户预算SQL

 String query = "SELECT campaign_budget.id, campaign_budget.name, campaign_budget.amount_micros "
                    + "FROM campaign_budget "
                    + "WHERE campaign_budget.resource_name = '" + campaignBudgetResourceName + "'";

查询广告洞察计划SQL

String query = "SELECT " +
                    "campaign.id, " +
                    "campaign.name, " +
                    "campaign.start_date, " +
                    "campaign.end_date, " +
                    "segments.conversion_action, " +
                    "metrics.conversions, " +
                    "metrics.conversions_value " +
                    "FROM campaign " +
                    "WHERE segments.date BETWEEN '" + startDate + "' AND '" + endDate + "'";

云衔科技是一家专注于企业数字化广告营销解决方案的服务商。公司凭借深厚的行业经验和专业技术能力,致力于为企业客户提供全方位、更高效的数字化广告营销与运营服务。

发表回复