from authenticator import *
from bingads.v12.reporting import *
FILE_DIRECTORY='/home/mohammaddilshad/feed_dowloader/bing/feeds'
DOWNLOAD_FILE_NAME='download.csv'
REPORT_FILE_FORMAT='csv'
# The maximum amount of time (in milliseconds) that you want to wait for the report download.
TIMEOUT_IN_MILLISECONDS=3600000
ENVIRONMENT='production'
def main(authorization_data):
try:
report_request = get_campaign_performance_report_request(None)
reporting_download_parameters = ReportingDownloadParameters(
report_request=report_request,
result_file_directory=FILE_DIRECTORY,
result_file_name=DOWNLOAD_FILE_NAME,
overwrite_result_file=True, # Set this value true if you want to overwrite the same file.
timeout_in_milliseconds=TIMEOUT_IN_MILLISECONDS
)
print("Awaiting Background Completion . . .")
background_completion(reporting_download_parameters)
except Exception as ex:
print ex
def get_campaign_performance_report_request(campaign_ids):
'''
Build a campaign performance report request, including Format, ReportName,
Time, and Columns.
'''
report_request=reporting_service.factory.create('CampaignPerformanceReportRequest')
report_request.Format=REPORT_FILE_FORMAT
report_request.ReportName='My Campaign Performance Report'
report_request.ReturnOnlyCompleteData=False
report_request.Aggregation='Daily'
report_request.Language='English'
scope=reporting_service.factory.create('AccountThroughCampaignReportScope')
if campaign_ids is None:
scope.AccountIds={'long': [authorization_data.account_id] }
scope.Campaigns=None
else:
scope.AccountIds=None
campaigns=reporting_service.factory.create('ArrayOfCampaignReportScope')
for campaign_id in campaign_ids['long']:
campaign_report_scope=reporting_service.factory.create('CampaignReportScope')
campaign_report_scope.AccountId=authorization_data.account_id
campaign_report_scope.CampaignId=campaign_id
campaigns.CampaignReportScope.append(campaign_report_scope)
scope.Campaigns=campaigns
report_request.Scope=scope
# You may either use a custom date range or predefined time.
report_time=reporting_service.factory.create('ReportTime')
report_time.PredefinedTime='2018-06-01'
report_time.ReportTimeZone='PacificTimeUSCanadaTijuana'
report_request.Time=report_time
# Specify the attribute and data report columns.
report_columns=reporting_service.factory.create('ArrayOfCampaignPerformanceReportColumn')
report_columns.CampaignPerformanceReportColumn.append([
'TimePeriod',
'AccountId',
'CampaignId',
'CampaignName',
'Conversions',
'DeviceType',
'BidMatchType',
'Clicks',
'Impressions',
'Ctr',
'AverageCpc',
'Spend',
'AverageCpm',
'AverageDurationPerVisit',
'AveragePagesPerVisit',
'AveragePosition',
'ConversionRate',
'ImpressionSharePercent',
'Ptr',
'QualityScore',
'Revenue',
'TotalVisits',
])
report_request.Columns=report_columns
print "report request", report_request
return report_request
def background_completion(reporting_download_parameters):
global reporting_service_manager
result_file_path = reporting_service_manager.download_file(reporting_download_parameters)
print("Download result file: {0}\n".format(result_file_path))
def submit_and_download(report_request):
global reporting_service_manager
reporting_download_operation = reporting_service_manager.submit_download(report_request)
reporting_operation_status = reporting_download_operation.track(timeout_in_milliseconds=TIMEOUT_IN_MILLISECONDS)
result_file_path = reporting_download_operation.download_result_file(
result_file_directory = FILE_DIRECTORY,
result_file_name = DOWNLOAD_FILE_NAME,
decompress = True,
overwrite = True, # Set this value true if you want to overwrite the same file.
timeout_in_milliseconds=TIMEOUT_IN_MILLISECONDS # You may optionally cancel the download after a specified time interval.
)
# Main execution
if __name__ == '__main__':
print("Python loads the web service proxies at runtime, so you will observe " \
"a performance delay between program launch and main execution...\n")
authorization_data = AuthorizationData(
account_id="XXXXXX",
customer_id="XXXXXXXX",
developer_token="XXXXXXXX",
authentication=None, )
print "authorize_Data", AuthorizationData
reporting_service = ServiceClient(
'ReportingService',
version=12,
authorization_data=authorization_data,
environment=ENVIRONMENT,
)
reporting_service_manager = ReportingServiceManager(
authorization_data=authorization_data,
poll_interval_in_milliseconds=5000,
environment=ENVIRONMENT,
)
authenticate(authorization_data)
main(authorization_data)
@dilshadx the 105 error is typically a mismatch between environment + authentication token + developer token. I suggest that you contact support to confirm your account permissions.
Hi Below is my code for download campaign report.
download.py
SOP Error.
authorize_Data bingads.authorization.AuthorizationData authorization_data <bingads.authorization.AuthorizationData instance at 0x7f2cc12aae60> report request (CampaignPerformanceReportRequest){ ExcludeColumnHeaders = None ExcludeReportFooter = None ExcludeReportHeader = None Format = "csv" Language = "English" ReportName = "My Campaign Performance Report" ReturnOnlyCompleteData = False Aggregation = "Daily" Columns = (ArrayOfCampaignPerformanceReportColumn){ CampaignPerformanceReportColumn[] =
Filter = (CampaignPerformanceReportFilter){ AccountStatus = None AdDistribution = None DeviceOS = None DeviceType = None Status = None } Scope = (AccountThroughCampaignReportScope){ AccountIds = { long[] = "136004299", } Campaigns = None } Time = (ReportTime){ CustomDateRangeEnd = (Date){ Day = None Month = None Year = None } CustomDateRangeStart = (Date){ Day = None Month = None Year = None } PredefinedTime = "2018-06-01" ReportTimeZone = "PacificTimeUSCanadaTijuana" } } Awaiting Background Completion . . . DEBUG:suds.client:sending to (https://reporting.api.bingads.microsoft.com/Api/Advertiser/Reporting/V12/ReportingService.svc) message: <?xml version="1.0" encoding="UTF-8"?>
105