帐户效果报告 [英] Account Performance Report
本文介绍了帐户效果报告的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是Bing Ads API的新手,目前正在尝试使用帐户名称,号码和支出来获取帐户效果报告。总共我有16个帐户,但是,下面的Python代码只返回1个帐户的数据。我已经在Github上的示例的顶部
上构建了这个。我的代码有什么问题吗?
来自auth_helper import *
来自bingads.v12.reporting import *
#您必须在auth_helper.py中提供凭据。
#报告文件扩展名类型。
REPORT_FILE_FORMAT ='Csv'
#报告文件的目录。
FILE_DIRECTORY ='C:/ Users /'
#报告下载文件的名称。
RESULT_FILE_NAME ='帐户效果报告。'+ REPORT_FILE_FORMAT.lower()
#您要等待报告下载的最长时间(以毫秒为单位)。
TIMEOUT_IN_MILLISECONDS = 3600000
def main(authorization_data):
try:
#您可以提交其中一个示例报告,也可以构建自己的报告。
report_request = get_report_request(authorization_data.account_id)
reporting_download_parameters = ReportingDownloadParameters(
report_request = report_request,
result_file_directory = FILE_DIRECTORY,
result_file_name = RESULT_FILE_NAME,
overwrite_result_file = True,#如果要覆盖同一文件,请设置此值。
timeout_in_milliseconds = TIMEOUT_IN_MILLISECONDS#您可以选择在指定的时间间隔后取消下载。
)
output_status_message(" ----- \\\
Awaiting download_report ...")
download_report(reporting_download_parameters)
除了WebFault,例如:
output_webfault_errors(ex)
除了Exception ex:
output_status_message(ex)
def download_report(reporting_download_parameters):
"""您可以通过ReportingServiceManager提交新的下载请求来获取Report对象。
虽然在这种情况下你不会直接使用该文件,但是在一个封面下,一个请求是
提交给Reporting服务,并且报告文件被下载到本地目录。 """
global reporting_service_manager
report_container = reporting_service_manager.download_report(reporting_download_parameters)
#Otherwise如果您已经有通过API下载的报告文件,
#您可以通过ReportFileReader获取Report对象。
#inport_file_reader = ReportFileReader(
#file_path = reporting_download_parameters.result_file_directory + reporting_download_parameters.result_file_name,
#format = reporting_download_parameters.report_request.Format)
#report_container = report_file_reader。 get_report()
if(report_container == None):
output_status_message(""没有提交的报告请求参数的报告数据。")
sys.exit( 0)
#一旦通过上述任一工作流程获得报告对象,您就可以访问元数据和报告记录。
#输出报告元数据
record_count = report_container.record_count
output_status_message(" ReportName:{0}" .format(report_container.report_name))
output_status_message(" ReportTimeStart:{0}" .format(report_container.report_time_start))
output_status_message(" ReportTimeEnd:{0}" .format(report_container.report_time_end))
output_status_message (" LastCompletedAvailableDate:{0}" .format(report_container.last_completed_available_date))
output_status_message(" ReportAggregation:{0}" .format(report_container.report_aggregation))
output_status_message(" ReportColumns) :{0}" .format(" ;;" .join(report_container.report_columns中列的str(列))))
output_status_message(" ReportRecordCount:{0}" .format(record_count) )
#Analyze and output performance statistics
if"Impressions""在report_container.report_columns和\ $ b $ b"点击次数"在report_container.report_columns和\ $ b $ b" DeviceType"在report_container.report_columns和\ $ b $ b" Network"在report_container.report_columns中:
report_record_iterable = report_container.report_records
total_impressions = 0
total_clicks = 0
distinct_devices = set()
distinct_networks = set()
,用于report_record_iterable中的记录:
total_impressions + = record.int_value(" Impressions")
total_clicks + = record.int_value(" Clicks")
distinct_devices .add(record.value(" DeviceType"))
distinct_networks.add(record.value(" Network"))
output_status_message(" Total Impressions:{0}" ; .format(total_impressions))
output_status_message(" Total Clicks:{0}" .format(total_clicks))
output_status_message(" Average Impressions:{0}" .format(total_impressions * 1.0 / record_count))
output_status_message(" Average Clicks:{0}" .format(total _clicks * 1.0 / record_count))
output_status_message(" Distinct Devices:{0}" .format(" ;; " .join(distinct_devices中设备的str(设备))))
output_status_message(" Distinct Networks:{0}" .format(" ;;" .join(str(network)for network in distinct_networks)))
#Be肯定要关闭报告。
report_container.close()
def get_report_request(account_id):
"""
使用示例报表请求或构建自己的报表请求。
"""
aggregation ='摘要'
exclude_column_headers = False
exclude_report_footer = False
exclude_report_header = False
time = reporting_service.factory.create('ReportTime')
#您可以使用自定义日期范围或预定义时间。
time.PredefinedTime ='LastMonth'
time.ReportTimeZone ='PacificTimeUSCanadaTijuana'
return_only_complete_data = True
#BudgetSummaryReportRequest不包含Aggregation的定义。
#BudgetSummaryReportRequest需要BudgetSummaryReportTime而不是ReportTime。
accounts_summary_report_time = reporting_service.factory.create('AccountPerformanceReportRequest')
accounts_summary_report_time.CustomDateRangeEnd = time.CustomDateRangeEnd
accounts_summary_report_time.CustomDateRangeStart = time.CustomDateRangeStart
accounts_summary_report_time.PredefinedTime = time.PredefinedTime
accounts_summary_report_time.ReportTimeZone = time.ReportTimeZone
accounts_summary_report_request = get_accounts_summary_report_request(
account_id = account_id,
aggregation = aggregation,
exclude_column_headers = exclude_column_headers,
exclude_report_footer = exclude_report_footer,
exclude_report_header = exclude_report_header,
report_file_format = REPORT_FILE_FORMAT,
return_only_complete_data = return_only_complete_data,
time = time)
return accounts_summary_report_request
def get_accounts_summary_report_reque st(
account_id,
聚合,
exclude_column_headers,
exclude_report_footer,
exclude_report_header,
report_file_format,
return_only_complete_data,
time) :
report_request = reporting_service.factory.create('AccountPerformanceReportRequest')
report_request.Language ='English'
report_request.ExcludeColumnHeaders = exclude_column_headers
report_request.ExcludeReportFooter = exclude_report_footer
report_request.ExcludeReportHeader = exclude_report_header
report_request.Format = report_file_format
report_request.ReturnOnlyCompleteData = return_only_complete_data
report_request.Time = time
report_request.Aggregation = aggregation
report_request .ReportName ="我的帐户摘要报告"
scope = reporting_service.factory.create('AccountReportScope')
scope.AccountIds = {'long':[account_id]}
report_request.Scope = scope
report_columns = reporting_service.factory.create('ArrayOfAccountPerformanceReportColumn')
report_columns.AccountPerformanceReportColumn.append([
'AccountNumber',
'AccountName',
'Spend',
])
report_request.Columns = report_columns
返回report_request
#主要执行
如果__name__ ==' __main__':
print("加载Web服务客户端代理...")
authorization_data = AuthorizationData(
account_id =无,
customer_id =无,
developer_token = DEVELOPER_TOKEN,
身份验证=无,
)
reporting_service_manager = ReportingServiceManager(
authorization_data = authorization_da ta,
poll_interval_in_milliseconds = 5000,
environment = ENVIRONMENT,
)
#除了ReportingServiceManager,您还需要报告ServiceClient
#来构建ReportRequest。
reporting_service = ServiceClient(
service ='ReportingService',
version = 12,
authorization_data = authorization_data,
environment = ENVIRONMENT,
)
authenticate(authorization_data)
main(authorization_data)
解决方案
你好。
根据
文档,您最多可以在此处包含1,000个帐户ID:scope.AccountIds = {'long':[account_id1,account_id2,accountId3,etcetera] }
我希望这有帮助!
Eric
Hi,
I'm fairly new to Bing Ads API and currently trying to get an Account Performance Report with the Account name, number and spend. In total I have 16 accounts, however, the below Python code is only returning the data for 1 account. I've built this on top of the examples on Github. Any clue what's wrong with my code?
from auth_helper import * from bingads.v12.reporting import * # You must provide credentials in auth_helper.py. # The report file extension type. REPORT_FILE_FORMAT='Csv' # The directory for the report files. FILE_DIRECTORY='C:/Users/' # The name of the report download file. RESULT_FILE_NAME='Account Performance Report.' + REPORT_FILE_FORMAT.lower() # The maximum amount of time (in milliseconds) that you want to wait for the report download. TIMEOUT_IN_MILLISECONDS=3600000 def main(authorization_data): try: # You can submit one of the example reports, or build your own. report_request=get_report_request(authorization_data.account_id) reporting_download_parameters = ReportingDownloadParameters( report_request=report_request, result_file_directory = FILE_DIRECTORY, result_file_name = RESULT_FILE_NAME, overwrite_result_file = 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. ) output_status_message("-----\nAwaiting download_report...") download_report(reporting_download_parameters) except WebFault as ex: output_webfault_errors(ex) except Exception as ex: output_status_message(ex) def download_report(reporting_download_parameters): """ You can get a Report object by submitting a new download request via ReportingServiceManager. Although in this case you will not work directly with the file, under the covers a request is submitted to the Reporting service and the report file is downloaded to a local directory. """ global reporting_service_manager report_container = reporting_service_manager.download_report(reporting_download_parameters) #Otherwise if you already have a report file that was downloaded via the API, #you can get a Report object via the ReportFileReader. # report_file_reader = ReportFileReader( # file_path = reporting_download_parameters.result_file_directory + reporting_download_parameters.result_file_name, # format = reporting_download_parameters.report_request.Format) # report_container = report_file_reader.get_report() if(report_container == None): output_status_message("There is no report data for the submitted report request parameters.") sys.exit(0) #Once you have a Report object via either workflow above, you can access the metadata and report records. #Output the report metadata record_count = report_container.record_count output_status_message("ReportName: {0}".format(report_container.report_name)) output_status_message("ReportTimeStart: {0}".format(report_container.report_time_start)) output_status_message("ReportTimeEnd: {0}".format(report_container.report_time_end)) output_status_message("LastCompletedAvailableDate: {0}".format(report_container.last_completed_available_date)) output_status_message("ReportAggregation: {0}".format(report_container.report_aggregation)) output_status_message("ReportColumns: {0}".format("; ".join(str(column) for column in report_container.report_columns))) output_status_message("ReportRecordCount: {0}".format(record_count)) #Analyze and output performance statistics if "Impressions" in report_container.report_columns and \ "Clicks" in report_container.report_columns and \ "DeviceType" in report_container.report_columns and \ "Network" in report_container.report_columns: report_record_iterable = report_container.report_records total_impressions = 0 total_clicks = 0 distinct_devices = set() distinct_networks = set() for record in report_record_iterable: total_impressions += record.int_value("Impressions") total_clicks += record.int_value("Clicks") distinct_devices.add(record.value("DeviceType")) distinct_networks.add(record.value("Network")) output_status_message("Total Impressions: {0}".format(total_impressions)) output_status_message("Total Clicks: {0}".format(total_clicks)) output_status_message("Average Impressions: {0}".format(total_impressions * 1.0 / record_count)) output_status_message("Average Clicks: {0}".format(total_clicks * 1.0 / record_count)) output_status_message("Distinct Devices: {0}".format("; ".join(str(device) for device in distinct_devices))) output_status_message("Distinct Networks: {0}".format("; ".join(str(network) for network in distinct_networks))) #Be sure to close the report. report_container.close() def get_report_request(account_id): """ Use a sample report request or build your own. """ aggregation = 'Summary' exclude_column_headers=False exclude_report_footer=False exclude_report_header=False time=reporting_service.factory.create('ReportTime') # You can either use a custom date range or predefined time. time.PredefinedTime='LastMonth' time.ReportTimeZone='PacificTimeUSCanadaTijuana' return_only_complete_data=True #BudgetSummaryReportRequest does not contain a definition for Aggregation. #BudgetSummaryReportRequest requires BudgetSummaryReportTime instead of ReportTime. accounts_summary_report_time=reporting_service.factory.create('AccountPerformanceReportRequest') accounts_summary_report_time.CustomDateRangeEnd=time.CustomDateRangeEnd accounts_summary_report_time.CustomDateRangeStart=time.CustomDateRangeStart accounts_summary_report_time.PredefinedTime=time.PredefinedTime accounts_summary_report_time.ReportTimeZone=time.ReportTimeZone accounts_summary_report_request=get_accounts_summary_report_request( account_id=account_id, aggregation=aggregation, exclude_column_headers=exclude_column_headers, exclude_report_footer=exclude_report_footer, exclude_report_header=exclude_report_header, report_file_format=REPORT_FILE_FORMAT, return_only_complete_data=return_only_complete_data, time=time) return accounts_summary_report_request def get_accounts_summary_report_request( account_id, aggregation, exclude_column_headers, exclude_report_footer, exclude_report_header, report_file_format, return_only_complete_data, time): report_request=reporting_service.factory.create('AccountPerformanceReportRequest') report_request.Language='English' report_request.ExcludeColumnHeaders=exclude_column_headers report_request.ExcludeReportFooter=exclude_report_footer report_request.ExcludeReportHeader=exclude_report_header report_request.Format=report_file_format report_request.ReturnOnlyCompleteData=return_only_complete_data report_request.Time=time report_request.Aggregation=aggregation report_request.ReportName="My Account Summary Report" scope=reporting_service.factory.create('AccountReportScope') scope.AccountIds={'long': [account_id] } report_request.Scope=scope report_columns=reporting_service.factory.create('ArrayOfAccountPerformanceReportColumn') report_columns.AccountPerformanceReportColumn.append([ 'AccountNumber', 'AccountName', 'Spend', ]) report_request.Columns=report_columns return report_request # Main execution if __name__ == '__main__': print("Loading the web service client proxies...") authorization_data=AuthorizationData( account_id=None, customer_id=None, developer_token=DEVELOPER_TOKEN, authentication=None, ) reporting_service_manager=ReportingServiceManager( authorization_data=authorization_data, poll_interval_in_milliseconds=5000, environment=ENVIRONMENT, ) # In addition to ReportingServiceManager, you will need a reporting ServiceClient # to build the ReportRequest. reporting_service=ServiceClient( service='ReportingService', version=12, authorization_data=authorization_data, environment=ENVIRONMENT, ) authenticate(authorization_data) main(authorization_data)
解决方案
Hello.
Per the docs, you can include up to 1,000 account IDs here:
scope.AccountIds={'long': [account_id1, account_id2, accountId3, etcetera] }I hope this helps!
Eric
这篇关于帐户效果报告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文