OpenAPI调用

介绍AI Doc在调用OpenAPI时候,查找相关字段以及调用OpenAPI的步骤。

步骤一:准备

在AI Doc的OpenAPI调用过程中,可能涉及以下字段需要填写。具体查找步骤如下。如果您已知模板ID和文件夹ID可以跳过相应章节。

获取模板ID

登录AI Doc官网,进入模板管理页面,可以看到模板ID字段。

image

获取文档夹ID

登录AI Doc官网,进入文档解析页面,选择需要查看的文件夹,右侧可以看到对应的文件夹ID。

image

步骤二:创建用于OpenAPI访问的AK和SK

您可以选择使用主账号或者子账号下的AK和SK进行OpenAPI操作,这里以子账号的AK、SK为例。

登录阿里云的控制台,进行创建用户并勾选OpenAPI调用访问。

image

为该用户授予AliyunEnergyFullAccess权限。image

复制AccessKey ID和AccessKey Secret,以备后续代码调用时候使用。

重要

开通 OpenAPI 调用访问后,请及时保存 AccessKey 信息,页面关闭后将无法再次获取信息。

image

步骤三:使用SDK调用OpenAPI

您可以点击链接前往阿里云OpenAPI门户,搜索“AI文档处理”或者其他OpenAPI,查看相关OpenAPI的调用要求,进行在线调用调试或者下载SDK示例进行本地调试。您也可以前往OpenAPI文档中AI文档处理寻找对应的接口文档进行调试。

AI Doc解析文档主要分为两步:

  • 第一步:提交文档解析作业。

  • 第二步:根据第一步返回的jobId获取文档解析结果。

本文以Java代码为例,进行实际操作。

引入pom

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>energyexpertexternal20220923</artifactId>
      <version>2.1.1</version>
    </dependency>

提交文档解析作业调用示例

在环境变量中配置ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET作为鉴权依据;然后再修改代码或者在环境变量中配置FILE_URL、TEMPLATE_ID、FOLDER_ID,其中文件地址需要是公网可达,TEMPLATE_ID模板ID参见获取模板ID、FOLDER_ID文件夹ID参见获取文档夹ID。参考SubmitDocumentAnalyzeJob - 提交文档解析作业,Java调用代码如下。

package com.aliyun.sample;

import com.aliyun.energyexpertexternal20220923.Client;
import com.aliyun.energyexpertexternal20220923.models.SubmitDocumentAnalyzeJobRequest;
import com.aliyun.energyexpertexternal20220923.models.SubmitDocumentAnalyzeJobResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;

public class SampleStep1 {

    /**
     * <b>description</b> :
     * <p>使用AK&amp;SK初始化账号Client</p>
     *
     * @return Client
     * @throws Exception
     */
    public static Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
        Config config = new Config()
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。也就是上文中的AccessKey ID (AK)
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。也就是上文中的AccessKey Secret(SK)
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint 请参考 https://api.aliyun.com/product/energyExpertExternal
        config.endpoint = "energyexpertexternal.cn-hangzhou.aliyuncs.com";
        return new Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        Client client = SampleStep1.createClient();
        SubmitDocumentAnalyzeJobRequest submitDocumentAnalyzeJobRequest = new SubmitDocumentAnalyzeJobRequest();
        fillNecessaryFieldForRequest(submitDocumentAnalyzeJobRequest);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        java.util.Map<String, String> headers = new java.util.HashMap<>();
        try {
            SubmitDocumentAnalyzeJobResponse resp =
                    client.submitDocumentAnalyzeJobWithOptions(submitDocumentAnalyzeJobRequest, headers, runtime);
            com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(resp));
            System.out.println("提交文档解析作业成功,jobId=" + resp.body.data.getJobId());
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }
    }

    private static void fillNecessaryFieldForRequest(SubmitDocumentAnalyzeJobRequest submitDocumentAnalyzeJobRequest) {
        String fileUrl = System.getenv("FILE_URL");
        //请根据具体情况填写您的文件名称
        String fileName = "阿里巴巴集团发布《2023环境、社会和治理(ESG)报告 》.pdf";
        //模板ID的获取方法参见本文"获取模板ID"
        String templateId = System.getenv("TEMPLATE_ID");
        //文件夹ID的获取参见本文"获取文件夹ID"
        String folderId = System.getenv("FOLDER_ID");
        submitDocumentAnalyzeJobRequest.setFileUrl(fileUrl);
        submitDocumentAnalyzeJobRequest.setFileName(fileName);
        submitDocumentAnalyzeJobRequest.setTemplateId(templateId);
    }
}

获取文档解析结果调用示例

在环境变量中配置ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET作为鉴权依据;然后再修改代码或者在环境变量中配置JOB_ID,JOB_ID在上一步中的返回结果中获取。参考GetDocumentAnalyzeResult - 获取文档解析结果,Java调用代码如下。

package com.aliyun.sample;

import com.aliyun.energyexpertexternal20220923.models.GetDocumentAnalyzeResultRequest;
import com.aliyun.energyexpertexternal20220923.models.GetDocumentAnalyzeResultResponse;
import com.aliyun.tea.*;

public class SampleStep2 {

    /**
     * <b>description</b> :
     * <p>使用AK&amp;SK初始化账号Client</p>
     * @return Client
     *
     * @throws Exception
     */
    public static com.aliyun.energyexpertexternal20220923.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint 请参考 https://api.aliyun.com/product/energyExpertExternal
        config.endpoint = "energyexpertexternal.cn-hangzhou.aliyuncs.com";
        return new com.aliyun.energyexpertexternal20220923.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.energyexpertexternal20220923.Client client = SampleStep1.createClient();
        com.aliyun.energyexpertexternal20220923.models.GetDocumentAnalyzeResultRequest getDocumentAnalyzeResultRequest = new com.aliyun.energyexpertexternal20220923.models.GetDocumentAnalyzeResultRequest();
        fillNecessaryFieldForGetResultRequest(getDocumentAnalyzeResultRequest);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        java.util.Map<String, String> headers = new java.util.HashMap<>();
        try {
            System.out.println("start request");
            // 复制代码运行请自行打印 API 的返回值
            GetDocumentAnalyzeResultResponse resultResp = client.getDocumentAnalyzeResultWithOptions(getDocumentAnalyzeResultRequest, headers, runtime);
            com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(resultResp));
            System.out.println("success:data 为空表示未完成解析");
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }
    }

    private static void fillNecessaryFieldForGetResultRequest(GetDocumentAnalyzeResultRequest getDocumentAnalyzeResultRequest) {
        String jobId = System.getenv("JOB_ID");
        getDocumentAnalyzeResultRequest.setJobId(jobId);
    }
}