Википедия с JSON - PullRequest
       8

Википедия с JSON

0 голосов
/ 25 февраля 2019
<?php
include 'index.php';

if (@$_GET['search']) {
    $url = "https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&titles=".ucwords($_GET['search'])."&redirects=true";
    $url = str_replace('', '%20', $url);

    if ($data = json_decode(@file_get_contents($url)))
    {   
        foreach ($data->query->pages as $key => $value) {
            $pageID = $key;
            break;
        }
        $content = $data->query->pages->$pageID->extract;
        echo $content;
    }
    }
?>

У меня есть код выше о получении содержимого результатов поиска в Википедии.Но проблема в том, что если я ввожу неправильное ключевое слово, такое как "makasia" вместо "Малайзия", оно не отображает связанные результаты или что-либо еще, что приводит к ошибке

"Неопределенное свойство: stdClass :: $ extract"

1 Ответ

0 голосов
/ 25 февраля 2019

Ваша проблема в том, что даже в случае сбоя поиска веб-сайт возвращает действительный JSON, поэтому вызов json_decode возвращает объект (который в логическом контексте является правдивым), что приводит к выполнению кода в вашем if заявление, давая вам ошибку, которую вы видите.Спасибо @Tgr за предоставление API-ссылки , которая указывает, как выглядят возвращаемые данные, когда страница отсутствует, этот код должен делать то, что вы хотите:

if (@$_GET['search']) {
    $url = "https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&titles=".ucwords($_GET['search'])."&redirects=true";
    $url = str_replace(' ', '%20', $url);

    $data = json_decode(file_get_contents($url));
    $found_data = false;
    foreach ($data->query->pages as $page) {
        if (property_exists($page, 'missing')) continue;
        $found_data = true;
        $content = $page->extract;
        echo $content;
    }
    if (!$found_data) {
        echo "No data for {$_GET['search']} found!";
    }
}
...