Конвертирование XML в JSON на PHP 8

Конвертирование XML в JSON на PHP 8

Конвертирование XML в JSON на PHP 8

Доброго времени суток! В данной статье мы рассмотрим с Вами, как можно создать простой сервис, единственной задачей
которого будет конвертирование xml файла в json. Сервис будет принимать ссылку на XML файл и возвращать преобразованный
ответ в формате JSON
. Где это может пригодиться? Например, с помощью данного простого сервиса я сделал преобразование
RSS ленты, которая представляет из себя XML, в JSON формат на сервере, ответ с которого потом передавался в Android
приложение
и выводился пользователю в интерфейсе.

Итак, приступим к коду. Основной функционал сервиса будет находиться в файле functions.php.



<?php



declare(strict_types=1);



// отформатированный вывод json

function util_json(mixed $value): bool|string

{

    return json_encode($value, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);

}





// CORS заголовки, чтобы можно было запрашивать сервис посредством fetch в браузере

function cors(): void

{

    header('Access-Control-Allow-Origin: *');

    header('Access-Control-Allow-Methods: GET, POST');

    header('Access-Control-Max-Age: 1000');

    header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');

    header('Content-Type: application/json');

}





// отформатированный код ответа при ошибке

function error_response(string $message, int $code = 501): bool|string

{

    $responseMessage = ['code' => $code, 'error' => $message];

    return util_json($responseMessage);

}





/**

 * Сам конвертер - центральный элемент сервиса

 * 

 * @throws Exception

 */

function convertXml2Json(string $xmlUrl): bool|string

{

    // пытается загрузить ресурс по ссылке и преобразовать

    $element = @simplexml_load_file($xmlUrl, options: LIBXML_NOCDATA);



    // если ссылка не может быть загружена или возникла какая-то другая проблема - бросаем исключение

    if(!$element) {

        throw new Exception('Unable to parse xml resource from ' . $xmlUrl);

    }



    // форматируем в json

    return util_json($element->channel);

}







// обработчик запроса от клиента

function process_request(array $request_data, string $apiKey): string|bool

{

    $response_text = '';



    try {

        // если запрос содержит ключ авторизации и он равен нашему ключу $apiKey

        if($request_data['key'] === $apiKey)

        {

            // если в запросе передан правильный url ресурса

            if(!empty($request_data['resource']) && (filter_var($request_data['resource'], FILTER_VALIDATE_URL) !== false))

            {

                // выполняем конвертацию

                $response_text = convertXml2Json($request_data['resource']);

            }

            else

            {

                $response_text = error_response('Invalid url of xml resource');

            }

        }

        else

        {

            $response_text = error_response('Wrong access key');

        }





    }

    catch (Exception $e) {

        $response_text = error_response($e->getMessage());

    }





    return $response_text;

}



Файл index.php



<?php



require_once ('functions.php');





$url = "https://news.yandex.ru/internet.rss";

$apiKey = "API_KEY";



// данный запроса: resource -> url, key -> key

$mockGET = ['resource' => $_GET['url'] ?: $url, 'key' => $_GET['key']];





// отправляем заголовки

cors();

// и результат

print process_request($mockGET, $apiKey);





Протестировать на локальном ПК можно так:



php -S localhost:8080 index.php



Открываете в браузере адрес:



http://localhost:8080/?key=API_KEY



В результате получим JSON представление XML ресурса. Дальше этот сервис можно разместить на хостинге, например,
и использовать его в других приложениях.

Источник

НЕТ КОММЕНТАРИЕВ

Оставить комментарий