如何合法爬取 Github 的信息?

JavaGuide

共 2335字,需浏览 5分钟

 · 2022-05-27

《Java 面试指北》来啦!这是一份教你如何更高效地准备面试的小册,涵盖常见八股文(系统设计、常见框架、分布式、高并发 ......)、优质面经等内容。

前段时间因为工作需要,需要抓取 Github 上的一些信息。于是我就查了一些资料,看看如何能爬取到对应的信息。经过查询,发现 Github 有开放一些 HTTP 接口,可以让我们去调用。虽说直接调用 HTTP 接口也可以实现,但每次都要做入参和出参的封装,使用上非常麻烦。

经过一段时间的搜索,我发现了一款名为 GitHub API for Java[1] 的 SDK,其对 Github 做了深度的封装,使得我们可以更方便地调用 Github 的 HTTP 接口。今天就跟大家介绍一下这款 SDK 的简单使用,方便朋友们后续使用。

我在 一个比 Spring 更轻量级的 Web 框架!!!微软、红帽都在用这篇文章中推荐过这个项目,不知道看过这篇文章的小伙伴还有印象不。

img

鉴权方式

Github 提供了多种权限方式,例如:账号密码方式、Personal Access Token 方式、JWT 方式等。这款 SDK 对于这几种方式都支持了,并且还支持通过不同方式传递对应鉴权信息,例如:传参方式、配置文件方式、环境变量方式等等。这里我们只是简单地爬取数据,所以我们使用 Personal Access Token + 简单传参方式 就可以,其实例代码如下所示,非常简单。

GitHub github = new GitHubBuilder().withOAuthToken("my_personal_token").build();

Personal Access Token 的生成,在 Github Setting 的 Developer settings 中,如下图所示。如果你实在找不到,那么可以参考官方文档:创建个人访问令牌 - GitHub Docs[2]

img

SDK 介绍

通过上面的介绍,我们可以知道通过 GithubBuilder 就可以获取一个 Github 对象,而该 Github 类对象其实就代表了 Github 这个网站。Github 类提供了各种方法,例如:获取 Github 的 IP 地址列表、获取所有组织列表等等,如下图所示。

img

其实这个 SDK 正是通过这种面向对象的方式设计的,除了最常用的 Github 类之外,还有下面这些类:

  • GHRepository 类:代表 Github 上的一个仓库
  • GHUser 类:代表 Github 上的一个用户
  • GHTeam 类:代表 Github 上的一个 Team
  • GHBranch:代表仓库的一个分支
  • 等等

基本上 Github 上的一切都用一个类来表示,一切都可以抽象为一个对象,这正是面向对象的精髓所在。 而每个类都提供了非常多的方法,例如 GHUser 类提供了方法 isMemberOf(GHOrganization org) 方法来判断一个用户是否是某个组织的成员。

更多方法,大家可以直接查询其对应的 API 文档:Overview (GitHub API for Java 1.300 API)[3]

快速入门

首先,在项目中引入该 maven 依赖,如下所示。


    org.kohsuke
    github-api
    1.301

接着直接写一个 HelloGithub 类,如下所示。

public class HelloGithub {
    public static void main(String[] args) throws IOException {
        GitHub github = new GitHubBuilder().withOAuthToken("my_personal_token").build();
        System.out.println(github.getMyself().getName());
    }
}

直接运行该类便可获取到的 token 对应用户的用户名,如下图所示。

img

这就是一个最简单的演示了,麻雀虽小五脏俱全,更多的功能等待大家去探索发现~

好了,这就是今天的简单分享,希望大家喜欢。

参考资料

[1]

GitHub API for Java: https://github-api.kohsuke.org/index.html

[2]

创建个人访问令牌 - GitHub Docs: https://docs.github.com/cn/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token

[3]

Overview (GitHub API for Java 1.300 API): https://github-api.kohsuke.org/apidocs/index.html

··········  END  ··············

欢迎加入我的知识星球获取更多面试干货,《Java 面试指北》持续更新完善中!

近期文章精选 :


如果本文对你有帮助的话,欢迎点赞&在看&分享,这对我继续分享&创作优质文章非常重要。感谢🙏🏻


浏览 40
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报