使用Google Ads API Ruby客户端库遭遇UNEXPECTED_END_OF_QUERY错误
问题排查与修复
根本原因
你在Google Ads查询语言(GQL)里误用了HTML转义字符<代替原生的<符号,API无法解析这种实体字符,导致查询语法中断,触发UNEXPECTED_END_OF_QUERY错误。
修复方案
- 替换转义运算符:把查询中的
customer_client.level <= 1改成customer_client.level <= 1,使用原生的小于等于符号。 - 保持HEREDOC简洁:
<<~QUERY已经会自动去除每行前导空白,无需额外处理,确保查询语句没有多余的空格或换行干扰。
修正后的完整代码
client = Google::Ads::GoogleAds::GoogleAdsClient.new do |config| config.client_id = client_id config.client_secret = client_secret config.refresh_token = access_token config.developer_token = developer_token end google_ads_service = client.service.google_ads query = <<~QUERY SELECT customer_client.client_customer, customer_client.level, customer_client.manager, customer_client.descriptive_name, customer_client.currency_code, customer_client.time_zone, customer_client.id FROM customer_client WHERE customer_client.level <= 1 QUERY begin request = google_ads_service.search_stream do |search| search.customer_id = '8148704352' search.query = query search.page_size = 100 end request.each do |response| response.results.each do |row| puts row end end rescue Google::Ads::GoogleAds::Errors::GoogleAdsError => e puts "Error message: #{e.failure}" end
避坑提示
- 不要给整个查询加单引号:GQL不需要额外的引号包裹,强行添加会让API把引号当成查询的一部分,直接引发语法错误。
- 提前验证查询:可以先在Google Ads API的查询测试工具里验证语句语法,确认没问题再写到代码里。
内容的提问来源于stack exchange,提问作者Malaika Inam
相关产品推荐
相关产品推荐

