如何在Python中使用Github API(用法示例教程)

使用 Github API v3 在 Python 中使用请求和 PyGithub 库搜索存储库、用户、提交、删除文件等。
Github是一个Git存储库托管服务,其中添加了许多自己的功能,例如基于 Web 的图形界面来管理存储库、访问控制和其他一些功能,例如 wiki、组织、要点等。
Python如何使用Github API?你可能已经知道,有大量数据需要抓取。在本教程中,你将学习如何使用请求或PyGithub库在 Python 中使用 Github API v3 。
首先,让我们安装依赖项:

pip3 install PyGithub requests

Python Github API用法示例:获取用户数据由于使用Github API v3非常简单,你可以GET向特定 URL发出简单请求并检索结果:
import requests from pprint import pprint# github username username = "x4nth055" # url to request url = f"https://api.github.com/users/{username}" # make the request and return the json user_data = https://www.lsbin.com/requests.get(url).json() # pretty print JSON data pprint(user_data)

如何在Python中使用Github API?这里我使用了我的账户,这是返回的JSON的一部分(你也可以在浏览器中看到它):
{'avatar_url': 'https://avatars3.githubusercontent.com/u/37851086?v=4', 'bio': None, 'blog': 'https://www.thepythoncode.com', 'company': None, 'created_at': '2018-03-27T21:49:04Z', 'email': None, 'events_url': 'https://api.github.com/users/x4nth055/events{/privacy}', 'followers': 93, 'followers_url': 'https://api.github.com/users/x4nth055/followers', 'following': 41, 'following_url': 'https://api.github.com/users/x4nth055/following{/other_user}', 'gists_url': 'https://api.github.com/users/x4nth055/gists{/gist_id}', 'gravatar_id': '', 'hireable': True, 'html_url': 'https://github.com/x4nth055', 'id': 37851086, 'login': 'x4nth055', 'name': 'Rockikz', < ..SNIPPED..>

大量数据,这就是为什么单独使用请求库手动提取大量数据并不方便的原因,因此,PyGithub出现了。
获取用户的公共存储库Python如何使用Github API?让我们使用刚刚安装的 PyGithub 库获取该用户的所有公共存储库:
import base64 from github import Github from pprint import pprint# Github username username = "x4nth055" # pygithub object g = Github() # get that user by username user = g.get_user(username)for repo in user.get_repos(): print(repo)

这是我的输出:
Repository(full_name="x4nth055/aind2-rnn") Repository(full_name="x4nth055/awesome-algeria") Repository(full_name="x4nth055/emotion-recognition-using-speech") Repository(full_name="x4nth055/emotion-recognition-using-text") Repository(full_name="x4nth055/food-reviews-sentiment-analysis") Repository(full_name="x4nth055/hrk") Repository(full_name="x4nth055/lp_simplex") Repository(full_name="x4nth055/price-prediction") Repository(full_name="x4nth055/product_recommendation") Repository(full_name="x4nth055/pythoncode-tutorials") Repository(full_name="x4nth055/sentiment_analysis_naive_bayes")

好的,所以我做了一个简单的函数来从这个Repository对象中提取一些有用的信息:
def print_repo(repo): # repository full name print("Full name:", repo.full_name) # repository description print("Description:", repo.description) # the date of when the repo was created print("Date created:", repo.created_at) # the date of the last git push print("Date of last push:", repo.pushed_at) # home website (if available) print("Home Page:", repo.homepage) # programming language print("Language:", repo.language) # number of forks print("Number of forks:", repo.forks) # number of stars print("Number of stars:", repo.stargazers_count) print("-"*50) # repository content (files & directories) print("Contents:") for content in repo.get_contents(""): print(content) try: # repo license print("License:", base64.b64decode(repo.get_license().content.encode()).decode()) except: pass

如何在Python中使用Github API?Repository 对象还有很多其他的字段,建议你使用dir(repo)获取你想要打印的字段。让我们再次遍历存储库并使用我们刚刚编写的函数:
# iterate over all public repositories for repo in user.get_repos(): print_repo(repo) print("="*100)

这将打印有关此用户的每个公共存储库的一些信息:
==================================================================================================== Full name: x4nth055/pythoncode-tutorials Description: The Python Code Tutorials Date created: 2019-07-29 12:35:40 Date of last push: 2020-04-02 15:12:38 Home Page: https://www.thepythoncode.com Language: Python Number of forks: 154 Number of stars: 150 -------------------------------------------------- Contents: ContentFile(path="LICENSE") ContentFile(path="README.md") ContentFile(path="ethical-hacking") ContentFile(path="general") ContentFile(path="images") ContentFile(path="machine-learning") ContentFile(path="python-standard-library") ContentFile(path="scapy") ContentFile(path="web-scraping") License: MIT License < ..SNIPPED..>

我截断了整个输出,因为它将返回所有存储库及其信息,你可以看到我们使用repo.get_contents("")方法来检索该存储库的所有文件和文件夹,PyGithub将其解析为ContentFile对象,用于dir(content)查看其他有用的字段。
【如何在Python中使用Github API(用法示例教程)】此外,如果你有私有存储库,你可以通过使用PyGithub验证你的帐户(使用正确的凭据)来访问它们,如下所示:
username = "username" password = "password"# authenticate to github g = Github(username, password) # get the authenticated user user = g.get_user() for repo in user.get_repos(): print_repo(repo)

Github 还建议使用经过身份验证的请求,因为如果你使用公共  请求(未经身份验证)并且超过少量请求,它将引发RateLimitExceededException。
Python如何使用Github API?搜索存储库Github API 非常丰富,你可以像在网站中一样通过特定查询来搜索存储库:
# search repositories by name for repo in g.search_repositories("pythoncode tutorials"): # print repository details print_repo(repo)

这将返回9 个存储库及其信息。
你还可以按编程语言或主题进行搜索:
# search by programming language for i, repo in enumerate(g.search_repositories("language:python")): print_repo(repo) print("="*100) if i == 9: break

要搜索特定主题,你只需"topic:machine-learning"search_repositories()method 中放入类似内容即可。
操作存储库中的文件Python Github API用法示例:如果你使用的是经过身份验证的版本,你还可以使用 API 非常轻松地创建、更新和删除文件:
# searching for my repository repo = g.search_repositories("pythoncode tutorials")[ 0]# create a file and commit n push repo.create_file("test.txt", "commit message", "content of the file")# delete that created file contents = repo.get_contents("test.txt") repo.delete_file(contents.path, "remove test.txt", contents.sha)

如何在Python中使用Github API?上面的代码是一个简单的用例,我搜索了一个特定的存储库,我添加了一个新文件并调用了它test.txt,我将一些内容放入其中并进行了提交。之后,我抓取了那个新文件的内容并删除了它(它也算作一次 git 提交)。
果然,在执行上述代码行之后,提交被创建和推送:
如何在Python中使用Github API(用法示例教程)

文章图片
结论Python如何使用Github API?我们刚刚在 Github API 中触及了皮毛,你可以使用许多其他功能和方法,显然,我们无法涵盖所有??这些功能和方法,以下是一些有用的功能和方法,你可以自己测试它们:
  • g.get_organization(login):返回代表 Github 组织的Organization对象
  • g.get_gist(id)  : 返回一个Gist对象,它代表 Github 中的一个要点
  • g.search_code(query):返回ContentFile对象的分页列表,其中表示多个存储库中的匹配文件
  • g.search_topics(query):返回一个Topic对象的分页列表,其中它代表一个 Github 主题
  • g.search_commits(query):返回Commit对象的分页列表,其中它代表 Github 中的提交
还有很多,请使用dir(g)获取其他方法,查看PyGithub 文档,或Github API以获取详细信息。

    推荐阅读