华为分析服务目前已提供导入自定义用户属性和上报用户行为的API接口,为减小API接口的工作量,现提供Python版本的SDK给开发者集成,用以快速的使用API接口能力。
python -m pip install hw_wisecloud_analytics-*.whl --upgrade

ha = HuaweiApp.Init('Android',\
'https://test.test.cn').\
set_app_id('123').\
set_client_id('123').\
set_client_secret('123').\
set_package_name('123.123').\
set_product_id('123').\
build() 其中:
数据处理位置 | 存储地址 |
|---|---|
中国 |
|
新加坡 | |
俄罗斯 | |
德国 |
当填入的参数类型非法时,SDK内部会强行转化输入的参数为指定的类型,如果无法转换,将强制设为默认值,并输出日志。
SdkConfig.init().set_max_cache_size(10000).set_cache_time(10).set_max_retry(2).set_event_send_size(100).set_user_send_size(100).set_threshold(50).set_import_concurrent(10).set_async_mode(True).set_shut_down_delay(0.25).build();
参数 | 参数说明 |
|---|---|
set_max_cache_size | 最大缓存数量,设置缓存中最大的数据量;当数量达到限制,会对最老的数据进行淘汰并记录日志。 设置区间为1-1000000,默认存放10000条数据,类型为整数。 |
set_cache_time | 缓存上报的间隔时间,单位为s。 设置区间为1-1800s,默认为10s上报一次数据,类型为整数。 |
set_max_retry | 上报重试次数,当上报失败时,会进行重试处理;当达到配置的最大上报次数还是失败时,则会记录日志处理。 设置区间为 0-5次,默认重试2次,类型为整数。 |
set_event_send_size | 单次“上报用户行为”的发送数量。 设置区间为1-100,默认100,表示单次上报的用户行为数据为100条,类型为整数。 |
set_user_send_size | 单次“导入自定义用户属性”的发送数量。 设置区间为1-100,默认100,表示单次上报的自定义用户属性为100条,类型为整数。 |
set_threshold | 缓存累积的数据达到缓存总量阈值时,则触发上报流程,单位为百分比。 设置区间为1-100,默认50,类型为整数。 |
set_import_concurrent | 设置并发上传任务数。 设置区间为1-100,默认10,类型为整数。 |
set_async_mode | 设置异步或同步上传模式,异步上传方式是依赖aiohttp异步请求库,请确保您安装了aiohttp异步请求库;当设置为同步模式时,SDK将利用多线程实现并发。 True表示异步上传方式,False表示同步上传方式, 默认True,类型为布尔。 |
set_shut_down_delay | 延迟关闭事件循环等待时间,只有当“set_async_mode”设置为“True”时,此配置生效,单位为秒。 设置区间为0-1,默认0.25,类型为浮点。 说明: Python 3.8及以上版本的asyncio标准库与aiohttp异步请求库配合时,偶发警告日志,不影响实际数据上报,如您想关闭告警日志,可参考Graceful Shutdown配置此参数以消减该日志。 |
# 初始化HuaweiApp实例
ha = HuaweiApp.Init('android',\
'https://analytics-api.cloud.huawei.com.cn').\
set_app_id('123').\
set_client_id('123').\
set_client_secret('123').\
set_package_name('123.123').\
set_product_id('123').\
build()
# 初始化SdkConfig配置实例
config = SdkConfig.Init().\
set_cache_time(10).\
set_max_cache_size(1000).\
set_user_send_size(100).\
set_threshold(20).\
build()
# 为了方便统计与调试,每次上报的会话信息都会通过此回调告知调用者,此回调可选。
def report_call_back(batch_result_list):
print(f'[batch over report] got: {batch_result_list}')
token_url = 'https://oauth-login.cloud.huawei.com/oauth2/v3/token'
HuaweiAnalyticsClient.init([ha], policy=config,
callback=report_call_back,
token_url=token_url) 参数 | 参数说明 |
|---|---|
HuaweiApp | 此处参数为d中获取的App信息。 |
SdkConfig | 此处参数为e中填写的上报配置。 |
token_url | Python SDK的鉴权请求地址,当前配置为https://oauth-login.cloud.huawei.com/oauth2/v3/token,详情请参见基于OAuth 2.0开放鉴权。 |
# 上报用户属性
ret = HuaweiAnalyticsClient.add_user_data('123', {
'id': 'abc1',
'properties': [{
'id': 'pos1',
'value': '123'
}, {
'id': 'pos2',
'value': '456'
}]
})
# 上报用户行为
ret = HuaweiAnalyticsClient.add_event_data('101837255', {
'aaid': '123-123-123-123-123',
'eventid': '$EnterScreen',
'eventtime': str(int(time.time() * 1000)),
'event_session_name': '111111_22222',
'first_session_event': 'true',
'userid': 'myid',
'properties': {
'custom_key1': '',
'custom_key2': '',
}
}) 如果您初始化时指定了“report_call_back”回调,当事件上传后都会通过此回调告知您本次上传结果。
回调数据为dict类型,上报用户属性的回调数据示例如下:
{
//上报至appid为123的用户属性
ha_handler: 'app_123_user',
//上报模式:异步
req_mode: 'async',
//上报线程被唤醒的原因
trigger_by: AwakeBatchReason.POLLING_INTERVAL,
//错误或者成功会话分别以数组形式记录
Failure_sessions: [{
//上报回应
response ': {
status: 400,
body: 'xxx'
},
//对应的请求(即调用add传入的data),方便开发者对照发现具体的问题
request : {
data_type: 1,
userdata_set: [{
'id': 'neg',
'properties': [{
'id': 'qwe',
'value': '12345678'
}]
}]
},
//上报次数,范围[1~"set_max_retry"+1]
req_count: 1,
//数据上报的并发任务ID
task_id: 1,
//请求耗时
elapsed_time: timedelta(microseconds=10000)}],
success_sessions: [{
response ': {
status: 200,
body: 'xxx'
},
request : {
data_type: 1,
userdata_set: [{
'id': 'neg',
'properties': [{
'id': 'qwe',
'value': '12345678'
}]
}]
},
req_count: 1,
task_id: 0,
elapsed_time: timedelta(microseconds=10000)
}]
}
当服务升级、重启等导致进程关闭的场景时,可以调用flush方法,上报所有数据。
# 发送所有收集的信息到服务器 HuaweiAnalyticsClient.flush()
Python SDK定义了日志打印的类HaSdkLogger,如您需要查看Python SDK打印的日志,则您需要先实现自定义的logging处理器,然后在初始化Python SDK时,调用HaSdkLogger.init()以设置自定义logging处理器。
# 指定输出到文件的日志处理器
file = logging.FileHandler('test.log')
# 指定输出到流的日志处理器,也可以基于StreamHandler派生处理器子类
stream = logging.StreamHandler()
# 把上述自定义的输出通道传给HaSdkLogger,如果都未定义,则SDK不会输出任何日志
HaSdkLogger.init(file_handler=file, stream_handler=stream, level=logging.INFO)