使用GitHub API检查用户是否存在

3

我正在使用Python和GitHub API。我想要验证用户是否存在。

url = f"https://api.github.com/users/{username}"

r = requests.get(url.format(username)).json()

我想知道当“用户名”不存在时,GitHub API会返回什么。我知道它会返回一个未找到的错误消息,但它作为Python会返回什么?我该如何进行验证?

4个回答

2
一种替代方案,不依赖于响应正文,而是仅检查响应状态码
在REST语义中,用户是一种资源。
如果用户不存在,则我们期望响应状态码404 - 未找到。
Github API Docs-获取用户中有记录。
演示:
>>> import requests

>>> r = requests.get('https://api.github.com/users/vineetvdubey')
>>> r.status_code
200

>>> r = requests.get('https://api.github.com/users/non-existing-user__')
>>> r.status_code
404

2
它返回一个JSON对象,其中包含以下错误消息:
{
  "message": "Not Found",
  "documentation_url": "https://developer.github.com/v3/users/#get-a-single-user"
}

您可以在响应r中查找“消息”关键字,并检查其值是否为“未找到”,以确定用户是否不存在。

简而言之:

url = f"https://api.github.com/users/{username}"
r = requests.get(url.format(username)).json()
if "message" in r:
    if r["message"] == "Not Found":   # Just to be double sure
        print ("User does not exist.")

编辑:如果你好奇,我刚刚尝试了一堆随机的用户名,很快就找到了一个不存在的。这就是我找到这个响应的方式。尝试使用https://api.github.com/users/llllaaa


1
在Python中,你得到的是一个映射。查找r['login'],如果这个值不存在,那么说明你提供的用户名是有效的。所以你可以像这样抛出一些try catch。
import requests

def checkUser(user):
    url = f"https://api.github.com/users/{user}"
    r = requests.get(url.format(user)).json()
    try:
        return r['login']
    except:
        return 'No User'


print(checkUser('raja-ravi-prakash'))

这是一个公平的解决方案。唯一的问题是,在try块中可能会出现许多错误。在这种情况下,程序将输出“'No User'”,无论引发了什么异常。例如,断开的互联网连接也会返回“'No User'”。这并不是理想的! :) - Prateek Dewan
也许我应该在try catch之外排除URL行和R行。 - Ravi Prakash

1

所以,我回答了自己的问题。

对我来说最有效的方法,也是在任何情况下都最有效的方法,是通过计算并验证它返回的字典的长度

length = len(r)

如果“长度”等于2,则用户名不存在。 否则: 用户名存在。

因为当未找到用户名时,API返回的错误消息的格式为:

{
  "message": "Not Found",
  "documentation_url": "https://developer.github.com/v3/users/#get-a-single-user"
}

正如上面/下面的回答中@PrateekDewan提到的那样。

因此,使用返回的字典/映射的长度进行计算和验证可以是一个简短而简单的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接