如何使用Signature或User ID获取用户信息?
How to use Signature or User ID to get user's information?
我是 Wikimedia 的初学者,我正在使用 Wiki API 来完成我的项目。我的数据集如下所示:
rev_id | comment | timestamp | page_id | page_title | user_id | user_text
-- -- -- -- -- -- -- -- -- -- -- --
352194497 | Welcome to Wikipedia | 2010-03-26T18:16:48Z | 26709696 | 116.197.206.138 | 8356162 | Mlpearc
我正在尝试查找这些评论海报的一些用户信息。但是,我发现这里的 "user_text" 不是用户名而是签名。如果我用官方的API demos get_users.py
来获取信息,结果是错误的,因为有些签名里面有space,但是用户名都是一个单词。就像在下面的代码中,我可以使用 Catrope|Bob
获取 Catrope 和 Bob 的信息。但是如果我使用Catrope|Tide rolls
,它不起作用,如果Tide rolls是签名。
import requests
S = requests.Session()
URL = "https://en.wikipedia.org/w/api.php"
PARAMS = {
"action": "query",
"format": "json",
"list": "users",
"ususers": "Catrope|Tide rolls",
"usprop": "blockinfo|groups|editcount|registration|emailable|gender"
}
R = S.get(url=URL, params=PARAMS)
DATA = R.json()
USERS = DATA["query"]["users"]
for u in USERS:
print(str(u["name"]) + " has " + str(u["editcount"]) + " edits.")
所以我的问题是,有什么办法可以通过使用API的签名获取用户信息吗?并且由于我们这里还有 page_id 和 user_id,这些信息会有帮助吗?非常感谢您!
更新:我在这里使用 Bob Ben
作为假 ID。现在它被一个真正的取代了。问题用_代替space解决了。(感谢AXO提醒)
你没有提到你得到的错误和回溯。只要用户名存在,代码示例就应该可以正常工作,即使用户名中包含 space。
但是user account "Bob Ben" is not registered。在这种情况下,API 回复 {'name': 'Bob Ben', 'missing': ''}
。
所以你的代码可能是:
for u in USERS:
if 'missing' not in u:
print(u["name"] + " has " + str(u["editcount"]) + " edits.")
else:
print(u["name"], "is not registered.")
顺便说一句,如果出于某种原因您不想使用 space,您可以使用 _
(下划线)代替。 A blank space is equivalent with an underscore.
关于"user information",我不确定您要查找的是哪种信息。根据API:Users one may get blockinfo|groups|groupmemberships|implicitgroups|rights|editcount|registration|emailable|gender|centralids|cancreate
using the usprop
parameter. But if some other information, for example the information on the user page, is to be fetched, then you'll perhaps need to use one of the methods mentioned in API:Get the contents of a page得到用户页面的内容然后写程序去寻找你需要的信息
我是 Wikimedia 的初学者,我正在使用 Wiki API 来完成我的项目。我的数据集如下所示:
rev_id | comment | timestamp | page_id | page_title | user_id | user_text
-- -- -- -- -- -- -- -- -- -- -- --
352194497 | Welcome to Wikipedia | 2010-03-26T18:16:48Z | 26709696 | 116.197.206.138 | 8356162 | Mlpearc
我正在尝试查找这些评论海报的一些用户信息。但是,我发现这里的 "user_text" 不是用户名而是签名。如果我用官方的API demos get_users.py
来获取信息,结果是错误的,因为有些签名里面有space,但是用户名都是一个单词。就像在下面的代码中,我可以使用 Catrope|Bob
获取 Catrope 和 Bob 的信息。但是如果我使用Catrope|Tide rolls
,它不起作用,如果Tide rolls是签名。
import requests
S = requests.Session()
URL = "https://en.wikipedia.org/w/api.php"
PARAMS = {
"action": "query",
"format": "json",
"list": "users",
"ususers": "Catrope|Tide rolls",
"usprop": "blockinfo|groups|editcount|registration|emailable|gender"
}
R = S.get(url=URL, params=PARAMS)
DATA = R.json()
USERS = DATA["query"]["users"]
for u in USERS:
print(str(u["name"]) + " has " + str(u["editcount"]) + " edits.")
所以我的问题是,有什么办法可以通过使用API的签名获取用户信息吗?并且由于我们这里还有 page_id 和 user_id,这些信息会有帮助吗?非常感谢您!
更新:我在这里使用 Bob Ben
作为假 ID。现在它被一个真正的取代了。问题用_代替space解决了。(感谢AXO提醒)
你没有提到你得到的错误和回溯。只要用户名存在,代码示例就应该可以正常工作,即使用户名中包含 space。
但是user account "Bob Ben" is not registered。在这种情况下,API 回复 {'name': 'Bob Ben', 'missing': ''}
。
所以你的代码可能是:
for u in USERS:
if 'missing' not in u:
print(u["name"] + " has " + str(u["editcount"]) + " edits.")
else:
print(u["name"], "is not registered.")
顺便说一句,如果出于某种原因您不想使用 space,您可以使用 _
(下划线)代替。 A blank space is equivalent with an underscore.
关于"user information",我不确定您要查找的是哪种信息。根据API:Users one may get blockinfo|groups|groupmemberships|implicitgroups|rights|editcount|registration|emailable|gender|centralids|cancreate
using the usprop
parameter. But if some other information, for example the information on the user page, is to be fetched, then you'll perhaps need to use one of the methods mentioned in API:Get the contents of a page得到用户页面的内容然后写程序去寻找你需要的信息