如何合法爬取 Github 的信息?
《Java 面試指北》來啦!這是一份教你如何更高效地準(zhǔn)備面試的小冊,涵蓋常見八股文(系統(tǒng)設(shè)計、常見框架、分布式、高并發(fā) ......)、優(yōu)質(zhì)面經(jīng)等內(nèi)容。
前段時間因?yàn)楣ぷ餍枰枰ト?Github 上的一些信息。于是我就查了一些資料,看看如何能爬取到對應(yīng)的信息。經(jīng)過查詢,發(fā)現(xiàn) Github 有開放一些 HTTP 接口,可以讓我們?nèi)フ{(diào)用。雖說直接調(diào)用 HTTP 接口也可以實(shí)現(xiàn),但每次都要做入?yún)⒑统鰠⒌姆庋b,使用上非常麻煩。
經(jīng)過一段時間的搜索,我發(fā)現(xiàn)了一款名為 GitHub API for Java[1] 的 SDK,其對 Github 做了深度的封裝,使得我們可以更方便地調(diào)用 Github 的 HTTP 接口。今天就跟大家介紹一下這款 SDK 的簡單使用,方便朋友們后續(xù)使用。
我在?一個比 Spring 更輕量級的 Web 框架!!!微軟、紅帽都在用這篇文章中推薦過這個項目,不知道看過這篇文章的小伙伴還有印象不。

鑒權(quán)方式
Github 提供了多種權(quán)限方式,例如:賬號密碼方式、Personal Access Token 方式、JWT 方式等。這款 SDK 對于這幾種方式都支持了,并且還支持通過不同方式傳遞對應(yīng)鑒權(quán)信息,例如:傳參方式、配置文件方式、環(huán)境變量方式等等。這里我們只是簡單地爬取數(shù)據(jù),所以我們使用 Personal Access Token + 簡單傳參方式 就可以,其實(shí)例代碼如下所示,非常簡單。
GitHub?github?=?new?GitHubBuilder().withOAuthToken("my_personal_token").build();
Personal Access Token 的生成,在 Github Setting 的 Developer settings 中,如下圖所示。如果你實(shí)在找不到,那么可以參考官方文檔:創(chuàng)建個人訪問令牌 - GitHub Docs[2]

SDK 介紹
通過上面的介紹,我們可以知道通過 GithubBuilder 就可以獲取一個 Github 對象,而該 Github 類對象其實(shí)就代表了 Github 這個網(wǎng)站。Github 類提供了各種方法,例如:獲取 Github 的 IP 地址列表、獲取所有組織列表等等,如下圖所示。

其實(shí)這個 SDK 正是通過這種面向?qū)ο蟮姆绞皆O(shè)計的,除了最常用的 Github 類之外,還有下面這些類:
GHRepository 類:代表 Github 上的一個倉庫 GHUser 類:代表 Github 上的一個用戶 GHTeam 類:代表 Github 上的一個 Team GHBranch:代表倉庫的一個分支 等等
基本上 Github 上的一切都用一個類來表示,一切都可以抽象為一個對象,這正是面向?qū)ο蟮木杷凇?/strong> 而每個類都提供了非常多的方法,例如 GHUser 類提供了方法 isMemberOf(GHOrganization org) 方法來判斷一個用戶是否是某個組織的成員。
更多方法,大家可以直接查詢其對應(yīng)的 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());
????}
}
直接運(yùn)行該類便可獲取到的 token 對應(yīng)用戶的用戶名,如下圖所示。

這就是一個最簡單的演示了,麻雀雖小五臟俱全,更多的功能等待大家去探索發(fā)現(xiàn)~
好了,這就是今天的簡單分享,希望大家喜歡。
參考資料
GitHub API for Java: https://github-api.kohsuke.org/index.html
[2]創(chuàng)建個人訪問令牌 - 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 面試指北》持續(xù)更新完善中!
近期文章精選?:
如果本文對你有幫助的話,歡迎點(diǎn)贊&在看&分享,這對我繼續(xù)分享&創(chuàng)作優(yōu)質(zhì)文章非常重要。感謝????
