使用Github API提取用户邮箱地址

0 投票
1 回答
52 浏览
提问于 2025-04-14 18:26

我有一个Python函数,它通过Github的API来获取仓库中的问题(也就是issues),我想用这个函数提取那些关闭和打开这些问题的用户的邮箱。我尝试了下面的代码,但它没有效果(提取出来的结果是空的)。有没有办法做到这一点呢?

def extract_issues(repo_url, access_token):
try:
g = Github(access_token)

    # Extract username and repository name from the URL
    repo_url_parts = repo_url.strip('/').split('/')
    username, repo_name = repo_url_parts[-2:]

    repo = g.get_repo(f"{username}/{repo_name}")

    issues_data = []
    for issue in repo.get_issues(state='all'):
        issue_comments = issue.get_comments()

        opened_by = issue.user.login if issue.user else None
        opened_by_email = None
        if issue.user:
            user = g.get_user(issue.user.login)
            opened_by_email = user.email

        issue_data = {
            'id': issue.number,
            'title': issue.title,
            'description': issue.body,
            'state': issue.state,
            'created_at': issue.created_at.strftime('%Y-%m-%d %H:%M:%S'),
            'closed_at': issue.closed_at.strftime('%Y-%m-%d %H:%M:%S') if issue.closed_at else None,
            'closed_by': issue.closed_by.login if issue.closed_by else None,
            'closer_mail': issue.closed_by.email if issue.closed_by.email else "not closed",
            'opened_by': opened_by,
            'opener_mail': opened_by_email,
            'comments': [{'author': comment.user.login,
                          'comment_date': comment.created_at.strftime('%Y-%m-%d %H:%M:%S'),
                          'comment_text': comment.body} for comment in issue_comments]
        }
        issues_data.append(issue_data)

    return issues_data
except Exception as e:
    print(f"An error occurred: {str(e)}")
    return None

1 个回答

0

根据GitHub API的说明,如果你查询的用户没有设置公开邮箱,或者你没有提供可以读取用户邮箱的令牌,那么email字段会返回null

请仔细检查一下你的令牌是否有权限读取用户的邮箱,并确保你查询的用户已经设置了公开邮箱。

撰写回答