反馈已提交

网络繁忙

API采集数据专题

  • 文档创建者:Roxy
  • 历史版本:40
  • 最近更新:Wendy123456 于 2024-10-24
  • 1. 概述

    在现实的业务中,有很多数据需要通过 API 接口调用使用。

    因此本文为用户介绍在 FineDataLink 中使用 API 取数并进行数据解析处理,最终将数据写入指定数据库的方案。

    注:若需要使用 FineDataLink 发布API ,或者将数据推送到 API 接口,详情参见:API专题

    2. 索引

    序号应用场景方案说明参考文档
    1API 入门如何查看 API 文档、如何在 FineDataLink 中使用 APIAPI入门
    2直接从 API 接口取数,且返回数据是简单的 JSON 格式直接使用数据同步-API 取数并同步至数据库即可数据同步-API
    3直接从 API 接口取数,且返回数据为 JSON 格式
    • 使用「API输入」算子取数,然后通过 JSON解析 将 JSON 数据解析成常用的数据格式,并同步至数据

    • JSON 数据二维化解析说明

    JSONPath表达式

    JSON解析算子功能说明

    4直接从 API 接口取数,且返回数据为 XML 格式使用数据转换中的 API 取数并通过 XML 解析 将 XML 数据解析成行列数据格式,并同步至数据库XML 解析
    5可读取 API 数据,并输出为参数

    参数赋值节点

    6将 Webservice 接口数据取出并进行后续的数据处理 

    webservice调用介绍

    API输入-Webservice
    7

    API调用并存入数据库实战

    接口取数

    企微自建应用中使用 读取成员 接口,获取部门所有人员信息

    1. 获取access_token

    2. 获取所有部门ID并设置为参数

    3. 遍历部门ID,获取userid,将userid落库

    4. userid作为参数输出

    5. 遍历userid,获取人员信息

    API取数-获取企业微信人员信息

    接口取数

    1、参数赋值+循环容器

    使用高德接口获取城市天气数据

    将经纬度数据转换为中文地址

    2、按日期分表,每天保存当天数据:每天数据过大,希望能每天创建一个新的数据表,保存该天数据

    3、API取数-钉钉获取部门列表接口只能获取当前部门的下一级部门基础信息,不支持获取当前部门下所有层级子部门。因此需要依次根据父部门ID循环获取子部门ID

    4、API取数-使用通讯录同步获取企业微信userid和部门:使用的接口:获取成员ID列表

    5、PI数据库API循环取数讲述如何从 PI 数据库取数

    参数进行分组后再从接口循环取数

    接口限制一次取数不能超过100,但实际场景中是超过100的

    以获取企微月报打卡数据为例:

    1. 获取成员ID接口需要的access_token,输出为参数

    2. 获取企业微信成员 userid 和 department

    3. 将 userid 分组并输出为参数

    4. 准备接口所需的参数,根据成员分组批量循环取数

    参数进行分组后再从接口循环取数
    8

    加密API取数实战

    接口取数+MD5加密

    使用MD5加密获取签名sign,从 API 接口取数

    参数使用MD5加密后从API取数

    接口取数、接口参数做的操作:

    • 为请求正文 Hash 摘要后再 base-16 编码的结果、

    • 使用签名认证

    • 使用 SparkSQL HMACSHA256函数

    使用FDL接口形式实现阿里云服务器数据监听
    9

    分页取数API实战

    分页取数:按页数取数,其中接口中存在参数:

    • pageIndex数据页数

    • pageSize:每一页的数据条数

    4.1.3 及之后版本:

    1. 将 pageSize 设置为 100,获取总页数,输出参数totalpages

    2. 使用数据同步节点,从第一页开始取数,页码大于 totalpages 时,终止取数

    4.1.3 之前版本:

    1. 将 pageSize 设置为 100,获取总页数,输出参数totalpages

    2. 使用循环容器和内置参数 loopTimes从第一页开始取数,当循环次数 loopTimes>total_pages 时,停止执行

    API取数-按页数取数

    分页取数,接口返回值中没有总页数 total_pages,需要手动计算

    请求参数:

    • pageNum:分页参数,数值可自定义

    • pageSize:每页数据条数,数值可自定义

    返回值参数:

    • totalNum:返回取出数据的总数据条数

    • pageSize:返回取出数据的每页数据条数


    4.1.3 及之后版本
    1. 将 pageSize 设置为 10,pageNum 为1,从第一页开始取数,取10条数据

    2. 根据返回值中的totalNum、pageSize,获取总页数  total_pages

    3. 使用数据同步节点,第一页开始递增 ${pageNum}页数参数,从接口取数当页数参数 ${pageNum} 递增到大于总页数参数,则${total_pages},则分页结束

    4.1.3 之前版本
    1. 将 pageSize 设置为 10,pageNum 为1,从第一页开始取数,取10条数据

    2. 根据返回值中的totalNum、pageSize,获取总页数  total_pages

    3. 拖入循环容器节点,循环容器节点中拖入数据同步节点;pageSize:10、pageNum 使用内置参数${loopTimes}(初次为 1),也就是按照每页 10 条数据,从第一页开始递增从接口取数

    循环执行条件为: loopTimes<=${total_pages}

    分页取数-计算总页数并按页取数

    分页取数,接口中没有页数相关的参数,但有:

    • limit:查询的数据条数,1-100,默认为10

    • data_id:上一次查询数据结果的最后一条数据的ID

    1. 为了从数据库中可以获得最大 id 作为参数,先随机取出 10 条数据落库

    2. 获取数据表中最大的 id 值作为参数

    3. 使用 id 值,每次从接口中取 100 条数据

    4. 找到每次执行的最后一行 id 值,输出为参数,若值为空,停止循环

    循环执行 2-4 步骤

    分页取数-限制取数量且无页数参数

    分页取数:按偏移量取数,接口参数如下:

    • FilterString:参数中使用日期区间作为参数,获取一段时间(开始时间和结束时间)作为日期参数,取出该段时间内的数据

    • StartRow:开始行索引

    • Limit每次取数的限制条数

    金蝶云星空销售报价单接口为例:

    4.1.3 及之后版本
    1. 获取开始时间和结束时间并输出为参数

    2. 使用数据同步节点,使用接口请求参数偏移量 StartRow 和每次的限制条数 Limit ,为 StartRow 赋值参数 ${offset},以 0 为初始值,增长间隔也就是 Limit 设置为 30,进行取数,也就是下一次循环则 offset 参数变为 30,如果最后一次取数返回的数据条数小于 Limit 限制 30,则此次数据就已经被取完,停止循环

    4.1.3 之前版本
    1. 获取开始时间和结束时间并输出为参数

    2. 设置 limit 为 30(值可自定义),并输出为参数

    3. 为了保证本次取数的纯净,删除目标数据表中本次取数的日期参数区间内的数据

    4. 计算指定日期区间中目标数据表数据除以 limit 参数的余数,将余数输出为参数,若为0,则表示目标表数据能被整除,表示还有未读取的接口数据,因此需要继续写入数据;若余数不为 0,则表示已经取出了指定日期中的所有接口数据,需要停止取数

    5. 若需要继续写入数据,获取每次循环开始行数,即获取每次循环请求参数 StartRow 的开始位置

    6. 使用开始时间 STARDATE 、结束时间 ENDDATE、Limit、startrow 从接口取数

    循环执行 4-6 步骤

    分页取数-按偏移量取数

    使用偏移量从XML接口取数


    分页取数:按偏移量取数,接口参数如下:

    • StartRow:开始行索引

    • Limit:每次取数的限制条数

    返回参数:

    Result.RowCount返回所取数据的总行数

    4.1.3 及之后版本,可参考:分页取数-按偏移量取数 实现

    4.1.3 之前版本,可参考:API取数-以起始行数作为参数 方案实现

    使用分页参数进行分页取数:

    Body 参数中有分页参数 scrollid:

    接口文档详情参见:根据时间窗滚动查询变动的员工与单条任职信息

    1712023912148136.png

    API取数-北森接口获取员工任职信息

    分页取数+游标

    Body 参数:

    • cursor:分页查询的游标,最开始传0,后续传返回参数中的next_cursor值

    返回参数:

    • has_more:是否还有更多数据,true 为有,false 为没有

    • next_cursor:下一次分页的游标(如果has_more为false,表示没有更多的分页数据)

    分页取数-分页方式为游标

    分页取数+加密

    分页取数,调用接口时需要携带签名参数 sign,只有当 sign 值合法时请求才会被接受

    1. 使用 SHA2 加密签名 sign,并输出为参数

    2. 将每页数据限制为100条,获取总页数,输出参数totalpages(该过程使用到了加密sign

    3. 使用循环容器和内置参数 loopTimes从第一页开始取数,当循环次数 loopTimes>total_pages 时,停止执行(该过程使用到了加密sign

    API取数-SHA2加密身份验证&按页数取数

    嵌套循环取数

    循环容器根据参数A循环取数

    循环容器内,分页取数

    以 慧策-WMS库存全量查询接口 取数为例:

    4.1.3 及之后版本
    1. 仓库编码输出为参数

    2. 循环容器遍历仓库编码参数,循环容器中拖入数据同步节点,分页取数

    4.1.3 之前版本

    有些复杂,详情请参考文档:方案二

    嵌套循环取数
    10使用接口进行条件判断定时任务仅在工作日运行仅在工作日执行定时任务
    11用户想使用「参数赋值」+「循环容器」节点,分段取出 API 接口中的数据,并将数据解析;但当某个参数从 API 接口中取的数据,经解析后,为空时(没有任何内容),将终止循环,可参考右侧文档解决这个问题取出数据为空导致循环终止解决方案
    12

    如何调用 FineDataLink 定时任务接口

    按需触发\执行定时任务,以提高数据时效性调用定时任务相关接口说明

    3. 拓展阅读

    1)如果需加工、融合后的数据封装并发布为规范化 API 接口数据,供外部系统调用,实现数据价值输出及共享开放。详情参见:数据服务概述

    最佳实践请参考:使用数据服务对数据进行分发管控

    2)如果需要将多应用系统的数据通过 FDL 打通,实现业务系统间的数据交互(交互的形式为API)。比如系统中数据取出并分析后,希望直接把分析结果数据推送到业务系统中(以 API 的形式),形成业务系统里面需要直接处理的业务数据,打通分析到业务的流程。详情参见:API输出逻辑说明

    最佳实践请参考:活动日程信息更新至企业微信日程新增/修改宜搭表单数据



    附件列表


    主题: 数据开发-定时任务
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭



    AI

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持