Перейти к содержимому

Фотография
- - - - -

Поиск по XML плейлисту


  • Вы не можете создать новую тему
  • Закрытая тема Тема закрыта
В этой теме нет ответов

#1 rychuril

rychuril

    Прохожий

    Топикстартер
  • Новичок
  • 0
    1 сообщ.

Отправлено 12 Апрель 2018 в 17:27

Добрый день, помогите, мне нужен поис который будет в XML плейлисте искать по названию канала, и выводить результат в новом файле. Для примера

 

Фаил в котором будет проводиться поиск

<?xml version="1.0" encoding="UTF-8" ?>   <items>   <playlist_name>НОВИНКИ</playlist_name>   <options>   <playlist_limits>nosavefav,no_save_fav,no_save_playlist</playlist_limits>   </options>               <channel>   <title>   <![CDATA[ Место встречи ]]></title>   <logo><![CDATA[   https://st.kp.yandex.net/images/film_big/1059224.jpg]]></logo>   <stream_url><![CDATA[ http://50.7.127.154/s/9921ed8e41808697c8167b96c0d98457/hd_30/The.Place.2017.D.iTunes.BluRay.Remux.1080i_720.mp4 ]]> </stream_url>   <description>   <![CDATA[<table> <h2>Место встречи</h2> <p><img height="235" src="   https://st.kp.yandex.net/images/film_big/1059224.jpg" style=" float: left; margin-right: 5px; margin-bottom: 5px; border-width: 0px; border-style: solid;" width="160">   <b>Год:</b> 2017<br>   <b>Рейтинг КиноПоиск:</b> 7.4<br>   <b>Страна:</b>Италия<br>   <b>Жанр:</b> драма, комедия<br> <p><hr>   <b>Описание:</b> Девять человек приходят в одно и то же место на встречу к таинственному Незнакомцу в надежде, что он исполнит их сокровенные желания. Загадочный мужчина может претворить в жизнь всё, что они захотят. Но за определенную цену… В обмен на осуществление мечты, каждому из гостей предлагается выполнить необычные задания. Чем сложнее исполнение этой мечты, тем выше цена. Каждый из героев должен сделать свой выбор — как далеко он готов зайти, чтобы получить желаемое. И так ли случайны судьбы посетителей этого места встречи?   </p>]]>   </description>
</channel>

...

</items>

вместо ... понятно, будут еще каналы.

В другой плейлист мы вставляем команду

<channel>
<logo></logo>
<title><![CDATA[Поиск]]></title>
<playlist_url><![CDATA[http://domen/media/search.php]]></playlist_url>
<description><![CDATA[<table style="width:100%;font-size:32px;text-align:left;">
<tr>
<td>
<font color="#0000ee">
<b>Поиск по названию</b>
</font>
</td>
</tr>
</table>]]></description> 
<search_on>search</search_on>
</channel>

текст файла PHP 

<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Content-type: application/xml; charset=UTF-8');

$searchValue = "";
if (isset($_GET['search'])) {
    $searchValue = $_GET['search'];
}

function openXML() {
// open xml file
$inputFile = new DOMDocument();
$inputFile->load("test.xml"); 
// return opened file
return $inputFile;
}

$outputXml = new DOMDocument("1.0", "UTF-8");
$outputXml->formatOutput = true;
$xml_items = $outputXml->createElement('items');
$outputXml->appendChild($xml_items);

function addChannelInfo($fTitle, $fLogo, $fDescription, $fStream_url) {
    global $outputXml;
    global $xml_items;
    // create channel
    $xml_channel_node = $outputXml->createElement('channel');
    $xml_items->appendChild($xml_channel_node);

    // create title
    $xml_title_node = $outputXml->createElement('title');
    $xml_channel_node->appendChild($xml_title_node);
    $xml_title_CData = $outputXml->createCDATASection("$fTitle");
    $xml_title_node->appendChild($xml_title_CData);

    // create logo
    $xml_logo_node = $outputXml->createElement('logo');
    $xml_channel_node->appendChild($xml_logo_node);
    $xml_logo_CData = $outputXml->createCDATASection("$fLogo");
    $xml_logo_node->appendChild($xml_logo_CData);

    // create description
    $xml_description_node = $outputXml->createElement('description');
    $xml_channel_node->appendChild($xml_description_node);
    $xml_description_CData = $outputXml->createCDATASection("$fDescription");
    $xml_description_node->appendChild($xml_description_CData);

    // create stream_url
    $xml_stream_url_node = $outputXml->createElement('stream_url');
    $xml_channel_node->appendChild($xml_stream_url_node);
    $xml_stream_url_CData = $outputXml->createCDATASection("$fStream_url");
    $xml_stream_url_node->appendChild($xml_stream_url_CData);
}

$EMPTY_FIELD = 'Пустая строка';
$LOW_VALUE = 'Строка меньше 4-х символов';
$NOT_FOUND = 'Ничего не найдено';
function getErrorMessage($typeErrorMessage) {
    global $searchValue;
    
    function getStyleErrorMessage($errorMessageText) {
        return "<table style=\"width:100%;font-size:32px;text-align:left;\"><tr><td><font color=\"#0000ee\"><b>$errorMessageText</b></font></td></tr></table>";
    }
    
    $messageIfEmptyValue = "Введена пустая строка. Вернитесь назад и измените текст поиска.";
    $messageIfLowValue = "Текст \"$searchValue\" содержит меньше 4-х символов. Вернитесь назад и измените текст поиска.";
    $messageIfNotFound = "Не могу найти текст \"$searchValue.\" Вернитесь назад и измените текст поиска.";
    $errorMessage = "";
    
    switch ($typeErrorMessage) {
        case 'Пустая строка':
            return getStyleErrorMessage($messageIfEmptyValue);
        case 'Строка меньше 4-х символов':
            return getStyleErrorMessage($messageIfLowValue);
        case 'Ничего не найдено':
            return getStyleErrorMessage($messageIfNotFound);
        default:
            return 'Что-то пошло не так';
    }
}

if ($searchValue == "") {
    addChannelInfo($EMPTY_FIELD, '', getErrorMessage($EMPTY_FIELD), '');
}
else if (iconv_strlen($searchValue) < 4) {
    addChannelInfo($LOW_VALUE, '', getErrorMessage($LOW_VALUE), '');
}
else {
    $searchResult = false;
    $inputXml = openXML();
    $channels = $inputXml->getElementsByTagName('channel');
    foreach($channels as $channel) {
        $titles = $channel->getElementsByTagName('title');
        $stringTitle = $titles->item(0)->nodeValue;
        $stringTitleSearch = mb_strtolower($stringTitle, "UTF-8");
        
        $logos = $channel->getElementsByTagName('logo');
        $stringLogo = $logos->item(0)->nodeValue;
        $stringLogoSearch = mb_strtolower($stringLogo, "UTF-8");
        
        $descriptions = $channel->getElementsByTagName('description');
        $stringDescription = $descriptions->item(0)->nodeValue;
        $stringDescriptionSearch = mb_strtolower($stringDescription, "UTF-8");
        
        $stream_urls = $channel->getElementsByTagName('stream_url');
        $stringStream_url = $stream_urls->item(0)->nodeValue;
        $stringStream_urlSearch = mb_strtolower($stringStream_url, "UTF-8");
        
        $searchValueSearch = mb_strtolower($searchValue, 'UTF-8');
        
        $substr_count = substr_count($stringTitleSearch, $searchValueSearch);
        if ($substr_count != 0) {
            addChannelInfo($stringTitle, $stringLogo, $stringDescription, $stringStream_url);
            $searchResult = true;
        }
    }
    if ($searchResult == false) {
        addChannelInfo($NOT_FOUND, "", getErrorMessage($NOT_FOUND), "");
    }
}
$outputSimpleXml = simplexml_import_dom($outputXml);
print ($outputSimpleXml->asXML());
?>

В самом PHP файле есть test.xml. Это название вашего плэйлиста. Туда добавляете полный путь к нужному файлу.
После того как в ТВ или приставке выбираете поиск и вводите какое название, на ссылку прилетает следующее:
 
http://domen/media/search.php?search="То что вы ввели" 
Вот по search и ищется внутри xml.

 

В итоге должен создаться файл с результатом поиска и подгрузиться а этого не происходит. поправьте что не так, я полный (0) в этом

 

Материал взял с https://ottplayer.es...sk-v-ottplayer/


Сообщение отредактировал BaNru: 12 Апрель 2018 в 17:33
Для вставки кода есть кнопочка BBCODE

  • 0

Спонсор



Похожие темы Свернуть

Статистика

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей