- 我所知道的
- 使用
curl
从维基数据API获取数据 - 使用jQuery从维基数据API获取数据
- 问题是
- 这个问题
我所知道的
使用curl
从维基数据API获取数据
我知道可以通过维基数据API获取维基数据条目的数据。下面的代码块显示了一个shell命令,该命令使用curl来获取维基数据项Q549037
的数据。
$ curl -s 'https://www.wikidata.org/w/api.php?format=json&action=wbgetentities&ids=Q549037'
$ curl -s 'https://www.wikidata.org/w/api.php?format=json&action=wbgetentities&ids=Q549037' | jq | head -n 10
{
"entities": {
"Q549037": {
"pageid": 517337,
"ns": 0,
"title": "Q549037",
"lastrevid": 1899479542,
"modified": "2023-05-19T21:53:09Z",
"type": "item",
"id": "Q549037",
使用jQuery从维基数据API获取数据
我还知道可以使用jQuery来完成同样的工作。下面的代码块显示了使用Jquery获取维基数据项Q549037
的数据的HTML代码。
<body>
<p>This is a paragraph.</p>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script>
$.ajax({
url: 'https://www.wikidata.org/w/api.php?format=json&action=wbgetentities&ids=Q549037',
dataType: 'jsonp'
})
.done(function(data) {
if (console && console.log)
console.log(data)
})
</script>
</body>
型
下面的屏幕截图显示了Mozilla Firefox 113.0和打开的控制台,其中显示了通过Wikidata API获得的数据。
的数据
问题是
我现在尝试使用JavaScript查询维基数据,但不使用Jquery。下面的代码块显示了我所写的内容。
<script>
const myHeaders = new Headers()
myHeaders.append("Access-Control-Allow-Origin", "*")
const request = new Request('https://www.wikidata.org/w/api.php?format=json&action=wbgetentities&ids=Q549037', {
method: "GET",
headers: myHeaders
})
fetch(request)
.then((response) => {
if (response.status === 200) {
return response.json();
} else {
throw new Error("Something went wrong on API server!");
}
})
.then((response) => {
console.debug(response);
})
.catch((error) => {
console.error(error);
})
</script>
型
在Mozilla Firefox 113.0中,此操作失败,并显示以下错误
- 错误1:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at <https://www.wikidata.org/w/api.php?format=json&action=wbgetentities&ids=Q549037
个 - 错误2:
(Reason: CORS header ‘Access-Control-Allow-Origin’ missing). Status code: 200.
个 - 错误3:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at <https://www.wikidata.org/w/api.php?format=json&action=wbgetentities&ids=Q549037>. (Reason: CORS request did not succeed). Status code: (null). > TypeError: NetworkError when attempting to fetch resource.
个
下面的屏幕截图显示了Mozilla Firefox 113.0,其中显示了上面提到的错误。
的
问题是
我做错了什么?我希望能够使用JavaScript查询Wikidata,而不必使用Jquery这样的大型库。
1条答案
按热度按时间pvcm50d11#
您需要将
&origin=*
添加到您的请求URL。请参见API:跨站请求§未经身份验证的CORS请求。