0
点赞
收藏
分享

微信扫一扫

禅道api调用(爬虫方式)

Java旺 2022-12-26 阅读 183


目录

​​获取所有进行中的项目信息​​

​​url​​

​​postman​​

​​Java代码​​

​​实体类​​

​​逻辑处理​​

​​根据项目id获取指定项目下所有未关闭的任务id​​

​​url​​

​​postman​​

​​Java代码​​

​​总结​​

获取所有进行中的项目信息

url

​​http://禅道地址xxx/zentao/project-all-doing-项目ID-order_desc-0.html​​

postman

禅道api调用(爬虫方式)_List

Java代码

关于禅道登录的业务实现大家可以参考这篇博客

实体类

package com.example.zentaoaibackend.entity;

import lombok.Data;
import java.util.Date;
import java.io.Serializable;

public class ProjectInfoEntity extends BaseAttribute {
/**
* 项目ID
*/
private Integer projectId;

/**
* 项目名称
*/
private String name;
/**
* 项目代号
*/
private String code;
/**
* 项目负责人
*/
private String director;
/**
* 项目截止日期
*/
private Date endtime;
/**
* 是否参与消息推送
*/
private int joinStatus;
/**
* 钉钉群id
*/
private String dingGroupId;
/**
* 钉钉群名称
*/
private String dingGroupName;


public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public String getDirector() {
return director;
}

public void setDirector(String director) {
this.director = director;
}

public Date getEndtime() {
return endtime;
}

public void setEndtime(Date endtime) {
this.endtime = endtime;
}

public int getJoinStatus() {
return joinStatus;
}

public void setJoinStatus(int joinStatus) {
this.joinStatus = joinStatus;
}

public String getDingGroupId() {
return dingGroupId;
}

public void setDingGroupId(String dingGroupId) {
this.dingGroupId = dingGroupId;
}

public String getDingGroupName() {
return dingGroupName;
}

public void setDingGroupName(String dingGroupName) {
this.dingGroupName = dingGroupName;
}

public void setProjectId(Integer projectId) {
this.projectId = projectId;
}

public Integer getProjectId() {
return projectId;
}

}

逻辑处理

通过爬取返回的html页面格式如下图,我们根据给出的结构进行解析

禅道api调用(爬虫方式)_List

import com.example.zentaoaibackend.entity.ProjectInfoEntity;
import lombok.extern.slf4j.Slf4j;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;


public List<ProjectInfoEntity> GetDoingProjectInfo() {
List<ProjectInfoEntity> doingProjectList = new ArrayList<>();
try {
//登录禅道
zentaoLogin();

//url地址
String url = "http://127.0.0.1/zentao/project-all-doing-422-order_desc-0.html";
//执行url,并传入cookie
Document doc = Jsoup.connect(url).cookie("zentaosid", Constant.ZENTAOID).get();
//解析html页面,获取tr标签
Elements tfElements = doc.select("table").select("tbody").select("tr");

//遍历tr标签,根据任务状态获取对应的任务id,并放入到集合中
for (Element element : tfElements) {
//获取td标签
Elements tdElements = element.select("td");
//用于解析后的数据信息存储
ProjectInfoEntity projectInfo = new ProjectInfoEntity();

//遍历td标签
for (Element tdElement : tdElements) {
//判断当前遍历的标签中class元素是否包含text-left
//包含:获取项目id
//不包含:继续下一次遍历
if (tdElement.attr("class").equals("text-left")) {
//获取项目ID
String attr = element.attr("data-id");
//将项目ID传入到实体中
projectInfo.setProjectId(Integer.valueOf(attr));

//因为返回的有多个td标签中都包含了class='text-left'的元素,我们不能直接获取项目信息,需要进行判断
//包含title元素:为项目代码;否则:为项目名称
if (tdElement.attr("title").equals("")) {
//项目代号
projectInfo.setCode(tdElement.text());
} else {
//项目名称
projectInfo.setName(tdElement.attr("title"));
}
}
}
doingProjectList.add(projectInfo);
}
} catch (Exception e) {
System.out.println(e);
}
return doingProjectList;
}

根据项目id获取指定项目下所有未关闭的任务id

url

​​http://禅道地址xxx/zentao/project-task-439-unclosed.html​​

postman

禅道api调用(爬虫方式)_sed_03

Java代码

package com.example.zentaoaibackend.utils.zentaoAPI;

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import static com.example.zentaoaibackend.utils.zentaoAPI.DoGet.doGet;
import static com.example.zentaoaibackend.utils.zentaoAPI.login.ZentaoLogin.zentaoLogin;


/**
* @BelongsProject: zentaoai-backend
* @BelongsPackage: com.example.zentaoaibackend.utils.zentaoAPI
* @Author: author
* @CreateTime: 2022-11-26 11:14
* @Description: 根据项目id获取指定项目下所有任务
* @Version: 1.0
*/
@Component
public class GetProjectTask extends IJobHandler {
public List<String> GetTaskByProjectId(String projectId) throws IOException {
List<String> unClosedList = new ArrayList<>();
try {
zentaoLogin();
//url地址
String url = "http://127.0.0.1/zentao/project-task-" + projectId + "-unclosed.html";
//执行接口调用,并传入cookie
Document doc = Jsoup.connect(url).cookie("zentaosid", Constant.ZENTAOID).get();
//解析html页面,获取tr标签
Elements select = doc.select("table").select("tbody").select("tr");
//遍历tr标签,根据任务状态获取对应的任务id,并放入到集合中
for (Element element : select) {
unClosedList.add(element.attr("data-id"));
}

} catch (Exception e) {
System.out.println(e);
}
return unClosedList;
}

@Override
public ReturnT<String> execute(String s) throws Exception {
return null;
}
}

总结

注意:个别信息比较私密模糊展示不便于公开,请见谅!!

如果有想要交流的内容欢迎在评论区进行留言,如果这篇文档受到了您的喜欢那就留下你点赞、收藏脚印支持一下博主哦~

举报

相关推荐

0 条评论