Hi
Below is my code for download campaign report.
download.py
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)
authenticator.py
`from bingads.authorization import *
AccessToken="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
def authenticate(authorization_data):
import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport.http').setLevel(logging.DEBUG)
authentication = OAuthWebAuthCodeGrant(client_id="XXXXXXXXXXXXXX",
client_secret="rnxnRSXBOC206@obhC51_;_",
redirection_uri="https://www.tv.com",
oauth_tokens=OAuthTokens(access_token=AccessToken))
authorization_data.authentication = authentication
print "authorization_data", authorization_data
def oauth_tokens(self):
return self._oauth_tokens
if __name__ == "__main__":
authorization_data = AuthorizationData(
account_id="XXXXXXXXXXXXX",
customer_id="XXXXXXXXXXXXXXXXXXX",
developer_token="XXXXXXXXXXXXXXXXX",
authentication=None, )
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[] =
"TimePeriod",
"AccountId",
"CampaignId",
"CampaignName",
"Conversions",
"DeviceType",
"BidMatchType",
"Clicks",
"Impressions",
"Ctr",
"AverageCpc",
"Spend",
"AverageCpm",
"AverageDurationPerVisit",
"AveragePagesPerVisit",
"AveragePosition",
"ConversionRate",
"ImpressionSharePercent",
"Ptr",
"QualityScore",
"Revenue",
"TotalVisits",,
}
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:
<SOAP-ENV:Envelope xmlns:tns="https://bingads.microsoft.com/Reporting/v12" xmlns:ns0="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="https://bingads.microsoft.com/Reporting/v12" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
SOAP-ENV:Header
tns:AuthenticationTokenXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</tns:AuthenticationToken>
tns:CustomerAccountIdxxxx</tns:CustomerAccountId>
tns:CustomerIdxxx</tns:CustomerId>
tns:DeveloperTokenxxxxxxxx</tns:DeveloperToken>
</SOAP-ENV:Header>
ns1:Body
ns2:SubmitGenerateReportRequest
<ns2:ReportRequest xsi:type="ns2:CampaignPerformanceReportRequest">
ns2:Formatcsv</ns2:Format>
ns2:LanguageEnglish</ns2:Language>
ns2:ReportNameMy Campaign Performance Report</ns2:ReportName>
ns2:ReturnOnlyCompleteDatafalse</ns2:ReturnOnlyCompleteData>
ns2:AggregationDaily</ns2:Aggregation>
ns2:Columns
ns2:CampaignPerformanceReportColumnTimePeriod</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnAccountId</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnCampaignId</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnCampaignName</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnConversions</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnDeviceType</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnBidMatchType</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnClicks</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnImpressions</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnCtr</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnAverageCpc</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnSpend</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnAverageCpm</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnAverageDurationPerVisit</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnAveragePagesPerVisit</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnAveragePosition</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnConversionRate</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnImpressionSharePercent</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnPtr</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnQualityScore</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnRevenue</ns2:CampaignPerformanceReportColumn>
ns2:CampaignPerformanceReportColumnTotalVisits</ns2:CampaignPerformanceReportColumn>
</ns2:Columns>
ns2:Scope
ns2:AccountIds
ns0:longXXXXXXXXXXXXXXX</ns0:long>
</ns2:AccountIds>
</ns2:Scope>
ns2:Time
ns2:PredefinedTime2018-06-01</ns2:PredefinedTime>
ns2:ReportTimeZonePacificTimeUSCanadaTijuana</ns2:ReportTimeZone>
</ns2:Time>
</ns2:ReportRequest>
</ns2:SubmitGenerateReportRequest>
</ns1:Body>
</SOAP-ENV:Envelope>
DEBUG:suds.client:headers = {'SOAPAction': '"SubmitGenerateReport"', 'Content-Type': 'text/xml; charset=utf-8', 'User-Agent': 'BingAdsSDKPython 11.12.4 (2, 7, 15)'}
DEBUG:suds.transport.http:sending:
URL: https://reporting.api.bingads.microsoft.com/Api/Advertiser/Reporting/V12/ReportingService.svc
HEADERS: {'Soapaction': '"SubmitGenerateReport"', 'SOAPAction': '"SubmitGenerateReport"', 'User-agent': 'BingAdsSDKPython 11.12.4 (2, 7, 15)', 'Content-Type': 'text/xml; charset=utf-8', 'Content-type': 'text/xml; charset=utf-8', 'User-Agent': 'BingAdsSDKPython 11.12.4 (2, 7, 15)'}
MESSAGE:
*****************XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX105S5D231O576863csvEnglishMy Campaign Performance ReportfalseDailyTimePeriodAccountIdCampaignIdCampaignNameConversionsDeviceTypeBidMatchTypeClicksImpressionsCtrAverageCpcSpendAverageCpmAverageDurationPerVisitAveragePagesPerVisitAveragePositionConversionRateImpressionSharePercentPtrQualityScoreRevenueTotalVisits1360042992018-06-01PacificTimeUSCanadaTijuana
DEBUG:suds.client:HTTP failed - 500 - Internal Server Error:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault>s:ServerInvalid client data. Check the SOAP fault details for more information868d5d6a-3470-4d9e-8021-34c740527b9b105
InvalidCredentialsAuthentication failed. Either supplied credentials are invalid or the account is inactive</s:Fault></s:Body></s:Envelope>
ERROR:suds.client:<suds.sax.document.Document instance at 0x7f2cc047ba28>
Server raised fault: 'Invalid client data. Check the SOAP fault details for more information'