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

Статус
Закрыто для дальнейших ответов.

rychuril

Новичок
Регистрация
12.04.2018
Сообщения
1
Добрый день, помогите, мне нужен поис который будет в 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/forum/topic/396-poisk-v-ottplayer/
 
Статус
Закрыто для дальнейших ответов.
Верх Низ