github-to-sqlite 作者 dogsheep

星标

Screenshot of dogsheep/github-to-sqlite

README 源代码

github-to-sqlite

PyPI Changelog Tests License

将 GitHub 数据保存到 SQLite 数据库中。

演示

https://github-to-sqlite.dogsheep.net/ 托管了一个 Datasette 演示站点,该站点展示了一个数据库,该数据库是通过 运行此工具 针对 Dogsheep GitHub 组织 中的所有仓库,以及 datasettesqlite-utils 仓库生成的。

如何安装

$ pip install github-to-sqlite

认证

创建一个 GitHub 个人访问令牌: https://github.com/settings/tokens

运行此命令并粘贴您的新令牌

$ github-to-sqlite auth

这将在您当前目录中创建一个名为 auth.json 的文件,其中包含所需的值。要将文件保存到不同的路径或文件名,请使用 --auth=myauth.json 选项。

作为使用 auth.json 文件的替代方案,您可以将访问令牌添加到名为 GITHUB_TOKEN 的环境变量中。

抓取仓库的问题

issues 命令抓取指定仓库的所有问题。

$ github-to-sqlite issues github.db simonw/datasette

如果存在 auth.json 文件,它将使用文件中的令牌。对于公共仓库,无需认证即可工作,但请注意 GitHub 对未经认证的请求有严格的基于 IP 的速率限制。

您可以使用 -a 指向不同的 auth.json 文件位置

$ github-to-sqlite issues github.db simonw/datasette -a /path/to/auth.json

您可以使用 --issue 选项一次或多次来加载特定的问题

$ github-to-sqlite issues github.db simonw/datasette --issue=1

示例: 问题表

抓取仓库的拉取请求

虽然拉取请求是一种问题,但单独抓取它们可以获得更多关于拉取请求的信息。例如,拉取请求是否已合并以及何时合并。

类似于抓取问题的 API,pull-requests 命令抓取指定仓库的所有拉取请求。

$ github-to-sqlite pull-requests github.db simonw/datasette

您可以使用 --pull-request 选项一次或多次来加载特定的拉取请求

$ github-to-sqlite pull-requests github.db simonw/datasette --pull-request=81

请注意,pull_requests 表上的 merged_by 列仅针对使用 --pull-request 选项加载的拉取请求填充 - GitHub API 在批量加载拉取请求时不会返回此字段。

您可以使用 --state 选项仅加载处于特定状态的拉取请求

$ github-to-sqlite pull-requests --state=open github.db simonw/datasette

可以使用 --org 加载整个组织(或多个组织)中的拉取请求

$ github-to-sqlite pull-requests --state=open --org=psf --org=python github.db

您可以使用搜索查询来查找拉取请求。请注意,最多只会加载 1000 个(这是 GitHub API 的限制),并且会丢失一些数据(base 和 head SHA)。使用搜索时,其他过滤器将被忽略;请将所有条件放入搜索本身中

$ github-to-sqlite pull-requests --search='org:python defaultdict state:closed created:<2023-09-01' github.db

示例: 拉取请求表

抓取仓库的问题评论

issue-comments 命令抓取仓库中所有问题的所有评论。

建议您先运行 issues,以便每个导入的评论都可以有一个指向其对应问题的外键。

$ github-to-sqlite issues github.db simonw/datasette
$ github-to-sqlite issue-comments github.db simonw/datasette

您可以使用 --issue 选项仅加载该仓库中特定问题的评论,例如

$ github-to-sqlite issue-comments github.db simonw/datasette --issue=1

示例: 问题评论表

抓取仓库的提交

commits 命令抓取一个或多个仓库的所有提交的详细信息。它目前抓取 SHA、提交消息以及作者和提交者详细信息;它不抓取完整的提交正文。

$ github-to-sqlite commits github.db simonw/datasette simonw/sqlite-utils

该命令接受一个或多个仓库。

默认情况下,一旦看到先前已抓取的提交,它就会停止。您可以使用 --all 强制它抓取所有提交(包括先前已插入的提交)。

示例: 提交表

抓取仓库的发布

releases 命令抓取一个或多个仓库的发布。

$ github-to-sqlite releases github.db simonw/datasette simonw/sqlite-utils

该命令接受一个或多个仓库。

示例: 发布表

抓取仓库的标签

tags 命令抓取一个或多个仓库的所有标签。

$ github-to-sqlite tags github.db simonw/datasette simonw/sqlite-utils

示例: 标签表

抓取仓库的贡献者

contributors 命令抓取一个或多个仓库的所有贡献者的详细信息。

$ github-to-sqlite contributors github.db simonw/datasette simonw/sqlite-utils

该命令接受一个或多个仓库。它填充一个 contributors 表,该表包含指向 reposusers 的外键,还有一个 contributions 表,列出每个贡献者对该仓库的提交数量。

示例: 贡献者表

抓取用户或组织拥有的仓库

repos 命令抓取属于用户或组织的仓库。

不带任何其他参数时,此命令将抓取当前已认证用户拥有、协作或通过其组织之一可访问的所有仓库

$ github-to-sqlite repos github.db

要抓取属于特定用户或组织的仓库,请提供其用户名作为参数

$ github-to-sqlite repos github.db dogsheep # organization
$ github-to-sqlite repos github.db simonw # user

您可以传递多个用户名来同时抓取多个用户或组织的仓库

$ github-to-sqlite repos github.db simonw dogsheep

添加 --readme 选项可将仓库的 README 保存到名为 readme 的列中。添加 --readme-html 可将 README 的 HTML 渲染版本保存到名为 readme_html 的列中。

示例: 仓库表

抓取特定的仓库

您可以使用 -rrepos 命令一起使用一次或多次来仅抓取特定的仓库。

$ github-to-sqlite repos github.db -r simonw/datasette -r dogsheep/github-to-sqlite

抓取用户已星标的仓库

starred 命令抓取用户已星标的仓库。

$ github-to-sqlite starred github.db simonw

如果您正在使用 auth.json 文件,则可以省略用户名来抓取已认证用户的星标仓库。

示例: 星标表

抓取已星标特定仓库的用户

stargazers 命令抓取已星标指定仓库的用户。

$ github-to-sqlite stargazers github.db simonw/datasette dogsheep/github-to-sqlite

您可以使用 owner/repo 语法指定一个或多个仓库。

使用此命令抓取的用户将插入到 users 表中。显示他们星标了哪些仓库的多对多记录将添加到 stars 表中。

抓取 GitHub Actions 工作流程

workflows 命令抓取每个仓库 .github/workflows 目录中的 YAML 工作流程配置,并解析它们以填充 workflowsjobssteps 表。

$ github-to-sqlite workflows github.db simonw/datasette dogsheep/github-to-sqlite

您可以使用 owner/repo 语法指定一个或多个仓库。

示例: 工作流程表, 作业表, 步骤表

抓取仓库的依赖项

GitHub 依赖图可以显示依赖于特定仓库的其他 GitHub 项目,例如 simonw/datasette/network/dependents

此数据尚无法通过 GitHub API 获取。scrape-dependents 命令抓取这些页面,并使用 GitHub API 加载依赖仓库的完整版本。

$ github-to-sqlite scrape-dependents github.db simonw/datasette

该命令接受一个或多个仓库。

添加 -v 以获得详细输出。

示例: 依赖项表

抓取表情符号

您可以使用 emojis 命令抓取 GitHub 支持的所有表情符号列表

$ github-to-sqlite emojis github.db

这将创建一个名为 emojis 的表,主键为 name,并包含一个 url 列。

如果您添加 --fetch 选项,该命令还将抓取图像的二进制内容并将其放入 image 列中

$ github-to-sqlite emojis emojis.db -f
[########----------------------------]  397/1799   22%  00:03:43

然后您可以使用 datasette-render-images 插件直观地浏览它们。

示例: 表情符号表

进行已认证的 API 调用

github-to-sqlite get 命令提供了一个方便的快捷方式来执行已认证的 API 调用。创建 auth.json 文件(或设置 GITHUB_TOKEN 环境变量)后,您可以像这样使用它

$ github-to-sqlite get https://api.github.com/gists

这将对您提供的 URL 进行已认证的调用,并将结果 JSON 美观地打印到控制台。

您可以省略 https://api.github.com/ 前缀,例如

$ github-to-sqlite get /gists

许多 GitHub API 使用 使用 HTTP Link header 进行分页。您可以使用 --paginate 跟踪分页并输出所有结果项的列表

$ github-to-sqlite get /users/simonw/repos --paginate

您可以使用 --nl 为每个项输出换行符分隔的 JSON。这对于将项流式传输到另一个工具非常有用。

$ github-to-sqlite get /users/simonw/repos --nl