{"id":19411581,"url":"https://github.com/volcengine/datafinder-sdk-openapi-py","last_synced_at":"2025-10-21T18:25:49.060Z","repository":{"id":39634328,"uuid":"472179051","full_name":"volcengine/datafinder-sdk-openapi-py","owner":"volcengine","description":null,"archived":false,"fork":false,"pushed_at":"2022-05-30T12:12:17.000Z","size":22,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-07T15:21:21.983Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/volcengine.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-03-21T03:55:02.000Z","updated_at":"2023-10-31T01:46:52.000Z","dependencies_parsed_at":"2022-09-20T06:52:18.041Z","dependency_job_id":null,"html_url":"https://github.com/volcengine/datafinder-sdk-openapi-py","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volcengine%2Fdatafinder-sdk-openapi-py","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volcengine%2Fdatafinder-sdk-openapi-py/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volcengine%2Fdatafinder-sdk-openapi-py/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volcengine%2Fdatafinder-sdk-openapi-py/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/volcengine","download_url":"https://codeload.github.com/volcengine/datafinder-sdk-openapi-py/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240589032,"owners_count":19825285,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-10T12:22:07.038Z","updated_at":"2025-10-21T18:25:48.935Z","avatar_url":"https://github.com/volcengine.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dsl sdk使用说明\n### 1. 导入\n```python\nfrom rangersdk.dsl import DSL, int_expr, string_expr, empty_expr, show\n```\n\n### 2、dsl样例以及说明\n#### a. 事件查询\n```python\nimport requests\nimport ujson\n\nfrom rangersdk.dsl import DSL, int_expr, string_expr, empty_expr, show\n\n\ndsl = (DSL.event_builder()  # 构造事件，每种类型的dsl有对应的builder                                             \n       .app_id(0)  # 支持数组，这里可以是 .appid([1,2])                                                     \n       .range_period('day', 1562688000, 1563206400)  # 查询时间，支持多个时间。range表示区间，有开始和结束时间，last_period 表示最近时间                      \n       .range_period('hour', 1562688000, 1563206400)                        \n       .group('app_channel') # 分组，支持数组，这里也可以是 .group([1,2])                                               \n       .skip_cache(False) # 是否跳过缓存                                                  \n       .tag({'contains_today': 0, 'show_yesterday': 0,                      \n             \"series_type\": \"line\", \"show_map\": {}}) # 设置的标记，不参与查询条件构建，会添加到返回结果字段中                       \n       .and_profile_filter(int_expr('user_is_new', '=', [0])  # 用户filter，支持and和or两种逻辑判断‘            \n                           .show(1, u'老用户'))                                \n       .and_profile_filter(string_expr('language', '=', ['zj_CN', 'zh_cn']) # int_exp,string_exp,empty_exp, 分别表示表达式值的内容的值类型\n                           .string_expr('age', '!=', ['20'])                \n                           .show(2, 'zh_CN, zh_cn; not(20)'))               \n       .query(show('A', u'查询A')  # 查询指标名称, 每个query表示的是并列关系，query()方法里面的表示顺序关系                                          \n              .group('app_name') # 分组，支持数组 groups([])                                           \n              .event('origin', 'predefine_pageview', 'pv') # 事件描述信息                \n              .measure_info('pct', 'event_index', 100) # measure_info 信息                     \n              .and_filter(string_expr('os_name', '=', ['windows'])  # filter         \n                          .string_expr('network_type', '!=', ['wifi'])      \n                          .show('referer_label', 'referrer')))              \n       .query(show('B', '查询B')                                              \n              .group(['app_name'])                                          \n              .event('origin', 'page_open', 'pv')                           \n              .and_filter(empty_expr()                                      \n                          .show('app_id_label', 'app_id')))                 \n       .build()) \n                                                                  \ndsl_str = ujson.dumps(dsl, indent=4)\nprint dsl_str\n\n# 将dsl json化后作为body参数，进行查询\nresp = requests.post(                            \n    'http://ip:port/bear/api/query',                                \n    data=ujson.dumps(dsl),                      \n    headers={'Content-Type': 'application/json'} \n)                                                \n\n```\n\n#### b. 转换查询\n```python\nimport requests\nimport ujson\n\nfrom rangersdk.dsl import DSL, int_expr, string_expr, empty_expr, show\n\n\ndsl = (DSL.funnel_builder()                                             \n       .app_id(0)                                                   \n       .range_period('day', 1560268800, 1562774400)                     \n       .group('os_name')                                                \n       .page(10, 2)                                                     \n       .window('day', 10)                                               \n       .skip_cache(False)                                               \n       .and_profile_filter(int_expr('user_is_new', '=', [0])            \n                           .string_expr('network_type', '!=', ['4g,3g'])\n                           .show(1, u'老用户; not(4g, 3g)'))               \n       .query(show('1', u'查询1')                                         \n              .sample(100)                                             \n              .event('origin', 'play_time', 'pv')                       \n              .and_filter(string_expr('os_name', '=', ['windows'])      \n                          .string_expr('network_type', '!=', ['wifi'])  \n                          .show('referer_label', 'referrer')),          \n              show('2', u'查询2')                                         \n              .sample(100)                                             \n              .event('origin', 'app_launch', 'pv')                      \n              )                                                         \n       .build())                                                        \n\ndsl_str = ujson.dumps(dsl, indent=4)\nprint dsl_str\n\n# 将dsl json化后作为body参数，进行查询\nresp = requests.post(                            \n    'http://ip:port/bear/api/query',                                \n    data=ujson.dumps(dsl),                      \n    headers={'Content-Type': 'application/json'} \n)\n\n```\n\n#### c. 生命周期查询\n```python\nimport requests\nimport ujson\n\nfrom rangersdk.dsl import DSL, int_expr, string_expr, empty_expr, show\n\n\ndsl = (DSL.lifecycle_builder()                                                     \n       .app_id(26142)                                                              \n       .range_period('day', 1561910400, 1562428800)                                \n       .page(10, 2)                                                                \n       .window('day', 1)                                                           \n       .skip_cache(False)                                                          \n       .tag({\"series_type\": \"line\", \"contains_today\": 0,                           \n             \"metrics_type\": \"number\", \"disabled_in_dashboard\": True})             \n       .and_profile_filter(string_expr('custom_mp_platform', '=', ['2'])           \n                           .string_expr('app_channel', 'in', ['alibaba', 'baidu']) \n                           .show(1, u'全体用户'))                                      \n       .query(show('active_user', u'active_user')                                  \n              .sample(100)                                                        \n              .event('origin', 'app_launch', 'pv'))                                \n       .build())                                                                   \n\ndsl_str = ujson.dumps(dsl, indent=4)\nprint dsl_str\n\n# 将dsl json化后作为body参数，进行查询\nresp = requests.post(                            \n    'http://ip:port/bear/api/query',                                \n    data=ujson.dumps(dsl),                      \n    headers={'Content-Type': 'application/json'} \n)\n\n```\n\n#### d. 用户路径查询\n```python\nimport requests\nimport ujson\n\nfrom rangersdk.dsl import DSL, int_expr, string_expr, empty_expr, show\n\n\ndsl = (DSL.pathfind_builder()                                                \n       .app_id(0)                                                        \n       .range_period('day', 1563120000, 1563638400)                          \n       .page(10, 2)                                                          \n       .window('minute', 10)                                                 \n       .skip_cache(False)                                                    \n       .is_stack(False)                                                      \n       .and_profile_filter(string_expr('os_name', 'in', ['android', 'ios'])  \n                           .string_expr('network_type', 'in', ['wifi', '4g'])\n                           .show(1, u'android, ios; wifi, 4g'))              \n       .query(show('1', u'查询1')                                              \n              .sample(100)                                                  \n              .event('origin', 'app_launch')                                 \n              .and_filter(empty_expr().show('1', u'全体用户')),                  \n              show('2', u'查询2')                                              \n              .sample(100)                                                  \n              .event('origin', 'register')                                   \n              .and_filter(empty_expr().show('1', u'全体用户')),                  \n              show('3', u'查询3')                                              \n              .sample(100)                                                  \n              .event('origin', 'register')                                   \n              .and_filter(empty_expr().show('1', u'全体用户')))                  \n       .build())                                                             \n\ndsl_str = ujson.dumps(dsl, indent=4)\nprint dsl_str\n\n# 将dsl json化后作为body参数，进行查询\nresp = requests.post(                            \n    'http://ip:port/bear/api/query',                                \n    data=ujson.dumps(dsl),                      \n    headers={'Content-Type': 'application/json'} \n)\n\n```\n\n#### e. 留存查询\n```python\nimport requests\nimport ujson\n\nfrom rangersdk.dsl import DSL, int_expr, string_expr, empty_expr, show\n\n\ndsl = (DSL.retention_builder()                                                         \n       .app_id(0)                                                                  \n       .range_period('day', 1561910400, 1563033600)                                    \n       .page(10, 2)                                                                    \n       .group('network_type')                                                          \n       .window('day', 30)                                                              \n       .skip_cache(False)                                                              \n       .is_stack(False)                                                                \n       .tag({\"retention_from\": \"custom\", \"series_type\": 'table'})                      \n       .and_profile_filter(int_expr('user_is_new', '=', [0])                           \n                           .show(1, u'老用户'))                                           \n       .query(show('first', u'起始事件')                                                   \n              .event('origin', 'page_open', 'pv')                                      \n              .and_filter(string_expr('os_name', '=', ['windows', 'mac', 'ios'])       \n                          .string_expr('network_type', '!=', ['4g'])                   \n                          .show('os_name_label', u'os_name,network_type')),            \n              show('return', u'回访事件')                                                  \n              .event('origin', 'any_event')                                            \n              .and_filter(string_expr('os_name', '=', ['windows', 'mac'])              \n                          .string_expr('browser', '=', ['Chrome', 'Internet Explorer'])\n                          .show('1', u'全体用户'))                                         \n              )                                                                        \n       .build())                                                                       \n\ndsl_str = ujson.dumps(dsl, indent=4)\nprint dsl_str\n\n# 将dsl json化后作为body参数，进行查询\nresp = requests.post(                            \n    'http://ip:port/bear/api/query',                                \n    data=ujson.dumps(dsl),                      \n    headers={'Content-Type': 'application/json'} \n)\n\n```\n\n#### f. WEB SESSION查询\n```python\nimport requests\nimport ujson\n\nfrom rangersdk.dsl import DSL, int_expr, string_expr, empty_expr, show\n\n\ndsl = (DSL.web_builder()                                                         \n       .app_id(0)                                                            \n       .range_period('day', 1562774400, 1563292800)                              \n       .page(10, 2)                                                              \n       .group('browser')                                                         \n       .web('first', 1200)                                                       \n       .skip_cache(False)                                                        \n       .is_stack(False)                                                          \n       .tag({\"contains_today\": 0, \"series_type\": 'line'})                        \n       .and_profile_filter(string_expr('os_name', '=', ['windows', 'android'])   \n                           .show(1, u'操作系统'))                                    \n       .query(show('session_count', u'会话数')                                      \n              .sample(100)                                                      \n              .event('origin', 'predefine_pageview', 'session_count')            \n              .and_filter(empty_expr()                                           \n                          .show('1', u'source')),                                \n              show('average_session_duration', u'平均会话时长')                        \n              .event('origin', 'predefine_pageview', 'average_session_duration') \n              .and_filter(empty_expr()                                           \n                          .show('1', u'source')),                                \n              show('bounce_rate', u'跳出率')                                        \n              .event('origin', 'predefine_pageview', 'bounce_rate')              \n              .and_filter(empty_expr()                                           \n                          .show('1', u'source')),                                \n              show('average_session_depth', u'平均会话深度')                           \n              .event('origin', 'predefine_pageview', 'average_session_depth')    \n              .and_filter(empty_expr()                                           \n                          .show('1', u'source')))                                \n       .build())                                                                 \n\ndsl_str = ujson.dumps(dsl, indent=4)\nprint dsl_str\n\n# 将dsl json化后作为body参数，进行查询\nresp = requests.post(                            \n    'http://ip:port/bear/api/query',                                \n    data=ujson.dumps(dsl),                      \n    headers={'Content-Type': 'application/json'} \n)\n\n```\n\n#### g. topk查询\n```python\nimport requests\nimport ujson\n\nfrom rangersdk.dsl import DSL, int_expr, string_expr, empty_expr, show\n\n\ndsl = (DSL.topk_builder()                                                                   \n       .app_id(0)                                                                       \n       .range_period('day', 1563379200, 1563897600)                                         \n       .order('app_version')   # 排序，默认是asc升序, 也可以链式.order('app_version','asc')                                                               \n       .page(10, 2)                                                                         \n       .skip_cache(True)                                                                    \n       .tag({\"contains_today\": 0, \"show_yesterday\": 0, \"series_type\": 'line', \"show_map\": {}\n       .and_profile_filter(int_expr('ab_version', '=', [1])                                 \n                           .int_expr('user_is_new', '=', [0])                               \n                           .show('B', u'新用户'))                                              \n       .query(show('A', u'查询A')                                                             \n              .sample(100)                                                                 \n              .event('origin', 'predefine_pageview', 'pv')                                  \n              .measure_info('pct', 'event_index', 100)                                      \n              .and_filter(string_expr('referrer', '=',                                      \n                                      ['http://www.baidu.com', 'http://www.bytedance.com'], \n                                      'event_param')                                        \n                          .show('referer_label', u'referer')))                              \n       .build())                                                                            \n                                                                                            \ndsl_str = ujson.dumps(dsl, indent=4)                                                     \nprint dsl_str\n\n# 将dsl json化后作为body参数，进行查询\nresp = requests.post(                            \n    'http://ip:port/bear/api/query',                                \n    data=ujson.dumps(dsl),                      \n    headers={'Content-Type': 'application/json'} \n)\n                                                                           \n```\n\n## 二、dsl client使用说明\n### 1. 安装\n```shell\npython setup.py install\n```\n\n### 2. 导入\n```python\nfrom rangersdk.dsl import DSL, int_expr, string_expr, empty_expr, show\nfrom rangersdk.client import RangersClient\n```\n\n### 3.使用方式\n可以参考test_client.py\n\n* 初始化 RangersClient\n```python\nak = 'xxx' # ak\nsk = 'xxx' # sk\nbc = RangersClient(ak, sk)\n```\n\n* 调用服务\n```python\nbc.analysis_base('post', '/bear/api/query', body=ujson.dumps(data))\nbc.analysis_base('get', '/bear/api/msg', params={'code': 'welcome'})\n\n```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvolcengine%2Fdatafinder-sdk-openapi-py","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvolcengine%2Fdatafinder-sdk-openapi-py","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvolcengine%2Fdatafinder-sdk-openapi-py/lists"}