簡體   English   中英

無法使用谷歌廣告測試賬號:QuotaCheckError.INVALID_TOKEN_HEADER@; 觸發器:'新開發者必須使用 Google Ads API。'

[英]Unable to use Google ads Test account : QuotaCheckError.INVALID_TOKEN_HEADER @ ; trigger:'New developers must use the Google Ads API.'

已經一個多星期了,我還沒有弄清楚我哪里出錯了。
我正在嘗試使用關鍵字規划器並獲得持續的身份驗證錯誤。 我有我的測試經理帳戶,並從中創建了一個谷歌測試廣告帳戶。 我還有來自 console.developer.google.com 的 client_id、client_secret 和 refresh_token
我正在使用未經驗證的生產帳戶中的開發人員令牌。
提前致謝。
這是錯誤消息:


Your default encoding, cp1252, is not UTF-8. Please run this script with UTF-8 encoding to avoid errors.
Error summary: {'faultMessage': "[QuotaCheckError.INVALID_TOKEN_HEADER @ ; trigger:'New developers must use the Google Ads API.']", 'requestId': 'foobar', 'serviceName': 'TrafficEstimatorService', 'methodName': 'get', 'operations': '1', 'responseTime': '83'}
Traceback (most recent call last):
  File "env\lib\site-packages\googleads\common.py", line 984, in MakeSoapRequest 
    return soap_service_method(
  File "env\lib\site-packages\zeep\proxy.py", line 46, in __call__
    return self._proxy._binding.send(
  File "env\lib\site-packages\zeep\wsdl\bindings\soap.py", line 135, in send     
    return self.process_reply(client, operation_obj, response)  File "env\lib\site-packages\zeep\wsdl\bindings\soap.py", line 229, in process_reply
    return self.process_error(doc, operation)
  File "env\lib\site-packages\zeep\wsdl\bindings\soap.py", line 329, in process_error
    raise Fault(
zeep.exceptions.Fault: [QuotaCheckError.INVALID_TOKEN_HEADER @ ; trigger:'New developers must use the Google Ads API.']     

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test.py", line 181, in <module>
    main(adwords_client)
  File "test.py", line 97, in main
    estimates = traffic_estimator_service.get(selector)       
  File "env\lib\site-packages\googleads\common.py", line 996, in MakeSoapRequest 
    raise googleads.errors.GoogleAdsServerFault(
googleads.errors.GoogleAdsServerFault: [QuotaCheckError.INVALID_TOKEN_HEADER @ ; trigger:'New developers must use the Google Ads API.']

這是我的谷歌廣告文件:

adwords:
# AdWordsClient configurations
  developer_token: mydevtoken1234
  client_customer_id: 123-123-123
  validate_only: False
  client_id: myclientId.apps.googleusercontent.com
  client_secret: myclientsecret
  refresh_token: myrefreshtoken

# AdManagerClient configurations
ad_manager:
  developer_token: EZ-x_JXs6mtX6tDO_8VauA
  application_name: get-keyword-ideas
  # path_to_private_key_file: INSERT_PATH_TO_JSON_KEY_FILE_HERE
  client_id: myclientId.apps.googleusercontent.com
  client_secret: myclientsecret
  refresh_token: myrefreshtoken

這是我的 Python 代碼,用於 trafficEstimator

#!/usr/bin/env python
#
# Copyright 2016 Google Inc. All Rights Reserved.
#
# 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 retrieves keyword traffic estimates.

The LoadFromStorage method is pulling credentials and properties from a
"googleads.yaml" file. By default, it looks for this file in your home
directory. For more information, see the "Caching authentication information"
section of our README.

"""

from googleads import adwords


def main(client):
  # Initialize appropriate service.
  traffic_estimator_service = client.GetService(
      'TrafficEstimatorService', version='v201809')

  # Construct selector object and retrieve traffic estimates.
  keywords = [
      {'text': 'mars cruise', 'matchType': 'BROAD'},
      {'text': 'cheap cruise', 'matchType': 'PHRASE'},
      {'text': 'cruise', 'matchType': 'EXACT'}
  ]
  negative_keywords = [
      {'text': 'moon walk', 'matchType': 'BROAD'}
  ]
  keyword_estimate_requests = []
  for keyword in keywords:
    keyword_estimate_requests.append({
        'keyword': {
            'xsi_type': 'Keyword',
            'matchType': keyword['matchType'],
            'text': keyword['text']
        }
    })

  for keyword in negative_keywords:
    keyword_estimate_requests.append({
        'keyword': {
            'xsi_type': 'Keyword',
            'matchType': keyword['matchType'],
            'text': keyword['text']
        },
        'isNegative': 'true'
    })

  # Create ad group estimate requests.
  adgroup_estimate_requests = [{
      'keywordEstimateRequests': keyword_estimate_requests,
      'maxCpc': {
          'xsi_type': 'Money',
          'microAmount': '1000000'
      }
  }]

  # Create campaign estimate requests.
  campaign_estimate_requests = [{
      'adGroupEstimateRequests': adgroup_estimate_requests,
      'criteria': [
          {
              'xsi_type': 'Location',
              'id': '2840'  # United States.
          },
          {
              'xsi_type': 'Language',
              'id': '1000'  # English.
          }
      ],
  }]

  # Create the selector.
  selector = {
      'campaignEstimateRequests': campaign_estimate_requests,
  }

  # Optional: Request a list of campaign-level estimates segmented by
  # platform.
  selector['platformEstimateRequested'] = True

  # Get traffic estimates.
  estimates = traffic_estimator_service.get(selector)

  campaign_estimate = estimates['campaignEstimates'][0]

  # Display the campaign level estimates segmented by platform.
  if 'platformEstimates' in campaign_estimate:
    platform_template = ('Results for the platform with ID: "%d" and name: '
                         '"%s".')
    for platform_estimate in campaign_estimate['platformEstimates']:
      platform = platform_estimate['platform']
      DisplayEstimate(platform_template % (platform['id'],
                                           platform['platformName']),
                      platform_estimate['minEstimate'],
                      platform_estimate['maxEstimate'])

  # Display the keyword estimates.
  if 'adGroupEstimates' in campaign_estimate:
    ad_group_estimate = campaign_estimate['adGroupEstimates'][0]
    if 'keywordEstimates' in ad_group_estimate:
      keyword_estimates = ad_group_estimate['keywordEstimates']
      keyword_template = ('Results for the keyword with text "%s" and match '
                          'type "%s":')

      keyword_estimates_and_requests = zip(keyword_estimates,
                                           keyword_estimate_requests)

      for keyword_tuple in keyword_estimates_and_requests:
        if keyword_tuple[1].get('isNegative', False):
          continue
        keyword = keyword_tuple[1]['keyword']
        keyword_estimate = keyword_tuple[0]
        DisplayEstimate(keyword_template % (keyword['text'],
                                            keyword['matchType']),
                        keyword_estimate['min'], keyword_estimate['max'])


def _CalculateMean(min_est, max_est):
  if min_est and max_est:
    return (float(min_est) + float(max_est)) / 2.0
  else:
    return None


def _FormatMean(mean):
  if mean:
    return '%.2f' % mean
  else:
    return 'N/A'


def DisplayEstimate(message, min_estimate, max_estimate):
  """Displays mean average cpc, position, clicks, and total cost for estimate.

  Args:
    message: str message to display for the given estimate.
    min_estimate: zeep.objects.StatsEstimate containing a minimum estimate from the
      TrafficEstimatorService response.
    max_estimate: zeep.objects.StatsEstimate containing a maximum estimate from the
      TrafficEstimatorService response.
  """
  # Find the mean of the min and max values.
  mean_avg_cpc = (_CalculateMean(min_estimate['averageCpc']['microAmount'],
                                 max_estimate['averageCpc']['microAmount'])
                  if 'averageCpc' in min_estimate
                  and min_estimate['averageCpc'] else None)
  mean_avg_pos = (_CalculateMean(min_estimate['averagePosition'],
                                 max_estimate['averagePosition'])
                  if 'averagePosition' in min_estimate
                  and min_estimate['averagePosition'] else None)
  mean_clicks = _CalculateMean(min_estimate['clicksPerDay'],
                               max_estimate['clicksPerDay'])
  mean_total_cost = _CalculateMean(min_estimate['totalCost']['microAmount'],
                                   max_estimate['totalCost']['microAmount'])

  print(message)
  print('  Estimated average CPC: %s' % _FormatMean(mean_avg_cpc))
  print('  Estimated ad position: %s' % _FormatMean(mean_avg_pos))
  print('  Estimated daily clicks: %s' % _FormatMean(mean_clicks))
  print('  Estimated daily cost: %s' % _FormatMean(mean_total_cost))


if __name__ == '__main__':
  # Initialize client object.
  adwords_client = adwords.AdWordsClient.LoadFromStorage('googleads.yaml')
  main(adwords_client)

在獲取報告數據時,我對基本訪問令牌有同樣的問題。

我使用了google-ads package 而不是googleads ,它解決了這個問題。

IMO,他們已經開始對新開發人員限制 AdWords API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM