背景
GitHub 是全球最大的开源软件开发平台,数百万开发者积极地在此交流代码、创建项目、并协助开发更好的解决方案。GitHub 的数据也因此成为了一个重要的数据来源,可以用于分析行业趋势、项目健康度、个人贡献度等等。
@sergioalonso.es/github-miner
是一个 npm 包,它提供了一种轻松、快速地获取 GitHub 数据的方式。有了这个包,你可以使用 GitHub 的 REST API 和 GraphQL API 获取数据,支持多种数据获取和筛选方式。
在这篇文章中,我们将深入了解 @sergioalonso.es/github-miner
,包括如何安装它、如何在项目中使用它,以及如何进行高级数据筛选。
安装
你可以使用 npm 在你的项目中安装 @sergioalonso.es/github-miner
:
npm install @sergioalonso.es/github-miner
接着你可以在你的代码中引入它:
const { GithubMiner } = require('@sergioalonso.es/github-miner');
使用
通过 GithubMiner
类,我们可以使用 GitHub 的 REST API 和 GraphQL API 获取数据。不要忘记在使用之前设置你的 GitHub 凭证,这可以在你的代码中指定:
const github = new GithubMiner({ token: YOUR_GITHUB_ACCESS_TOKEN, });
获取用户信息
获取用户信息可以使用 REST API,例如我们想获取 user001 的信息:
const user = await github.getUser('user001'); console.log(user);
你将看到类似下面的输出:
-- -------------------- ---- ------- - -------- ---------- ----- ------- ---------- --------------------- ------------- ----------------------------------------------------- -------------- --- ------ --------------------------------------- ----------- ----------------------------- ---------------- ------------------------------------------------- ---------------- -------------------------------------------------------------- ------------ ------------------------------------------------------- -------------- -------------------------------------------------------------- -------------------- ----------------------------------------------------- -------------------- -------------------------------------------- ------------ --------------------------------------------- ------------- -------------------------------------------------------- ---------------------- ------------------------------------------------------- ------- ------- ------------- ------ ------- ----- ----- ---------- ----- ------- --- ----------- ---- ----------- -------- ----- ----------- ----- ------ ----- ------------------- ----- --------------- -- --------------- -- ------------ -- ------------ -- ------------- ----------------------- ------------- ---------------------- -
获取仓库信息
获取仓库信息同样可以使用 REST API,例如获取 sergioalonso.es/github-miner 的信息:
const repo = await github.getRepo('sergioalonso.es', 'github-miner'); console.log(repo);
你将看到类似下面的输出:
-- -------------------- ---- ------- - ----- ---------- ---------- ----------------------------------- ------- --------------- ------------ ------------------------------- ---------- ------ -------- - -------- ------------------ ----- --------- ---------- ----------------------------------- ------------- ------------------------------------------------------- -------------- --- ------ ----------------------------------------------- ----------- ------------------------------------- ---------------- --------------------------------------------------------- ---------------- ---------------------------------------------------------------------- ------------ --------------------------------------------------------------- -------------- ---------------------------------------------------------------------- -------------------- ------------------------------------------------------------- -------------------- ---------------------------------------------------- ------------ ----------------------------------------------------- ------------- ---------------------------------------------------------------- ---------------------- --------------------------------------------------------------- ------- --------------- ------------- ----- -- ----------- -------------------------------------------------- -------------- ------- ----- -- - ------ ------- -- -------- ---- --- ------ --- --------- ------- ------ ------ ------------------------------------------------------------ ------------ ------------------------------------------------------------------ ----------- -------------------------------------------------------------------------- -------------------- ----------------------------------------------------------------------------------------- ------------ ------------------------------------------------------------------ ------------ ------------------------------------------------------------------ ------------------- ----------------------------------------------------------------------------------- ------------- ------------------------------------------------------------------- ---------------- ----------------------------------------------------------------------------- --------------- ------------------------------------------------------------------------------ ----------- ----------------------------------------------------------------- ------------ ---------------------------------------------------------------------------- --------------- --------------------------------------------------------------------------- --------------- --------------------------------------------------------------------------- ------------ ---------------------------------------------------------------------------- --------------- --------------------------------------------------------------------------- ---------------- ---------------------------------------------------------------------- ----------------- ----------------------------------------------------------------------- ------------------- ------------------------------------------------------------------------- ------------------ ------------------------------------------------------------------------ ------------------- ------------------------------------------------------------------------- -------------- -------------------------------------------------------------------------- ------------------ ------------------------------------------------------------------------------ --------------- ------------------------------------------------------------------------------ -------------------- ------------------------------------------------------------------------------------- --------------- ----------------------------------------------------------------------------- -------------- ------------------------------------------------------------------------------------ ------------- ------------------------------------------------------------------- -------------- ----------------------------------------------------------------------------------- ---------------- ---------------------------------------------------------------------- ------------- ---------------------------------------------------------------------------- ------------ --------------------------------------------------------------------------- ----------------- -------------------------------------------------------------------------------- -------------------- ---------------------------------------------------------------------------------------------------- ------------- -------------------------------------------------------------------------- --------------- -------------------------------------------------------------------------- ------------------ ------------------------------------------------------------------------ ------------- ----------------------- ------------- ----------------------- ------------ ----------------------- ---------- ---------------------------------------------------- ---------- -------------------------------------------------- ------------ ------------------------------------------------------ ---------- -------------------------------------------------- ----------- ----- ------- -- ------------------- -- ----------------- -- ----------- ------------- ------------- ----- --------------- ----- ---------------- ----- ----------- ----- ------------ ------ -------------- -- ------------- ----- ----------- ------ ----------- ------ -------------------- -- ---------- ----- -------- -- -------------- -- ----------- -- ----------------- ------ -
获取仓库的 commits
使用 GraphQL API 可以获取仓库的 commits。以下代码将获取 sergioalonso.es/github-miner 的最近 10 条 commit:
const commits = await github.getCommits('sergioalonso.es', 'github-miner', 10); console.log(commits);
你将看到类似下面的输出:
-- -------------------- ---- ------- - ------- - ------------- - ------- --------------- ------------------- - --------- - ---------- - -------- - - ------- - ---------------- ----------------------- ------------ -------------------------------------------------------------------------------------------------- ------------------ -------- ---- ------------- ------ ------------------------------------------- --------- - ------- ------- -------- -------- ------------------------- ------- - -------- ------------------ ------ ------------------------------------- ------------ ------------------------------------------------------------------------------------------------- - - - -- - ------- - ---------------- ----------------------- ------------ -------------------------------------------------------------------------------------------------- ------------------ ---- ------- ---------- ------ ------------------------------------------- --------- - ------- ------- -------- -------- ------------------------- ------- - -------- ------------------ ------ ------------------------------------- ------------ ------------------------------------------------------------------------------------------------- - - - -- --- - - - - - - -
获取仓库的 fork 数
这里我们来演示一下如何使用 GraphQL API,筛选 fork 数。以下代码将获取 sergioalonso.es/github-miner 的 fork 数:
const repo = await github.getRepo('sergioalonso.es', 'github-miner', true); const forks = repo.data.repository.forks.totalCount; console.log(forks);
你将看到类似下面的输出:
1
获取用户或组织下的所有成员
同样是使用 GraphQL API,以下代码将获取 sergioalonso.es 组织下所有的成员:
const members = await github.getOrganizationMembers('sergioalonso.es'); console.log(members.map((member) => member.login));
你将看到类似下面的输出:
[ "sergioalonso.es", "userA", "userB", "userC" ]
高级使用
在查询中使用参数
在上面的例子中,我们是使用 query string 传递参数的。但是在某些情况下,我们会想要在查询中使用参数。这需要使用 GraphQL API,以下是一个例子:
-- -------------------- ---- ------- ----- ----- - - ------------------------ -------- - ------------------- ------------------ - ------------ --- - ----- - ---- - - - - -- ----- --------- - - ----------------- ------------------ -- ----- ------ - ----- ------------------- ----------- --------------------
我们通过 query
变量中的 $organizationName
定义了一个参数,在 variables
中传递变量值。这里我们使用了 query
方法,该方法允许我们使用 GraphQL API。
支持多种数据筛选方式
GitHub 的 API 支持多种数据筛选方式,包括:分页、排序、筛选等。我们可以通过 GithubMiner
的方法传递这些参数,以下是一个例子:
const commits = await github.getCommits('sergioalonso.es', 'github-miner', 10, { author: 'sergioalonso.es', since: '2021-11-01T00:00:00Z', until: '2021-11-30T23:59:59Z', }); console.log(commits);
在这个例子中,我们获取的是 sergioalonso.es/github-miner 的最近 10 条 commit,并且使用了 author
、since
、until
参数进行筛选。你可以在 官方文档 中找到更多参数。
总结
在这篇文章中,我们深入了解了 @sergioalonso.es/github-miner
,包括安装、使用、高级使用。通过使用该 npm 包,我们可以轻松获取 GitHub 的数据,包括用户信息、仓库信息、commits 信息等等。同时,我们也可以使用 REST API 和 GraphQL API 实现高级数据筛选,提高了数据的准
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005543e81e8991b448d1919