使用GitHub API 查询开源项目信息

一、GitHub API介绍

GitHub API 是一组 RESTful API 接口,用于与 GitHub 平台进行交互。通过使用 GitHub API,开发人员可以访问和操作 GitHub 平台上的各种资源,如仓库、提交记录、问题等。

GitHub API 提供了多种功能和端点,以满足开发人员的需求。一些常用的功能包括:

  1. 获取用户信息:可以通过 API 获取用户的基本信息、关注列表、仓库列表等。
  2. 管理仓库:可以通过 API 创建仓库、编辑仓库属性、获取仓库的提交记录等。
  3. 问题和讨论:可以通过 API 创建问题、获取问题列表、参与讨论等。
  4. 用户认证和授权:可以通过 API 进行用户的认证和授权,以获取访问私有资源的权限。
  5. 搜索:可以通过 API 进行代码搜索、问题搜索、用户搜索等。

GitHub API 使用标准的 HTTP 协议进行通信,并返回 JSON 格式的数据。开发人员可以使用任何支持 HTTP 请求的编程语言来与 GitHub API 进行交互。

二、使用java进行项目信息查询

2.1获取用户、仓库基础信息API说明

https://api.github.com/users/{user}
查询用户数据
https://api.github.com/users/{user}/repos
查询仓库数据
https://api.github.com/repos/{user}/{repos}
查询项目

以上接口可以填写具体参数,直接在浏览器进行访问。 

2.2主要用到的第三方工具库

工具名作用maven依赖
httpclienthttp查询
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.4</version>
</dependency>
jacksonjson反序列化
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.1</version>
</dependency>

2.3使用httpclient查询

 private  static <T> T queryBean(String url, Class<T> c) throws Exception {String json = httpGet(url);return JsonUtil.string2Object(json, c);}private static <C extends Collection<E>, E>  E queryList(String url, Class<E> c) throws Exception {String json = httpGet(url);return (E) JsonUtil.string2Collection(json, ArrayList.class, c);}private static String httpGet(String url) throws IOException {CloseableHttpClient client = HttpClients.createDefault();CloseableHttpResponse response = client.execute(new HttpGet(url));HttpEntity httpEntity = response.getEntity();String json = EntityUtils.toString(httpEntity);return json;}

上述代码主要有两个查询函数,一个查询单个实体,一个查询实体列表。

2.4jackson反序列化工具

需要注意的是,由于GitHub API返回的查询结果数据非常全面,但我们的代码可能只需要部分字段(需要什么字段自行添加),在使用jackson进行反序列化的时候,应该设置忽略没有申明的字段。

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.ArrayType;
import com.fasterxml.jackson.databind.type.TypeFactory;import java.io.StringWriter;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;public final class JsonUtil {private static TypeFactory typeFactory = TypeFactory.defaultInstance();private static final ObjectMapper MAPPER = new ObjectMapper();static {MAPPER.setSerializationInclusion(JsonInclude.Include.NON_NULL);MAPPER.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);MAPPER.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);MAPPER.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);}public static String object2String(Object object) {StringWriter writer = new StringWriter();try {MAPPER.writeValue(writer, object);}catch(Exception e) {return null;}return writer.toString();}@SuppressWarnings("unchecked")public static <T> T string2Object(String json, Class<T> clazz) {JavaType type = typeFactory.constructType(clazz);try {return (T) MAPPER.readValue(json, type);} catch(Exception e) {return null;}}public static String map2String(Map<?,?> map) {StringWriter writer = new StringWriter();try {MAPPER.writeValue(writer, map);} catch(Exception e) {return null;}return writer.toString();}public static Map<String, Object> string2Map(String json) {JavaType type = typeFactory.constructMapType(HashMap.class, String.class, Object.class);try {return MAPPER.readValue(json, type);} catch(Exception e) {return null;}}public static <K, V> Map<K, V> string2Map(String json, Class<K> keyClazz, Class<V> valueClazz) {JavaType type = typeFactory.constructMapType(HashMap.class, keyClazz, valueClazz);try {return MAPPER.readValue(json, type);} catch(Exception e) {return null;}}@SuppressWarnings("unchecked")public static <T> T[] string2Array(String json, Class<T> clazz) {ArrayType type = typeFactory.constructArrayType(clazz);try {return (T[]) MAPPER.readValue(json, type);} catch(Exception e) {return null;}}public static <C extends Collection<E>, E> C string2Collection(String json, Class<C> collectionType,Class<E> elemType) {JavaType type = typeFactory.constructCollectionType(collectionType, elemType);try {return MAPPER.readValue(json, type);} catch(Exception e) {return null;}}}

2.5相关javabean定义

这里使用了lombok简化bean编写

import lombok.Data;@Data
public class ProjectView {private String html_url;private boolean fork;private String description;// 开发语言private String language;// 点赞数private int stargazers_count;// fork数private int forks_count;}
import lombok.Data;@Data
public class UserView {// github主页private String html_url;// 公有仓库数量private int public_repos;private int followers;
}

2.6代码示例

public static void main(String[] args) throws Exception {String user = "kingston-csj";String project = "jforgame";// 查询用户数据String url1 = "https://api.github.com/users/{username}".replace("{username}", user);System.out.println(queryBean(url1, UserView.class));// 查询仓库数据String url2 = "https://api.github.com/users/{username}/repos".replace("{username}", user);System.out.println(queryList(url2, ProjectView.class));// 查询具体仓库String url3 = "https://api.github.com/repos/{username}/{reposname}".replace("{username}", user).replace("{reposname}",project);System.out.println(queryBean(url3, ProjectView.class));}

2.7运行截图 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/720321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

昇腾芯片解析:华为自主研发的人工智能处理器全面分析

在当今科技发展的浪潮中&#xff0c;昇腾芯片作为一种新兴的处理器&#xff0c;正引起广泛的关注和讨论。升腾芯片究竟是由哪家公司生产的&#xff1f;这个问题一直困扰着许多人。下面小编将全面介绍、分析升腾芯片的生产商及各类参数、应用&#xff0c;以便读者对其有更全面的…

自学高效备考2025年AMC8数学竞赛:2000-2024年AMC8真题解析

今天继续来随机看五道AMC8的真题和解析&#xff0c;根据实践经验&#xff0c;对于想了解或者加AMC8美国数学竞赛的孩子来说&#xff0c;吃透AMC8历年真题是备考最科学、最有效的方法之一。即使不参加AMC8竞赛&#xff0c;吃透了历年真题600道和背后的知识体系&#xff0c;那么小…

Maven终端命令生成Spring-boot项目并输出“helloworld“

1. 生成项目 mvn archetype:generate填写groupId和artifactId&#xff0c;其余默认即可 2. 修改pom.xml文件 将如下内容放入pom.xml文件内 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artif…

Conda笔记--移动Conda环境后pip使用异常的解决

1--概述 由于各种原因&#xff0c;需要将Anaconda转变为Minicoda&#xff0c;为了保留之前安装的所有环境&#xff0c;直接将anaconda3/envs的所有环境拷贝到Miniconda/envs中&#xff0c;但在使用移动后环境时会出现pip的错误&#xff1a;bad interpreter: No such file or di…

计算机网络-物理层-传输媒体

传输媒体的分类 导向型-同轴电缆 导向型-双绞线 导向型-光纤 非导向型

面试问答总结之Java进阶

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;注解Annotaion &#xff08;java标注&#xff09;&#x1f415;内置注解&#x1f415;元注解 &#x1f380;对象克隆&#x1f415;如何实现克隆&#x1f415;如何实现深克…

C#,最小代价多边形三角剖分MCPT(Minimum Cost Polygon Triangulation)算法与源代码

1 最小代价多边形三角剖分算法 凸多边形的三角剖分是通过在非相邻顶点&#xff08;角点&#xff09;之间绘制对角线来形成的&#xff0c;这样对角线就不会相交。问题是如何以最小的代价找到三角剖分的代价。三角剖分的代价是其组成三角形的权重之和。每个三角形的重量是其周长…

LLM春招准备(1)

llm排序 GPT4V GPT-4V可以很好地理解直接绘制在图像上的视觉指示。它可以直接识别叠加在图像上的不同类型的视觉标记作为指针&#xff0c;例如圆形、方框和手绘&#xff08;见下图&#xff09;。虽然GPT-4V能够直接理解坐标&#xff0c;但相比于仅文本坐标&#xff0c;GPT-4V在…

蓝桥杯练习题——dp

五部曲&#xff08;代码随想录&#xff09; 1.确定 dp 数组以及下标含义 2.确定递推公式 3.确定 dp 数组初始化 4.确定遍历顺序 5.debug 入门题 1.斐波那契数 思路 1.f[i]&#xff1a;第 i 个数的值 2.f[i] f[i - 1] f[i - 2] 3.f[0] 0, f[1] 1 4.顺序遍历 5.记得特判 …

Web前端---表格和表单

1.表格概述 表格标记&#xff1a;<table></table> 表格标题标记&#xff1a;<caption></caption> 表头&#xff1a;<th></th>------heading 行标记&#xff1a;<tr></tr>-----r是row 列标记&#xff1a;<td></t…

数据可视化原理-腾讯-散点图

在做数据分析类的产品功能设计时&#xff0c;经常用到可视化方式&#xff0c;挖掘数据价值&#xff0c;表达数据的内在规律与特征展示给客户。 可是作为一个产品经理&#xff0c;&#xff08;1&#xff09;如果不能够掌握各类可视化图形的含义&#xff0c;就不知道哪类数据该用…

快速搭建Vue前端框架

快速搭建Vue前端框架 安装Vue Vue官方安装过程:https://cli.vuejs.org/zh/guide/installation.html 二.创建Vue工程 2.2 安装淘宝镜像 安装淘宝镜像&#xff08;会让你安装Vue的速度加快&#xff09;&#xff1a; npm config set registry https://registry.npm.taobao.or…

CMU 10-414/714: Deep Learning Systems --hw0

hw0 宏观上的步骤: softmax loss: 实现softmax loss代码 概念 softmax就是将结果映射到0~1之间,且所有结果相加为1(概率形式)cross-entropy loss就是计算 p ( x ) log ⁡ q ( x ) p(x)\log {q(x)} p(x)logq(x),此值可用于衡量实际输出与期望输出的距离,进而衡量预测模…

Qt 实现橡皮擦拭显示图片

1.简介 在一些游戏中看见类似解密破案的效果&#xff0c;使用手触摸去擦拭图片上的灰尘&#xff0c;然后显示最终的图片&#xff0c;所以也想试试Qt实现的效果。大家有自己想做的效果&#xff0c;都可以尝试。 以下是效果展示图。 可以控制橡皮擦的大小&#xff0c;进行擦拭…

CRMCHAT修复获取客户ip信息,地区信息

CRMCHAT修复获取客户ip信息&#xff0c;地区信息-TP源码网原因&#xff1a; 因pv.sohu.com/cityjson?ieutf-8接口已无法正确获取ip信息&#xff0c;导致后台站点统计无法正确获取用户ip信息&#xff0c;无法获取地区信息 修改 注释掉无用接口地址 修复ip信息 也可以使用&…

NLP评价指标

一、分类任务常见评估&#xff1a; 准确度(Accuracy) 评估预测正确的比例&#xff0c;精确率(Precision) 评估预测正例的查准率&#xff0c;召回率(Recall) 评估真实正例的查全率。如果是多分类&#xff0c;则每个类别各自求P、R最终求平均值。 TP&#xff08;True Positives…

11. Nginx进阶-HTTPS

简介 基本概述 SSL SSL是安全套接层。 主要用于认证用户和服务器&#xff0c;确保数据发送到正确的客户机和服务器上。 SSL可以加密数据&#xff0c;防止数据中途被窃取。 SSL也可以维护数据的完整性&#xff0c;确保数据在传输过程中不被改变。 HTTPS HTTPS就是基于SSL来…

【Unity】Node.js安装与配置环境

引言 我们在使用unity开发的时候&#xff0c;有时候会使用一些辅助工具。 Node.js就是开发中&#xff0c;经常会遇到的一款软件。 1.下载Node.js 下载地址&#xff1a;https://nodejs.org/en 2.安装Node.js ①点击直接点击Next下一步 ②把协议勾上&#xff0c;继续点击…

【lua】lua内存优化记录

这边有一个Unity项目用的tolua&#xff0c; 游戏运行后手机上lua内存占用 基本要到 189M&#xff0c; 之前峰值有200多。 优化点1 加快gc频度&#xff1a; 用uwa抓取的lua内存&#xff0c; 和unity的mono很像&#xff0c;内存会先涨 然后突然gc一下&#xff0c;降下来。 这样…

java数据结构与算法刷题-----LeetCode687. 最长同值路径

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 深度优先&#xff0c;用下面的儿子判断2. 深度优先&#xff0…