首页 > 解决方案 > 用 PHP 解析 Wikipedia API

问题描述

我有一个 PHP 脚本,它从 Wikipedia API 检索 JSON 结果并将其存储在 $json 变量中,然后我将其 json 解码为 $data:

<?php

$q = htmlspecialchars(($_GET["q"]));

$url = 'https://en.wikipedia.org/w/api.php?action=query&list=search&srnamespace=0&srprop=snippet&format=json&callback=json&origin=*&prop=links|extracts|categories|images&srsearch=test';
$json = file_get_contents($url);

/*
print "<pre>";print_r($json);print "</pre>";
*/

$data = json_decode($json,true);
echo $data['query']['search'][0]['title'];

这会检索 JSON 文件,但我无法使用它。我需要提取标题标签并像这样回应它不会做任何事情。

echo $data['query']['search'][0]['title'];

知道如何更正我的代码以检索以下标题标签:

在此处输入图像描述

标签: phpparsingwikipedia-api

解决方案


&callback=json从您的网址中删除。这是对JSONP的请求(讽刺性的维基百科链接)。它使用 JavaScript 回调函数包装响应,因此您在 PHP 中需要的不仅仅是 JSON,而是

/**/json(THE JSON HERE)

您可以在页面源中看到它,即使它在页面上显示为 JSON。那些额外的角色正在json_decode失败。该参数更多用于来自 JS 的跨域请求。

看起来您已经在正确访问结果数组了

echo $data['query']['search'][0]['title'];

当您尝试访问这些数组键时,您可能会认为它会给您某种警告或通知$data,但它不会


推荐阅读