PHP调用维基百科API:单次请求获取多属性为何出现参数未识别警告?
问题描述
- 需求:用PHP通过单次维基百科API调用,获取随机文章的标题、前五句内容及主图。
- 现状:
- 分开调用两个API可分别拿到标题+前五句、主图;
- 合并两次调用的参数后,虽能返回图片,但抛出警告:
["warnings"] => array(1) {
["main"] => array(1) {
["*"] => string(67) "Unrecognized parameters: explaintext, exsectionformat, exsentences."
}
} - 三次调用的PHP代码:
第一次获取标题和前五句:
第二次获取主图:$url='https://en.wikipedia.org/w/api.php?action=query&prop=extracts&exsentences=5&explaintext=&exsectionformat=plain&format=json&pageids='.$item->id; $x=json_decode(file_get_contents($url), true); dump($x);
第三次合并参数调用:$url='https://en.wikipedia.org/w/api.php?action=query&prop=pageimages&pithumbsize=200&format=json&pageids='.$item->id; $x=json_decode(file_get_contents($url), true); dump($x);$url='https://en.wikipedia.org/w/api.php?action=query&prop=extracts&exsentences=5&explaintext=&exsectionformat=plain&format=json&prop=pageimages&pithumbsize=200&pageids='.$item->id; $x=json_decode(file_get_contents($url), true); dump($x);
错误原因
合并参数时重复声明了prop参数,维基百科API只会生效最后一个prop值(此处为pageimages),导致extracts相关的exsentences、explaintext等参数被判定为未识别,从而抛出警告,同时不会返回文本提取内容。
解决方案
维基百科API支持用竖线|分隔多个prop值,实现单次调用获取多个属性。修改后的API参数及对应PHP代码如下:
正确的API参数格式
action=query&prop=extracts|pageimages&exsentences=5&explaintext=&exsectionformat=plain&pithumbsize=200&format=json&pageids=目标页面ID
完整PHP代码
// 替换为目标页面ID $pageId = $item->id; $url = 'https://en.wikipedia.org/w/api.php?action=query&prop=extracts|pageimages&exsentences=5&explaintext=&exsectionformat=plain&pithumbsize=200&format=json&pageids=' . $pageId; // 发起请求并处理结果 $response = file_get_contents($url); if (!$response) { die('请求维基百科API失败'); } $data = json_decode($response, true); // 提取所需数据 if (isset($data['query']['pages'][$pageId])) { $pageInfo = $data['query']['pages'][$pageId]; $title = $pageInfo['title']; $content = $pageInfo['extract'] ?? '无可用文本内容'; $imgUrl = $pageInfo['thumbnail']['source'] ?? '无主图'; // 输出或使用数据 echo "标题:{$title}\n"; echo "前五句内容:{$content}\n"; echo "主图链接:{$imgUrl}\n"; } else { echo '未找到对应页面数据'; }
这样单次调用即可同时获取标题、前五句文本和主图,且不会出现参数警告。
内容的提问来源于stack exchange,提问作者user1106252
相关产品推荐
相关产品推荐

