帐户效果报告 [英] Account Performance Report

查看:72
本文介绍了帐户效果报告的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 


我是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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆