【问题标题】:Using Github API to Get All Members with Python使用 Github API 通过 Python 获取所有成员
【发布时间】:2020-06-18 01:52:20
【问题描述】:

我正在尝试获取 Github 组织中的所有成员。我们有大约 4K。

使用文档here,我正在尝试翻阅结果,但它没有遍历结果页面。

代码如下:

from dotenv import load_dotenv, find_dotenv
import json
import requests
import os

load_dotenv(find_dotenv())

headers = {
    "authorization": f"{os.getenv('github_token')}",
    "content-type": "application/json"
}


query_url = "https://api.github.com/orgs/<name of Org>/members?page="

members = [ ]

page_no = 1

loop_control = 0
while loop_control == 0:
    url = query_url + str(page_no)

    request = requests.get(url, headers=headers)

    print(url)
    print(request.status_code)

    response = request.json()

    print(len(response))

    for i in response:
        members.append(i)

    if len(response) == 30:
        page_no += 1
    elif len(response) < 30: 
        loop_control = 1
        with open('data/github/response.json', 'w') as file:
            print(len(members))
            json.dump(members, file)

使用代码,它会抓取前 30 个结果,然后抓取 7 个作为结果的第 2 页。

有什么想法吗?

【问题讨论】:

    标签: python python-3.x pagination github-api


    【解决方案1】:

    检查脚本的两件事:

    • 确保令牌与属于组织成员的帐户相关联
    • 确保您的令牌具有read:org 范围集

    如果不满足这些条件之一,脚本将仅查看具有组织公共成员资格的用户,这将解释您所看到的数字差异。

    为了同时提高脚本性能,您可以添加一个 per_page=100 查询字符串参数,以便每次 API 调用获得 100 个结果,而不是默认的 30 个。这在 API 文档的 Pagination 部分中有记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      • 2021-10-20
      相关资源
      最近更新 更多