За последние 24 часа нас посетили 37819 программистов и 7849 роботов. Сейчас ищут 1777 программистов ...

Как вытащить url из enclosure?

Тема в разделе "PHP для новичков", создана пользователем Arcadiy, 15 июн 2023.

Метки:
  1. Arcadiy

    Arcadiy Активный пользователь

    С нами с:
    3 янв 2016
    Сообщения:
    23
    Симпатии:
    0
    Код формы
    Код (Text):
    1. <form>
    2. <input type="text" size="30" onkeyup="showResult(this.value)" placeholder="Товар ...">
    3. <div id="livesearch"></div>
    4. </form>
    Код
    JS
    Код (Text):
    1. function showResult(str) {
    2.   if (str.length==0) {
    3.   document.getElementById("livesearch").innerHTML="";
    4. document.getElementById("livesearch").style.border="0px";
    5.     return;
    6. }
    7.   var xmlhttp=new XMLHttpRequest();
    8. xmlhttp.onreadystatechange=function() {
    9.     if (this.readyState==4 && this.status==200) {
    10.     document.getElementById("livesearch").innerHTML=this.responseText;
    11. document.getElementById("livesearch").style.border="1px solid #A5ACB2";
    12. }
    13. }
    14. xmlhttp.open("GET","livesearch.php?q="+str,true);
    15. xmlhttp.send();
    16. }
    livesearch.php
    Код (Text):
    1. <?php
    2. $xmlDoc=new DOMDocument();
    3. $xmlDoc->load("rss.xml");
    4.  
    5. $x=$xmlDoc->getElementsByTagName('link');
    6.  
    7. //получить параметр q из URL
    8. $q=$_GET["q"];
    9.  
    10. //поиск всех ссылок из XML файла, если длина q>0
    11. if (strlen($q)>0) {
    12.   $hint="";
    13.   for($i=0; $i<($x->length); $i++) {
    14.    
    15.     $y=$x->item($i)->getElementsByTagName('title');
    16.     $z=$x->item($i)->getElementsByTagName('url');
    17.      $f=$x->item($i)->getElementsByTagName('description');
    18.     if ($y->item(0)->nodeType==1) {
    19.       //найти ссылку, соответствующую тексту поиска
    20.       if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q)) {
    21.         if ($hint=="") {
    22.           $hint="
    23.           <a href='" .
    24.        
    25.           $z->item(0)->childNodes->item(0)->nodeValue .
    26.           "' target='_blank'>" .
    27.      
    28.           $y->item(0)->childNodes->item(0)->nodeValue . "</a><br>" .
    29.                $f->item(0)->childNodes->item(0)->nodeValue;
    30.              } else {
    31.           $hint=$hint . "<br /><a href='" .
    32.           $z->item(0)->childNodes->item(0)->nodeValue .
    33.           "' target='_blank'>" .
    34.           $y->item(0)->childNodes->item(0)->nodeValue . "</a><br>" .
    35.               $f->item(0)->childNodes->item(0)->nodeValue;
    36.          
    37.         }
    38.       }
    39.     }
    40.   }
    41. }
    42.  
    43. // Установить результат в "Нет вариантов" если подсказка не найдена
    44. // или к найденным значениям
    45. if ($hint=="") {
    46.   $response="Нет вариантов";
    47. } else {
    48.   $response=$hint;
    49. }
    50.  
    51. //вывод ответа
    52. echo $response;
    53. ?>
    Структура XML
    Код (Text):
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <pages>
    3.         <link>
    4.             <guid isPermaLink="false">3815738490</guid>
    5.             <title>Пользовательское соглашение.</title>
    6.             <url>https://combinacii.ru/soglashenie.html</url>
    7.             <author>Администратор</author>
    8.             <category>Новости сайта</category>
    9.             <description>Описание пользовательского соглашения</description>
    10.             <content:encoded><![CDATA[<p>Использование материалов и сервисов Сайта регулируется нормами действующего законодательства Российской Федерации.</p><p>Настоящее Соглашение является публичной офертой. Получая доступ к материалам Сайта Combinacii.ru, Пользователь считается присоединившимся к настоящему Соглашению.</p><p>Администрация Сайта вправе в любое время в одностороннем порядке изменять условия настоящего Соглашения. Такие изменения вступают в силу по истечении 3 (Трех) дней с момента размещения новой версии Соглашения на сайте. При несогласии Пользователя с внесенными изменениями он обязан отказаться от доступа к Сайту, прекратить использование материалов и сервисов Сайта.</p><p>Пользователь соглашается не предпринимать действий, которые могут рассматриваться как нарушающие российское законодательство или нормы международного права, в том числе в сфере интеллектуальной собственности, авторских и/или смежных правах, а также любых действий, которые приводят или могут привести к нарушению нормальной работы Сайта и сервисов Сайта.</p><p>Использование материалов Сайта без согласия правообладателей не допускается (статья 1270 ГК РФ). Для правомерного использования материалов Сайта необходимо заключение лицензионных договоров (получение лицензий) от Правообладателей.</p><p>При цитировании материалов Сайта, включая охраняемые авторские произведения, ссылка на Сайт обязательна (подпункт 1 пункта 1 статьи 1274 ГК РФ).</p><p>Пользователь предупрежден о том, что Администрация Сайта не несет ответственности за посещение и использование им внешних ресурсов, ссылки на которые могут содержаться на сайте.</p><p>Пользователь согласен с тем, что Администрация Сайта не несет ответственности и не имеет прямых или косвенных обязательств перед Пользователем в связи с любыми возможными или возникшими потерями или убытками, связанными с любым содержанием Сайта, регистрацией авторских прав и сведениями о такой регистрации, товарами или услугами, доступными на или полученными через внешние сайты или ресурсы либо иные контакты Пользователя.</p><p>Пользователь принимает положение о том, что все материалы и сервисы Сайта или любая их часть могут сопровождаться рекламой. Пользователь согласен с тем, что Администрация Сайта не несет какой-либо ответственности и не имеет каких-либо обязательств в связи с такой рекламой.</p><p>Пользователь согласен, что использование любого генератора Сайта не гарантирует выигрышную комбинацию. Владельцы сайта не несут ответственности в случае понесенных убытков, в результате использования любой из комбинаций. Нажав кнопку "Получить комбинацию" Вы соглашаетесь с данными правилами и не имеете любых претензий, в том числе и финансовых к владельцу сайта, к самому сайту.</p><p>Все возможные споры, вытекающие из настоящего Соглашения или связанные с ним, подлежат разрешению в соответствии с действующим законодательством Российской Федерации.</p><p>Ничто в Соглашении не может пониматься как установление между Пользователем и Администрации Сайта агентских отношений, отношений товарищества, отношений по совместной деятельности, отношений личного найма, либо каких-то иных отношений, прямо не предусмотренных Соглашением.</p><p>Признание судом какого-либо положения Соглашения недействительным или не подлежащим принудительному исполнению не влечет недействительности иных положений Соглашения.</p><p>Бездействие со стороны Администрации Сайта в случае нарушения кем-либо из Пользователей положений Соглашения не лишает Администрацию Сайта права предпринять позднее соответствующие действия в защиту своих интересов и защиту авторских прав на охраняемые в соответствии с законодательством материалы Сайта.</p><p><img src="https://mc.yandex.ru/watch/51191051"></p>]]></content:encoded>
    11.             <pubDate>Wed, 14 Jun 2023 18:17:29 +0300</pubDate>
    12.         </link>
    13.         <link>
    14.             <guid isPermaLink="false">3472319769</guid>
    15.             <title>Генератор чисел 10 из 80</title>
    16.             <url>https://combinacii.ru/10_iz_80/</url>
    17.             <author>Администратор</author>
    18.             <category>Новости сайта</category>
    19.             <description>Онлайн генирование случайных чисел для комбинации 10 из 80. Выбор количества комбинаций для генерирования числовых значений.</description>
    20.             <content:encoded><![CDATA[<h2>Сгенерировать 10 случайных чисел из 80</h2><p>Зарегистрируйтесь по нашей кнопке "Перейти на Столото", вы получите количество бонусов, равное стоимости минимальной лотерейной ставки самого дорогого билета из вашей первой покупки. Например, купив билет за 150 рублей, Вы получите 450 бонусов!</p>]]></content:encoded>
    21.             <pubDate>Wed, 14 Jun 2023 18:17:28 +0300</pubDate>
    22.         </link>
    23.         <link>
    24.             <guid isPermaLink="false">3683710425</guid>
    25.             <title>5 из 36</title>
    26.             <url>https://combinacii.ru/5_iz_36/</url>
    27.             <author>Администратор</author>
    28.             <category>Новости сайта</category>
    29.             <description>Онлайн генератор случайных чисел Комбинации Ру поможет подобрать вам выигрышную комбинацию для лотереи 5 из 36</description>
    30.             <content:encoded><![CDATA[<h2>Генератор случайных 5 чисел из 36 плюс 1 число</h2><h2>Простой генератор ГСЧ для лотереи 5 из 36 с таблицей цифр</h2><h2>Количество комбинаций</h2><h2>5 из 36</h2><p>Генератор комбинаций 5 из 36 составит числовые числовые комбинации и поможет подобрать выиграшное число. Алгоритм генератора анализирует и выдает столько комбинаций, сколько вы укажите. Лотерея 5 из 36 проводится 5 раз за день, поэтому шансов выиграть в день у вас в 5 раз больше. Генератор поможет вам выбрать самые лучшие числа.</p>]]></content:encoded>
    31.             <pubDate>Wed, 14 Jun 2023 18:17:27 +0300</pubDate>
    32.         </link>
    33.         <link>
    34.             <guid isPermaLink="false">2904385835</guid>
    35.             <title>Подобрать выигрышную комбинацию для лотереи 4 из 20</title>
    36.             <url>https://combinacii.ru/4_iz_20/</url>
    37.             <author>Администратор</author>
    38.             <category>Новости сайта</category>
    39.             <description>4 из 20 генерирование случайных чисел с выбором числа комбинаций, генерирование комбинации это высокий шанс выиграть крупные деньги</description>
    40.             <content:encoded><![CDATA[<h2>Генератор комбинаций 4 чисел из 20</h2><h2>Количество комбинаций</h2><h2>4 из 20</h2><p>Лотерея 4 из 20 входит в топ самых покупаемых лотерей. Ежедневно десятки тысяч людей участвуют в розыгрышах миллионов рублей. Практически каждый месяц появляется счастливчик, сорвавший Джекпот в этой лотерее. Что-бы помочь вам стать миллионером мы создали генератор для этой лотереи, способный составить различные комбинации, некоторые из которых могут быть выигрышными.</p>]]></content:encoded>
    41.             <pubDate>Wed, 14 Jun 2023 18:17:26 +0300</pubDate>
    42.             <enclosure url="http://combinacii.ru/generator_chisel.jpg" type="image/jpeg" length="0" />
    43.         </link>
    44. </pages>
    Не получается вывести изображения при поиске, так как не удается дойти до enclosure и вытащить url
     
  2. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    PHP:
    1. $errorSetting = libxml_use_internal_errors(true);
    2. $feed = new DOMDocument();
    3. $feed->load("tmp.xml");
    4.  
    5. $links = $feed->getElementsByTagName('link');
    6. foreach ($links as $link) {
    7.     $enclosure = $link->getElementsByTagName('enclosure');
    8.     if (count($enclosure)) {
    9.         $title = $link->getElementsByTagName('title');
    10.         $url = $enclosure[0]->getAttribute("url");
    11.         echo $title[0]->nodeValue . ' - ' . $url;
    12.     }
    13. }
     
  3. Arcadiy

    Arcadiy Активный пользователь

    С нами с:
    3 янв 2016
    Сообщения:
    23
    Симпатии:
    0
    Александр, теперь независимо от того, что ввел в поиске к любому запросу вставляет url, а нужно чтобы только по наличию картинки вставлял в виде <img src="Ссылка на картинку">
     
  4. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    Вам необходимо поправить данный код. В моем примере показано как вытащить url из enclosure.
    PHP:
    1. $errorSetting = libxml_use_internal_errors(true);
    2. $feed = new DOMDocument();
    3. $feed->load("tmp.xml");
    4.  
    5. $links = $feed->getElementsByTagName('link');
    6.  
    7. $q = $_GET["q"];
    8. $hint = "";
    9.  
    10. if(mb_strlen($q) > 0){
    11.     foreach ($links as $link) {
    12.         $title = $link->getElementsByTagName('title');
    13.         $url = $link->getElementsByTagName('url');
    14.         $description = $link->getElementsByTagName('description');
    15.         if ($title->item(0)->nodeType == 1) {
    16.             if (stristr($title->item(0)->childNodes->item(0)->nodeValue, $q)) {
    17.                 $enclosure = $link->getElementsByTagName('enclosure');
    18.                 $img = '';
    19.                 if (count($enclosure)) {
    20.                     $src = $enclosure[0]->getAttribute("url");
    21.                     $img = <<<IMAGE
    22. <img src="$src" alt="image">
    23. IMAGE;
    24.                 }
    25.  
    26.                 $hint .= "
    27.                    <a href='" . $url->item(0)->childNodes->item(0)->nodeValue . "' target='_blank'>" .
    28.                     $title->item(0)->childNodes->item(0)->nodeValue . "</a><br>" .
    29.                     $description->item(0)->childNodes->item(0)->nodeValue . $img;
    30.             }
    31.         }
    32.     }
    33. }
    34. echo $hint;
     
    #4 Aleksandr.B, 15 июн 2023
    Последнее редактирование: 15 июн 2023
    Arcadiy нравится это.
  5. Arcadiy

    Arcadiy Активный пользователь

    С нами с:
    3 янв 2016
    Сообщения:
    23
    Симпатии:
    0
    Спасибо Огромнейшее!!!