Github API 搜索代码,JSON 中缺少项目

Github API search code, missing items in JSON

提问人:BooRuleDie 提问时间:9/23/2022 最后编辑:Brian Tompsett - 汤莱恩BooRuleDie 更新时间:9/15/2023 访问量:98

问:

我一直在尝试构建一个工具,该工具需要获取 GitHub 代码搜索结果的所有文件的 URL。例如,当您转到此处并搜索 .你会看到有 381 个代码结果,我想获取所有这些 381 个文件的 URL。uber.com api_key

为此,我学习了如何使用 GitHub API V3 并制作了以下函数:

def fetchItems(search, GITHUB_API):   
    
    items = set()
    response = {"items":[1]}
    pageNumber = 1
    
    while(response["items"]):
        
        sleep(3) # trying to avoid rate limit, not successful though :(

        url = "https://api.github.com/search/code"
        params = {
            "q" : search,
            "per_page" : 30, # default value, it can be increased to 100
            "page" : pageNumber
        }  
        headers = {
            "Accept" : "application/vnd.github+json",
            "Authorization" : f"Bearer {GITHUB_API}"
        }

        r = requests.get(url=url, headers=headers, params=params, verify=False)
        
        if r.status_code == 403: # if we exceed the rate limit, sleep until rate limit get reseted
            epochReset = int(r.headers["X-Ratelimit-Reset"])
            epochNow = time()

            if epochNow < epochReset:
                sleep((epochReset - epochNow) + 1)
            
            sleep(1)
            continue
        
        response = json.loads(r.text)
    
        for file in response["items"]:
            items.add(file["html_url"])
        
        pageNumber += 1
    
    return items

page变量指示每个页面中将返回的项目数,page 是页面:)。通过增加每个请求中的页码,您应该能够根据我的理解获得所有项目。

但是,当我打开数据库并检查已写入的项目时,我发现只有 377 个文件,因此缺少 4 个文件:

here.

我检查了数据库编写器功能,我确信这没有任何问题。GitHub API 是否在 JSON 中返回缺失的项目,或者我做错了什么?

python json rest github-api-v3

评论

0赞 Jeremy Fiel 9/15/2023
您正在创建一个仅接受唯一条目的条目。我想知道他们中的一些人是否是骗子并被集合过滤了。set()

答:

1赞 Robert J. Walker 9/15/2023 #1

一种可能性是,为 GitHub 终结点提供支持的索引仅索引小于 384 KB 的文件。如果您在网站上搜索时发现的任何文件太大,它们将不会显示在您的回复中。/search/code