是否有维基百科 api 调用可以检索文章的限制状态?

is there a wikipedia api call that can retrieve restriction status of the article?

否则我必须在页面内容上执行 querySelector 以查找是否有某种挂锁,并通过尝试和错误检查该图标的独特之处(id 或 class)。

要查找的其他来源是此信息是通过将 $action=info 添加到 url 参数进入信息页面。但是另一个问题是保护状态是用特定的 wiki 语言编写的。

使用API是正确的方法,但你需要使用action=query。挂锁图标在 wiki 之间不一致,大多数 wiki 甚至可能没有它们。

如果您为 API 查询使用正确的参数,您应该会得到想要的结果。

英文维基百科示例: https://en.wikipedia.org/w/api.php?action=query&prop=info&format=json&inprop=protection&titles=Elton%20John 给你这个结果:

{
    "batchcomplete": "",
    "query": {
        "pages": {
            "5052197": {
                "pageid": 5052197,
                "ns": 0,
                "title": "Elton John",
                "contentmodel": "wikitext",
                "pagelanguage": "en",
                "touched": "2015-10-02T03:49:24Z",
                "lastrevid": 683730854,
                "length": 115931,
                "protection": [
                    {
                        "type": "edit",
                        "level": "autoconfirmed",
                        "expiry": "infinity"
                    },
                    {
                        "type": "move",
                        "level": "sysop",
                        "expiry": "infinity"
                    }
                ],
                "restrictiontypes": [
                    "edit",
                    "move"
                ]
            }
        }
    }
}

这里的 protection 数组告诉你只有 sysop 人可以移动页面,只有 autoconfirmed 用户可以编辑它。

如果您在另一个 wiki 上进行类似查询,比如法语维基百科:https://fr.wikipedia.org/w/api.php?action=query&prop=info&format=json&inprop=protection&titles=Malia%20Obama,您会得到这样的响应(修剪):

"protection": [
    {
        "type": "edit",
        "level": "sysop",
        "expiry": "infinity"
    },
    {
        "type": "move",
        "level": "sysop",
        "expiry": "infinity"
    }
],
"restrictiontypes": [
    "edit",
    "move"
]

在这种情况下,只有 sysop 可以移动 编辑页面。