<MyRusakov.ru />

Создание сайтов на Django

Создание сайтов на Django

Данный курс научит Вас создавать сайты на очень мощном фреймворке – Django. Курс состоит из 9 разделов, в которых Вы с нуля освоите данный фреймворк на примере создания полноценного Интернет-магазина.

В рамках многочисленных упражнений Вы так же создадите свой собственный сайт, что даст Вам ту необходимую практику для закрепления материала, а также полноценную серьёзную работу для своего портфолио.

Помимо самого курса Вас ждёт ещё и бесплатный ценный Бонус: «Unit-тестирование сайта на Django». В этом Бонусе Вы узнаете, как можно написать автоматические тесты для проекта на Django. Это позволит находить оперативно ошибки, а также даст возможность в будущем добавлять новый функционал, не боясь что-то сломать в старом.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Зачем Вы изучаете программирование/создание сайтов?

Конвертирование 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 ресурса. Дальше этот сервис можно разместить на хостинге, например, и использовать его в других приложениях.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.