You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 16:10:17