api请求参数被忽略
api request parameters are ignored
此代码按预期工作并显示 3 个最近的维基百科编辑。
我的问题是,如果我取消注释第二行 URL,我应该得到 Urmi27 三次或 None 如果用户未列出。
但是我得到了两个 URL 的相同列表。 api 请求是否忽略了“操作”?
import requests
S = requests.Session()
URL = "https://en.wikipedia.org/w/api.php"
#URL = "https://en.wikipedia.org/w/api.php?action=feedcontributions&user=Urmi27"
PARAMS = {
"format": "json",
"rcprop": "comment|loginfo|title|ids|sizes|flags|user",
"list": "recentchanges",
"action": "query",
"rclimit": "3"
}
R = S.get(url=URL, params=PARAMS)
DATA = R.json()
RECENTCHANGES = DATA['query']['recentchanges']
for rc in RECENTCHANGES:
print (rc['user'])
您在两个地方定义 GET 参数(在 URL 和 PARAMS
字典中)并且 API 优先考虑 PARAMS
query
和 feedcontributions
操作非常不同,使用不同的参数和不同的 return 格式。
要使用 feedcontributions
操作,您需要这样的东西:
import requests
import xml.etree.ElementTree as ET
S = requests.Session()
URL = "https://en.wikipedia.org/w/api.php"
PARAMS = {
"action":"feedcontributions",
"user":"Urmi27"
}
R = S.get(url=URL, params=PARAMS)
xml_tree = ET.fromstring(R.content)
for child in xml_tree:
print(child.tag, child.attrib)
for channel in child:
for elements in channel:
if elements.tag == "description":
print(elements.text)
此代码按预期工作并显示 3 个最近的维基百科编辑。
我的问题是,如果我取消注释第二行 URL,我应该得到 Urmi27 三次或 None 如果用户未列出。 但是我得到了两个 URL 的相同列表。 api 请求是否忽略了“操作”?
import requests
S = requests.Session()
URL = "https://en.wikipedia.org/w/api.php"
#URL = "https://en.wikipedia.org/w/api.php?action=feedcontributions&user=Urmi27"
PARAMS = {
"format": "json",
"rcprop": "comment|loginfo|title|ids|sizes|flags|user",
"list": "recentchanges",
"action": "query",
"rclimit": "3"
}
R = S.get(url=URL, params=PARAMS)
DATA = R.json()
RECENTCHANGES = DATA['query']['recentchanges']
for rc in RECENTCHANGES:
print (rc['user'])
您在两个地方定义 GET 参数(在 URL 和 PARAMS
字典中)并且 API 优先考虑 PARAMS
query
和 feedcontributions
操作非常不同,使用不同的参数和不同的 return 格式。
要使用 feedcontributions
操作,您需要这样的东西:
import requests
import xml.etree.ElementTree as ET
S = requests.Session()
URL = "https://en.wikipedia.org/w/api.php"
PARAMS = {
"action":"feedcontributions",
"user":"Urmi27"
}
R = S.get(url=URL, params=PARAMS)
xml_tree = ET.fromstring(R.content)
for child in xml_tree:
print(child.tag, child.attrib)
for channel in child:
for elements in channel:
if elements.tag == "description":
print(elements.text)