如何使用GitHub API在GitHub中获取存储库的依存关系信息?

时间:2019-11-06 16:03:19

标签: github graphql github-api

当我使用GitHub API v4获取一些信息时,可以使用repository.dependencyGraphManifests轻松获得依赖关系。但是我找不到任何使用GitHub API v4来获取依赖项信息的方法,尽管我可以在Insights->Dependency Graph->Dependents中看到它。 我想知道是否有任何方法可以在GitHub存储库中获取受抚养人信息?无论是GitHub API还是其他东西。

2 个答案:

答案 0 :(得分:0)

我认为您无法使用Github API(Rest或Graphql)来获取依赖项项目,一种方法是像以下脚本那样使用抓取:

import requests
from bs4 import BeautifulSoup

repo = "expressjs/express"
page_num = 3
url = 'https://github.com/{}/network/dependents'.format(repo)

for i in range(page_num):
    print("GET " + url)
    r = requests.get(url)
    soup = BeautifulSoup(r.content, "html.parser")

    data = [
        "{}/{}".format(
            t.find('a', {"data-repository-hovercards-enabled":""}).text,
            t.find('a', {"data-hovercard-type":"repository"}).text
        )
        for t in soup.findAll("div", {"class": "Box-row"})
    ]

    print(data)
    print(len(data))
    url = soup.find("div", {"class":"paginate-container"}).find('a')["href"]

Try this python script

答案 1 :(得分:0)

基于贝特朗·马特尔(Bertrand Martel)的答案(@ bertrand-martel),请不要忘记添加以下代码,以免您陷入第一页和第二页之间。换句话说,它将向前发展,然后向后发展;因为最初只有一个<a>标签,而下一页有两个标签,所以它选择第一个标签(“上一页”)并返回上一页。

代码:

...
    paginationContainer = soup.find("div", {"class":"paginate-container"}).find_all('a')
    if len(paginationContainer) > 1:
        paginationContainer = paginationContainer[1]
    else:
        paginationContainer = paginationContainer[0]
...