Hi all,

I'm trying to use the AdWordsAPI for getting keyword stats using the 
TargetingIdeaService.

When I used the script last month (start of April 2016) it worked 
perfectly, but now the TargetingIdeaPage is returning totalNumEntries = 0.

Has something changed since then? I've attached the Python script as a text 
file.

Thanks for your help!

Matt

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and Google+:
https://googleadsdeveloper.blogspot.com/
https://plus.google.com/+GoogleAdsDevelopers/posts
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API Forum" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
Visit this group at https://groups.google.com/group/adwords-api.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/14a2cc13-a9af-42aa-b54e-4122c8f79f9b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
keywordList = [......]
locationList = [{'id': '1000'}]
attributeList = ['KEYWORD_TEXT', 'SEARCH_VOLUME', 
'CATEGORY_PRODUCTS_AND_SERVICES', 'COMPETITION', 'AVERAGE_CPC', 
'TARGETED_MONTHLY_SEARCHES']
networkDict = {'targetGoogleSearch': True, 'targetSearchNetwork': False, 
'targetPartnerSearchNetwork': False}

outputFilename = 'keywordAnalysis.csv'

PAGE_SIZE = 100

def main(client):
  
  maxQuerySize = 800
  queryOffset = 0
  moreQueries = True
  keywordAnalysis = {}
  
  while moreQueries:
      # Initialize appropriate service.
      targeting_idea_service = client.GetService(
          'TargetingIdeaService', version='v201601')
    
      # Construct selector object and retrieve related keywords.
      offset = 0
      selector = {
          'searchParameters': [
              {
                  'xsi_type': 'RelatedToQuerySearchParameter',
                  'queries': keywordList[queryOffset:(queryOffset + 
maxQuerySize)]
              },
              {
                  # Language setting (optional).
                  # The ID can be found in the documentation:
                  #  
https://developers.google.com/adwords/api/docs/appendix/languagecodes
                  'xsi_type': 'LanguageSearchParameter',
                  'languages': [{'id': '1000'}]
              },
              {
                  'xsi_type': 'NetworkSearchParameter',
                  'networkSetting': networkDict
              }          
          ],
    
          'ideaType': 'KEYWORD',
          'requestType': 'STATS',
          'requestedAttributeTypes': attributeList,
          'paging': {
              'startIndex': str(offset),
              'numberResults': str(PAGE_SIZE)
          }
      }
      # if locationList is not empty, add the location search parameters to the 
selector:
      if locationList:
          locationSearchParameter = {
                  # Location setting (optional).
                  # The ID can be found in the documentation:
                  #  
https://developers.google.com/adwords/api/docs/appendix/geotargeting
                  'xsi_type': 'LocationSearchParameter',
                  'locations': locationList
                  }
          selector['searchParameters'].append(locationSearchParameter)
      print selector
      # store the data in keywordAnalysis as Keyword-Stat pairs, ie 'wedding 
planning':{AVERAGE_CPC: 2, SEARCH_VOLUME: 65, etc}:
      
      more_pages = True
      print 'Attempting Batch %s of %s:' % ((queryOffset/maxQuerySize)+1, 
len(keywordList)/maxQuerySize)
      noData = False
      while more_pages:
        Error = True
        while Error:
            try:
                page = targeting_idea_service.get(selector)
            except suds.WebFault, f:
                print f
                reason = f.fault.detail.ApiExceptionFault.errors.reason
                print 'Reason: %s' % (reason)
                if reason == "RATE_EXCEEDED":                
                    pause = 
float(f.fault.detail.ApiExceptionFault.errors.retryAfterSeconds)
                    print 'Pausing for %s seconds...' % (pause)
                    print
                    time.sleep(pause)
                else:
                    print f.fault
            else:
                Error = False
                print page
                if 'entries' in page:
                  for result in page['entries']:
                    attributes = {}
                    for attribute in result['data']:
                      # AVERAGE_CPC is in a different format to other attributes
                      if attribute['key'] == 'AVERAGE_CPC':
                          attributes[attribute['key']] = 
getattr(getattr(attribute.value, 'value', 0),'microAmount', 0) / 1000000.0
                      # For TARGETED_MONTHLY_SEARCHES, separate out each 
year-month and use as keys. Also populate MonthList to use as column headers 
later
                      elif attribute['key'] == 'TARGETED_MONTHLY_SEARCHES':
                          monthList = []
                          for MonthlySearchVolume in attribute.value.value:
                              yearMonth = 
str(MonthlySearchVolume.year)+'-'+str(MonthlySearchVolume.month)
                              monthList.append(yearMonth)
                              attributes[yearMonth] = 
getattr(MonthlySearchVolume, 'count', '0')
                      else:
                          attributes[attribute['key']] = 
getattr(attribute['value'], 'value', '0')
                    # output the stats for this keyword as a keyword-stat pair 
(see above)
                    keyword = attributes.pop('KEYWORD_TEXT')
                    keywordAnalysis[keyword] = attributes
                else:
                  noData = True
                offset += PAGE_SIZE
                selector['paging']['startIndex'] = str(offset)
                more_pages = offset < int(page['totalNumEntries'])
  
      queryOffset += maxQuerySize
      moreQueries = queryOffset < len(keywordList)
      if queryOffset == maxQuerySize:
          outputHeaders = attributeList[:-1] + monthList
          with open(outputFilename, 'w') as outputFile:
              wr = csv.writer(outputFile, dialect = 'excel', lineterminator = 
'\n')
              wr.writerow(outputHeaders)
      if noData:
          print '\tError: no data found in Batch'
          print
      else:
          with open(outputFilename, 'a') as outputFile:
              wr = csv.writer(outputFile, dialect = 'excel', lineterminator = 
'\n')
              for keyword in keywordAnalysis.keys():
                  row = [keyword]
                  for attribute in outputHeaders[1:]:
                      row.append(keywordAnalysis[keyword][attribute])
                  wr.writerow(row)
          print '\tBatch %s completed' % (queryOffset/maxQuerySize)
          print '\tNumber of keywords returned in this batch: %s' % 
(len(keywordAnalysis.keys()))
          print
          keywordAnalysis = {}

if __name__ == '__main__':
  # Initialize client object.
  thisDir = os.path.dirname(os.path.abspath(__file__))
  adwords_client = adwords.AdWordsClient.LoadFromStorage(thisDir + 
'\googleads.yaml')
  print 'Accessing API, and retrieving keyword data...'
  main(adwords_client)
  print 'Should be all done. Results are in ' + outputFilename
  raw_input('Press any key to continue...')
  • Targeting Idea ... Nick Debonair
    • Re: Target... 'Anthony Madrigal' via AdWords API Forum
      • Re: Ta... Nick Debonair
        • Re... 'Michael Cloonan (AdWords API Team)' via AdWords API Forum
          • ... Nick Debonair
            • ... 'Michael Cloonan (AdWords API Team)' via AdWords API Forum
    • Targeting ... Nick Debonair

Reply via email to