package reptile.apidoc; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import entity.RequestParam; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import parse.BmobHttpUtils; import reptile.swagger.SwaggerDocGenerator; import utils.JsonUtils; import entity.Json2JavaElement; import entity.RequestInfo; public class Main { static String host = "http://192.168.0.117:9002"; public static void main(String[] args) { String catename = "用户模块"; int cateid = 10; // String catename = "帖子模块"; // int cateid = 15; // String catename = "礼物模块"; // int cateid = 17; // String catename = "系统模块"; // int cateid = 18; // String catename = "发现模块"; // int cateid = 20; // String catename = "H5页面地址"; // int cateid = 21; String typeUrl = host + "/interface/interlist?cateid="+cateid+"&catename="+catename+"&projectName=玩趣商城"; ArrayList<RequestInfo> infos = parseApi(typeUrl); SwaggerDocGenerator.genCode(infos); } private static ArrayList<RequestInfo> parseApi(String typeUrl) { ArrayList<RequestInfo> requestInfos = new ArrayList<RequestInfo>(); try { String response = BmobHttpUtils.getString(typeUrl); Document parse = Jsoup.parse(response); Elements refentryElements = parse.getElementsByClass("refentry"); for(Element element : refentryElements) { Elements hrefElement = element.getElementsByAttribute("href"); if(hrefElement.size() > 0) { Element e = hrefElement.get(0); String link = e.attr("href"); RequestInfo info = getApiInfo(link); requestInfos.add(info); } } } catch (Exception e) { e.printStackTrace(); } return requestInfos; } private static RequestInfo getApiInfo(String link) throws Exception { RequestInfo requestInfo = new RequestInfo(); String typeUrl = host + link; String response = BmobHttpUtils.getString(typeUrl); Document parse = Jsoup.parse(response); Elements refnamedivEs = parse.getElementsByClass("refname"); String refnamediv = refnamedivEs.get(0).text().trim(); requestInfo.setUrl(refnamediv); Elements titleEs = parse.getElementsByClass("dc-title"); String title = titleEs.get(0).text().trim(); requestInfo.setName(title); Elements desEs = parse.getElementsByAttributeValueContaining("class", "rdfs-comment"); String description = desEs.get(0).text().trim(); requestInfo.setDes(description); requestInfo.setMethod("post"); Elements paramElements = parse.getElementsByAttributeValueContaining("class", "parameters"); // request param ArrayList<RequestParam> params = new ArrayList<>(); if(paramElements.size() > 0) { Elements name_type = paramElements.get(0).getElementsByTag("dt"); Elements des = paramElements.get(0).getElementsByTag("dd"); for(int i=0; i<name_type.size(); i++) { // cate - int Element element = name_type.get(i); String name = element.text().split("-")[0].trim(); String type = element.text().split("-")[1].trim(); type = getType(name, type); String desStr = des.get(i).text().trim(); params.add(new RequestParam(name, type, desStr, new ArrayList<String>())); } } // return value param Elements returnvaluesEs = parse.getElementsByAttributeValueContaining("class", "returnvalues"); if(returnvaluesEs.size() > 0) { Elements exmEs = returnvaluesEs.get(0).getElementsByClass("exm"); String exm = exmEs.get(0).text().trim(); List<Json2JavaElement> jsonBeanTree = JsonUtils.getJsonBeanTree(exm); ArrayList<NameTypeDes> nameTypeDes = new ArrayList<NameTypeDes>(); Elements name_type = returnvaluesEs.get(0).getElementsByTag("dt"); Elements des = returnvaluesEs.get(0).getElementsByTag("dd"); for(int i=0; i<name_type.size(); i++) { // cate - int Element element = name_type.get(i); String name = element.text().split("-")[0].trim(); String type = element.text().split("-")[1].trim(); if(name.equals("list")) { // 集合数据 Element listParamE = des.get(i); Elements list_name_type = listParamE.getElementsByTag("dt"); Elements list_des = listParamE.getElementsByTag("dd"); for(int j=0; j<list_name_type.size(); j++) { // cate - int Element listE = list_name_type.get(j); String listname = listE.text().split("-")[0].trim(); String listtype = listE.text().split("-")[1].trim(); String desStr = list_des.get(i).text().trim(); nameTypeDes.add(new NameTypeDes(listname, listtype, desStr)); } String desStr = des.get(i).text().trim(); nameTypeDes.add(new NameTypeDes(name, null, desStr)); } else { type = getType(name, type); String desStr = des.get(i).text().trim(); nameTypeDes.add(new NameTypeDes(name, type, desStr)); } } // 遍历jsonbean集合,加上注释和类型 for(Json2JavaElement jje : jsonBeanTree) { Iterator<NameTypeDes> iterator = nameTypeDes.iterator(); while(iterator.hasNext()) { NameTypeDes next = iterator.next(); if(jje.getName().equals(next.getName())) { String type = next.getType(); if(type != null && type.equals("int")) { jje.setType(int.class); } else if(type != null && type.equals("long")) { jje.setType(long.class); } jje.setDes(next.getDes()); iterator.remove(); } } } String bean = JsonUtils.createJavaBean(jsonBeanTree); requestInfo.setResponseJson(bean); } requestInfo.setParams(params); return requestInfo; } private static String getType(String name, String type) { if(name.contains("id") && type.equals("int")) { // id使用long类型数字 type = "long"; } else if(type.equals("string")) { type = "String"; } else if(type.equals("date")) { // 日期使用字符串类型 type = "String"; } else if(name.equals("status")) { // 状态类型int type = "int"; } return type; } static class NameTypeDes { private String name; private String type; private String des; public NameTypeDes(String name, String type, String des) { this.name = name; this.type = type; this.des = des; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getDes() { return des; } public void setDes(String des) { this.des = des; } @Override public String toString() { return "NameTypeDes [name=" + name + ", type=" + type + ", des=" + des + "]"; } } }