轶哥

📚 Having fun with AI Agent. Always learning.

    Redash导出仪表盘中所有数据为Excel文件
    •   更新:2021-03-10 18:38:50
    •   首发:2021-03-10 18:38:50
    •   教程
    •   4519

    在《Redash刷新整个仪表盘API》一文中,提到了导出仪表盘中所有的Widget数据为Excel文件的需求。

    实现该需求只需要调用官方的API,但是官方API文档对于使用的描述基本没有。

    第一步:获取仪表盘数据,得到QueryID

    通过请求

    GET /api/dashboards/<dashboard_slug>?api_key=<API_KEY>
    

    获取仪表盘数据。

    redisdashboard.png

    得到类似上图这样的数据。里面具有Widget所有信息。

    第二步:通过 QueryIDs 启动查询

    遍历widgets,拿到所有需要的item.visualization.query.id,然后挨个请求:

    POST /api/queries/<item.visualization.query.id>/results?api_key=<API_KEY>
    
    {
      id: <item.visualization.query.id>,
      parameters: {
        created_at: {
          start: <start> + ' 00:00:00',
          end: <end> + ' 23:59:59'
        }
      }
    }
    

    这个请求的含义是“启动新的查询执行或返回缓存的结果”,此API将默认返回缓存的结果。如果没有缓存的结果,则新的执行作业开始,并返回作业对象。要绕过陈旧的缓存,请包含一个名为max_age值为整数秒的参数。如果缓存的结果早于max_age,则缓存将被忽略,并开始新的执行。如果设置max_age0则始终开启新的执行,返回最新的执行结果。

    这是一个异步设计的请求,需要对请求结果进行判断。如果返回的结果中含有job字段,说明启动了一个新的作业,否则将返回包含query_result的数据。

    查询作业结果:

    /api/jobs/<job_id>

    • GET:返回查询任务结果(作业)
      • 可能的状态:
        • 1 ==待处理(等待执行)
        • 2 ==已开始(正在执行)
        • 3 ==成功
        • 4 ==失败
        • 5 ==已取消
      • 状态为成功时,结果包括 query_result_id

    也可以不查询结果,不传入max_age: 0的情况下,重复调用接口,则作业完成后必然包含query_result数据。

    第三步:拼接文件下载地址

    拿到query_result后,拼接如下地址:

    https://example.com/api/queries/<item.visualization.query.id>/results/<query_result.id>.xlsx?api_key=<API_KEY>
    

    excel.png此时将可以下载被自动命名的.xlsxExcel文件(跟后台手工下载的一样)。

    修改拼接URL的文件名后缀,可以实现TSVCSVJSON文件的下载。

    其它

    整个过程涉及遍历接口、处理异步设计的接口、根据策略重新调用接口、多文件下载,对刚入门的同学来说是个不错的练手实例。

    打赏
    交流区

    暂无内容

    尚未登陆
    发布
      上一篇 (【视频教程】Electron自动编译及自动更新、分发)
    下一篇 (Redash刷新整个仪表盘API)  

    评论回复提醒