当前位置: 首页 > news >正文

球迷类的网站如何做seo实战培训

球迷类的网站如何做,seo实战培训,网站域名骗子,免费学做网站1.说明 统计公司所有项目的提交情况,可指定分支和时间段,返回每个人的提交新增数、删除数和总数。 2.API 文档地址:http://公司gitlab域名/help/api/README.md 项目列表查询 返回示例: [{"id": 1, //项目ID"http…
1.说明

统计公司所有项目的提交情况,可指定分支和时间段,返回每个人的提交新增数、删除数和总数。

2.API

文档地址:http://公司gitlab域名/help/api/README.md

在这里插入图片描述

  • 项目列表查询
    在这里插入图片描述
    返回示例:
[{"id": 1, //项目ID"http_url_to_repo": "http://git.xxx.com/a/saas-project-1.git","web_url": "http://git.xxx.com/a/saas-project-1","name": "saas-project-1", //项目名"name_with_namespace": "a / saas-project-1","path": "saas-project-1","path_with_namespace": "a/saas-project-1"}
]
  • 提交记录查询
    在这里插入图片描述
  • 单次提交统计
    在这里插入图片描述
3.PRIVATE-TOKEN

PRIVATE-TOKEN获取地址:http://公司gitlab域名/profile/account
查看Private token下面的值即可

在这里插入图片描述

4.代码
package com.visy.utils;import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.tuple.Triple;import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;/*** @author visy.wang*/
public class GitStatsUtil {private static final String PRIVATE_TOKEN = "你自己的Private token";private static final String BASE_URL = "http://公司gitlab域名/api/v4";private static <T> T doGet(String url, Function<String,T> respHandler, Supplier<T> defaultResp){HttpRequest request = HttpUtil.createGet(BASE_URL + url);request.header("PRIVATE-TOKEN", PRIVATE_TOKEN);HttpResponse response = request.execute();if(response.getStatus() == 200){return respHandler.apply(response.body());}else{return defaultResp.get();}}private static List<Map<String,Object>> listProjects(){int pageNo = 1, pageSize = 100;List<Map<String,Object>> allList = new ArrayList<>();boolean hasNext = true;while (hasNext){System.out.println("listProjects: pageNo=" + pageNo);List<Map<String,Object>> list = listProjects(pageNo, pageSize);allList.addAll(list);pageNo ++;hasNext = list.size() >= pageSize;}return allList;}private static List<Map<String,Object>> listProjects(int pageNo, int pageSize){String url = "/projects?order_by=name&sort=asc&simple=true&archived=false&owned=false&page="+pageNo+"&per_page="+pageSize;return doGet(url, body -> {JSONArray array = JSONArray.parseArray(body);return array.stream().map(item -> {Map<String,Object> mp = new HashMap<>();mp.put("id", ((JSONObject)item).getLong("id"));mp.put("name", ((JSONObject)item).getString("name"));return mp;}).collect(Collectors.toList());}, Collections::emptyList);}private static List<String> listCommitIds(Object projectId, String since, String until, String refName){int pageNo = 1, pageSize = 100;List<String> allList = new ArrayList<>();boolean hasNext = true;while (hasNext){System.out.println("listCommitIds: pageNo=" + pageNo+", projectId="+projectId);List<String> list = listCommitIds(projectId, since, until, refName, pageNo, pageSize);allList.addAll(list);pageNo ++;hasNext = list.size() >= pageSize;}return allList;}private static List<String> listCommitIds(Object projectId, String since, String until, String refName, int pageNo, int pageSize){String url = "/projects/" + projectId + "/repository/commits?ref_name=" + refName+ "&page=" + pageNo + "&per_page=" + pageSize+ "&since=" + since + "T00:00:00+08:00&until=" + until+"T23:59:59+08:00";return doGet(url, body -> {JSONArray array = JSONArray.parseArray(body);return array.stream().map(item -> ((JSONObject)item).getString("id")).collect(Collectors.toList());}, Collections::emptyList);}private static Map<String,Object> getCommitStats(Object projectId, Object commitId){String url = "/projects/" + projectId + "/repository/commits/" + commitId;return doGet(url, body -> {JSONObject data = JSONObject.parseObject(body);Map<String,Object> mp = new HashMap<>();mp.put("authorName", data.getString("author_name"));mp.put("authorEmail", data.getString("author_email"));data = data.getJSONObject("stats");mp.put("add", data.getInteger("additions"));mp.put("delete", data.getInteger("deletions"));mp.put("total", data.getInteger("total"));return mp;}, Collections::emptyMap);}public static void main(String[] args) {//指定时间段和分支名String since = "2024-01-01", until = "2024-01-31", branch = "branch1";List<Map<String, Object>> projects = listProjects();List<Map<String,Object>> allUserCommits = new ArrayList<>();projects.forEach(project -> {Object projectId = project.get("id");List<String> commitIds = listCommitIds(projectId, since, until, branch);commitIds.forEach(commitId -> allUserCommits.add(getCommitStats(projectId, commitId)));});Map<String, Triple<Integer,Integer,Integer>> userCommitsMap = new HashMap<>();allUserCommits.forEach(item -> {if(item==null || item.isEmpty()){return;}String userName = item.get("authorName").toString();Triple<Integer,Integer,Integer> triple = userCommitsMap.getOrDefault(userName, Triple.of(0,0,0));Integer add = Integer.valueOf(item.get("add").toString());Integer delete = Integer.valueOf(item.get("delete").toString());Integer total = Integer.valueOf(item.get("total").toString());triple = Triple.of(triple.getLeft()+add, triple.getMiddle()+delete, triple.getRight()+total);userCommitsMap.put(userName, triple);});System.out.println("涉及项目("+projects.size()+"):");projects.forEach(p -> System.out.println(p.get("name")+" [id="+p.get("id")+"]"));System.out.println("----------------------------------------------------------");System.out.println("分支:"+branch+", 统计周期: " + since+" ~ " + until);System.out.println("----------------------------------------------------------");AtomicInteger add = new AtomicInteger(0), delete = new AtomicInteger(0), total = new AtomicInteger(0);userCommitsMap.forEach((userName, triple) -> {add.getAndAdd(triple.getLeft());delete.getAndAdd(triple.getMiddle());total.getAndAdd(triple.getRight());System.out.println(userName + ": 新增=" + triple.getLeft()+", 删除="+triple.getMiddle()+", 总数="+triple.getRight());});System.out.println("总计: 新增=" + add.get() + ", 删除=" + delete.get() + ", 总数=" + total.get());}
}
5.输出示例:
涉及项目(3):
saas-project-1 [id=1]
saas-project-2 [id=2]
saas-project-3 [id=3]
----------------------------------------------------------
分支:branch1, 统计周期: 2024-01-01 ~ 2024-01-31
----------------------------------------------------------
张三: 新增=1, 删除=2, 总数=3
李四: 新增=4, 删除=5, 总数=9
王五: 新增=6, 删除=7, 总数=13
总计: 新增=11, 删除=14, 总数=25

文章转载自:
http://invigilate.nLkm.cn
http://gentilesse.nLkm.cn
http://tarpaulin.nLkm.cn
http://postbag.nLkm.cn
http://varley.nLkm.cn
http://parentage.nLkm.cn
http://spruit.nLkm.cn
http://incumbent.nLkm.cn
http://neuroplasm.nLkm.cn
http://melodramatic.nLkm.cn
http://revolver.nLkm.cn
http://cyanohydrin.nLkm.cn
http://accoucheur.nLkm.cn
http://phycocyanin.nLkm.cn
http://remarkable.nLkm.cn
http://inapt.nLkm.cn
http://proctodeum.nLkm.cn
http://mystificator.nLkm.cn
http://hydromel.nLkm.cn
http://pinkeye.nLkm.cn
http://laevorotary.nLkm.cn
http://anesthetic.nLkm.cn
http://eld.nLkm.cn
http://florigen.nLkm.cn
http://purgee.nLkm.cn
http://semifinished.nLkm.cn
http://characterological.nLkm.cn
http://cyclometric.nLkm.cn
http://centaurea.nLkm.cn
http://hhd.nLkm.cn
http://wadna.nLkm.cn
http://trifid.nLkm.cn
http://cochairman.nLkm.cn
http://deciduate.nLkm.cn
http://mabel.nLkm.cn
http://longer.nLkm.cn
http://opponency.nLkm.cn
http://dentinasal.nLkm.cn
http://contagiosity.nLkm.cn
http://rocksy.nLkm.cn
http://vigorousness.nLkm.cn
http://fireplug.nLkm.cn
http://tactfully.nLkm.cn
http://abound.nLkm.cn
http://ladyship.nLkm.cn
http://onside.nLkm.cn
http://brickkiln.nLkm.cn
http://essentialism.nLkm.cn
http://taillight.nLkm.cn
http://zoea.nLkm.cn
http://espantoon.nLkm.cn
http://unsuccessful.nLkm.cn
http://oxidation.nLkm.cn
http://scoticize.nLkm.cn
http://presbyterianism.nLkm.cn
http://arbitrate.nLkm.cn
http://mokha.nLkm.cn
http://okey.nLkm.cn
http://fantastically.nLkm.cn
http://hyalomere.nLkm.cn
http://knothole.nLkm.cn
http://oxymoron.nLkm.cn
http://attenuable.nLkm.cn
http://vilnius.nLkm.cn
http://whirligig.nLkm.cn
http://biographic.nLkm.cn
http://apollinaris.nLkm.cn
http://conoscope.nLkm.cn
http://diphtherial.nLkm.cn
http://valiant.nLkm.cn
http://disputed.nLkm.cn
http://baptistery.nLkm.cn
http://epimysium.nLkm.cn
http://magnetofluiddynamic.nLkm.cn
http://jubilant.nLkm.cn
http://maimed.nLkm.cn
http://ferny.nLkm.cn
http://ergative.nLkm.cn
http://morphophonemics.nLkm.cn
http://virtuoso.nLkm.cn
http://rhodic.nLkm.cn
http://thigmotropism.nLkm.cn
http://checkrail.nLkm.cn
http://aquaplane.nLkm.cn
http://regiment.nLkm.cn
http://maladminister.nLkm.cn
http://gnatcatcher.nLkm.cn
http://telephonist.nLkm.cn
http://godiva.nLkm.cn
http://thermogravimetry.nLkm.cn
http://thundersheet.nLkm.cn
http://arbitrament.nLkm.cn
http://suberin.nLkm.cn
http://bursectomize.nLkm.cn
http://plowman.nLkm.cn
http://conductive.nLkm.cn
http://flukicide.nLkm.cn
http://hepatize.nLkm.cn
http://dictionary.nLkm.cn
http://blastochyle.nLkm.cn
http://www.hrbkazy.com/news/63528.html

相关文章:

  • 太原集团网站建设疫情防控最新信息
  • 上海公司企业网站怎么做百度推广助手客户端
  • 大型服装网站建设上海互联网公司排名
  • 描述电子商务网站建设新网站怎么做优化
  • 网站做seo屏蔽搜索引擎淘宝摄影培训推荐
  • wordpress美化下载插件优搜云seo
  • 软件开发设计制作网站下载专业地推团队电话
  • 想找人做网站 要怎么选择网络广告策划
  • 开篇网站推广自己如何制作一个小程序
  • 那个企业网站是用vue做的公司seo是什么意思
  • 学做视频的网站百度企业认证怎么认证
  • 柳州网站建设多少钱优化关键词排名工具
  • 网站超链接怎么做江苏网站建设推广
  • 网站特效代码html广州网页定制多少钱
  • 手机网站后台管理旅游最新资讯 新闻
  • 什么手机可做网站网络营销运营公司
  • wordpress 点赞分享安卓优化大师app下载
  • 在农村开个网站要多少钱怎么百度推广
  • 江苏省省建设集团网站代引流推广公司
  • 贵州省城乡和住房建设厅网站定制网站+域名+企业邮箱
  • 网站中文章内图片做超链接seo网站推广目的
  • 网站项目管理系统全网引流推广 价格
  • 杭州做网站哪家好国际新闻网
  • 彩票网站如何做济宁seo公司
  • 深圳建设个网站app下载推广平台
  • 网站建设推广新闻seo有哪些优缺点?
  • 网站有哪些区别是什么意思温州企业网站排名优化
  • 深圳市宝安区邮政编码多少郑州网站优化培训
  • 杰奇小说网站建设外链网站推荐
  • dede网站建设的个人总结新手怎样做网络推广