Java对接飞书开放平台-查询多维表格数据案例

这篇博客展示了如何使用Java通过OkHttp和HttpClient库来调用飞书开放平台的API,获取多维表格的列数据。首先在pom.xml文件中引入必要的依赖,接着定义了doPost方法用于发送POST请求获取授权token,然后定义了get方法进行GET请求查询多维表格数据。最后,QueryTableData类解析并处理查询结果,将数据存储到Map中,确保唯一性。
摘要由CSDN通过智能技术生成

Java对接飞书开放平台

查询多维表格所有列数据

pom.xml
有问题的可以关注发消息问问题.

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.1.23</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp</groupId>
            <artifactId>okhttp</artifactId>
            <version>2.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.1.0</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents.core5</groupId>
            <artifactId>httpcore5</artifactId>
            <version>5.2</version>
        </dependency>
    </dependencies>
public class DoPost {

    /**
     * 发送post请求的
     * @param url
     * @param param
     * @return
     * 获取多维表格操作权限的token
     */
    public static String doPost(String url,String param,String token){
        //创建httpClients对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String result = "";
        try {
            HttpPost httpPost = new HttpPost(url);
            if (token != null && !"".equals(token))
                httpPost.addHeader("Authorization","Bearer "+token);
            httpPost.addHeader("Content-Type","application/json");
            StringEntity entity = new StringEntity(param);
            httpPost.setEntity(entity);
            response = httpClient.execute(httpPost);
            result = EntityUtils.toString(response.getEntity(),"utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if (response != null){
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (httpClient!=null){
                try {
                    httpClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }
	//查询多维表格数据GET请求
	public static String get(String token ){
        OkHttpClient client = new OkHttpClient();
        String dataLine = "";
        MediaType mediaType = MediaType.parse("");
        Request request = new Request.Builder()
        //https://open.feishu.cn/open-apis/bitable/v1/apps/:appid(填写创建多维表格的appid)/tables/:table_id(多维表格的table_id)/records?page_size=1000&sort=%5B%22%E7%99%BB%E8%AE%B0%E6%97%A5%E6%9C%9F+DESC%22%5D
        //此接口查询的是按照登记日期降序排序,查询前面的1000条数据
        //这里解释一下,因为这个接口是GET请求,这些参数有一个转码的操作
                .url(PostDataEnum.POST_TO_QUERY_FEISHU_LIST_URL2.getValue())
                .method("GET", null)
                .addHeader("Authorization", "Bearer "+token)
                .build();
        try {
            Response response = client.newCall(request).execute();
            dataLine = response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return dataLine;
    }
}
/*
*	此方法调用GET请求拿到多维表格数据,将多维表格中的数据解析出快递编号跟订单编号
*	将订单编号跟快递编号封装到Map中,保证唯一不重复
*/
 public class QueryTableData {
	 public static Map<String,String> queryTable(){
        //获取飞书token
        String url1 = PostDataEnum.POST_TO_EARN_TOKEN_URL.getValue();
        String param1 = PostDataEnum.POST_TO_EARN_TOKEN_PARAM.getValue();
        String line = DoPost.doPost(url1, param1,"");
        Object tenant_access_token = JSONObject.parseObject(line).getOrDefault("tenant_access_token", "");

//        String dataLine = DoPost.httpGet(PostDataEnum.POST_TO_QUERY_FEISHU_LIST_URL.getValue() , "" , tenant_access_token.toString());
//        System.out.println(dataLine);
//
//        JSONObject jsonObject = JSONObject.parseObject(dataLine);
//        Object data = jsonObject.getOrDefault("data", "0");

        String dataLine = DoPost.get(tenant_access_token.toString());
        JSONObject jsonObject = JSONObject.parseObject(dataLine);
        String dataString = jsonObject.getOrDefault("data", "null").toString();
        if (dataString.equals("null"))
            return null;
        JSONObject dataObject = JSONObject.parseObject(dataString);
        String items = dataObject.getOrDefault("items", "[]").toString();
        JSONArray array = JSONArray.parseArray(items);
        Map<String , Integer> courierMap = new HashMap<>();
        Map<String , Integer> orderNoMap = new HashMap<>();
        Map<String , String> exceptionMap = new HashMap<>();
        for (int i = 0; i < array.size(); i++) {
            JSONObject object = JSONObject.parseObject(array.getString(i));
            JSONObject fieldsObject = JSONObject.parseObject(object.getOrDefault("fields", "").toString());
            String courier_number = fieldsObject.getOrDefault("快递单号", "null").toString();
            String orderno = fieldsObject.getOrDefault("订单编号", "null").toString();
            if (!courierMap.containsKey(courier_number)){
                courierMap.put(courier_number , 1);
            }else {
                exceptionMap.put(courier_number , orderno);
            }

            if (!orderNoMap.containsKey(orderno)){
                orderNoMap.put(orderno , 1);
            }else{
                exceptionMap.put(courier_number , orderno);
            }
        }
        return exceptionMap;
    }
}

在main函数中调用此方法即可

public static void main(String[] args) {
	Map<String, String> exceptionMap = QueryTableData.queryTable();
	}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值