Following application is a simple tool that downloads all keywords and dumps that data to different files. I have removed error handling code and hardcoded many values to simplify it and you can modify this your requirements and don't forget to add your account and API details. I have been able to download few million keywords using multiple processes.
Environment:
Ubuntu karmic OS running Python 2.6.4 for Adwords API version 13 (V13) using Python SUDS SOAP module.
#-- Python application to pull all your campaign keywords. #-- Uses suds SOAP module to connect to Google Services and writes to files (one for each client email). #-- Get list of all client emails (typically multiple accounts created to handle large set of keywords) #-- For each account get its campaigns #-- For each campaign get its adgroups #-- For each adgroup get all keywords #-- print ids and keyword attributes import sys import time import re import traceback as tb import suds.metrics as metrics from suds import WebFault from suds.client import Client #-- A class to handle user details... #-------------------------------------- class GoogleSoapUser: def __init__(self): self.user = {'email' : 'your_developer_api_email_addr', 'password' : 'your_developer_password', 'useragent' : 'Google Adwords KW pull V0.1', 'developerToken' : 'your_developer_token', 'applicationToken' : 'your_application_token' } #-- Note: connecting to production (adwords); for sandbox testing replace it. self.wsdl = {'campaign' :'https://adwords.google.com/api/adwords/v13/CampaignService?wsdl', 'adGroup' :'https://adwords.google.com/api/adwords/v13/AdGroupService?wsdl', 'keyword' :'https://adwords.google.com/api/adwords/v13/CriterionService?wsdl' } def getUser(self): return self.user def getWSDL(self, k=None): return self.wsdl[k] def getClientEmails(self): #-- Client emails to pull data for emails = ['your_campaign_ac_email_addr_1', 'your_campaign_ac_email_addr_2', 'your_campaign_ac_email_addr_3' ] return emails def setHeaderEmail(self, clientEmail=None): self.user['clientEmail'] = clientEmail #-- Main program #------------------------------ if __name__ == '__main__': gUser = GoogleSoapUser() #-- For each client email... for cEmail in gUser.getClientEmails(): #-- Open a output file to dump... print "Checking account: ", cEmail, "\n" file = 'google_' + re.split('@', cEmail)[0] + '.txt' try: f = open('/tmp/'+file, 'w') except IOError as err: print "Unable to open file", file, format(err) #-- Set the SOAP header with client email gUser.setHeaderEmail(cEmail) #-- Get all campaigns... campClient = Client(gUser.getWSDL('campaign')) campClient.set_options(soapheaders=gUser.getUser()) campaigns = campClient.service.getAllAdWordsCampaigns(0) #-- Pass a dummy number... #-- For each campaign ... for campaign in campaigns: campaignID = campaign['id'] print "Checking for campaign: ", campaignID, "\n" adClient = Client(gUser.getWSDL('adGroup')) adClient.set_options(soapheaders=gUser.getUser()) adGroups = adClient.service.getAllAdGroups(campaignID) #-- For each AdGroup... for adGroup in adGroups: adGroupID = adGroup['id'] print "Checking for adGroup: ", adGroupID, "\n" kwClient = Client(gUser.getWSDL('keyword')) kwClient.set_options(soapheaders=gUser.getUser()) keywords = kwClient.service.getAllCriteria(adGroupID) #-- For each keyword... for kw in keywords: f.write(str(campaignID) + '\t' + str(adGroupID) + '\t' + str(kw['id']) + '\t' + kw['type'] + '\t' + kw['text'] + '\t' + str(kw['qualityScore']) + '\t' + kw['destinationUrl'] + '\n' ) # sys.exit() #-- Close this account output file... f.close() print "Data pull complete for account ", cEmail, "\n"
Cheers,
Shiva
No comments:
Post a Comment