За последние 24 часа нас посетили 17128 программистов и 1725 роботов. Сейчас ищут 1990 программистов ...

Парсинг xml

Тема в разделе "Сделайте за меня", создана пользователем Avensis, 5 авг 2015.

  1. Avensis

    Avensis Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    22
    Симпатии:
    0
    Здравствуйте! Хочу спарсить в свой интернет-магазин товары с сайта поставщика.
    Можете пожалуйста показать на примере как это делается?
    допустим как добавить в свою базу данных название модели, цену, размер. как сохранить картинки на локальный сервер в определенную папку? (движок самописный у меня)
    xml файл - http://www.glem.com.ua/eshop/ym4.php

    и еще такой вопрос, на их сайте написано:
    Подключив импорт из xml вы получите:
    Новые позиции будут создаваться на вашем сайте автоматически.
    Позиции, закончившиеся на нашем складе (не осталось ни одного размера) автоматически скроются и на вашем сайте.
    Если эти позиции отошьются и опять появятся у нас на складе, то они автоматически появятся и у вас на сайте.

    как это все осуществляется? Заранее всем спасибо за ответы.
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    По первому вопросу. С массивами/объектами работать умеете? Вот один из простейших способов преобразовать XML в объект:
    Код (PHP):
    1. $xml = simplexml_load_file('http://www.glem.com.ua/eshop/ym4.php');
    2. var_dump($xml); 
    А по второму вопросу - я думаю, что описание API и работе с ним, у них должно быть в документации. Хотя, можно запускать сценарий получения данных и обновление своей базы по крону (периодичность уже сами подбираете).
     
  3. Avensis

    Avensis Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    22
    Симпатии:
    0
    Deonis, можете пожалуйста показать на примере как спарсить хотя-бы названия моделей и размеры? Опыт еще не такой большой в php у меня. С остальным я думаю разберусь..
    тоже думал что скорей всего придется крон раз в сутки запускать..
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Код (PHP):
    1. $xml = simplexml_load_file('http://www.glem.com.ua/eshop/ym4.php');
    2. foreach($xml->shop->offers->offer as $offer) {
    3.     echo $offer->name, ', размер: ',  $offer->param[1], PHP_EOL;
    4. } 
     
  5. Avensis

    Avensis Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    22
    Симпатии:
    0
    спасибо! уже понятнее стало.. буду сейчас пытаться все базу загнать=)
     
  6. Avensis

    Avensis Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    22
    Симпатии:
    0
    Подскажите пожалуйста, в xml есть строка:

    Код (Text):
    1. <description>
    2. <![CDATA[<p><strong>Состав<br /></strong>креп-шифон + вискоза.<br />Принт спереди, спинка белая.    </p> <p><strong>Размерная сетка</strong></p> <table class="mceVisualAid" border="0"> <tbody> <tr> <td class="mceVisualAid" align="center"> </td> <td class="mceVisualAid" align="center">S</td> <td class="mceVisualAid" align="center">M</td> <td class="mceVisualAid" align="center">L</td> </tr> <tr> <td class="mceVisualAid" align="left">Обхват груди (см)</td> <td class="mceVisualAid" align="center">88</td> <td class="mceVisualAid" align="center">92</td> <td class="mceVisualAid" align="center">96</td> </tr> <tr> <td class="mceVisualAid" align="left">Обхват талии (см)</td> <td class="mceVisualAid" align="center">68</td> <td class="mceVisualAid" align="center">72</td> <td class="mceVisualAid" align="center">76</td> </tr> <tr> <td class="mceVisualAid" align="left">Обхват бедер (см)</td> <td class="mceVisualAid" align="center">96</td> <td class="mceVisualAid" align="center">100</td> <td class="mceVisualAid" align="center">104</td> </tr> </tbody> </table> <p> </p> <p>Длина изделия: 55 см. Для всех размеров.</p>]]>
    3. </description>
    как мне ее разделить на части? Тоесть состав, размерную сетку, длину просвоить к разным переменным.
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Там HTML в XML, достань HTML $html = $xml->description
    и потом через DOM как и XML можно будет разобрать этот HTML.
     
  8. Avensis

    Avensis Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    22
    Симпатии:
    0
    Можете помочь с этим? Не могу что-то разобраться
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Код (PHP):
    1. <?php
    2. $xmlstr =<<<XML
    3. <?xml version='1.0' standalone='yes'?>
    4. <description>
    5. <![CDATA[<p><strong>Состав<br /></strong>креп-шифон + вискоза.<br />Принт спереди, спинка белая.    </p> <p><strong>Размерная сетка</strong></p> <table class="mceVisualAid" border="0"> <tbody> <tr> <td class="mceVisualAid" align="center"> </td> <td class="mceVisualAid" align="center">S</td> <td class="mceVisualAid" align="center">M</td> <td class="mceVisualAid" align="center">L</td> </tr> <tr> <td class="mceVisualAid" align="left">Обхват груди (см)</td> <td class="mceVisualAid" align="center">88</td> <td class="mceVisualAid" align="center">92</td> <td class="mceVisualAid" align="center">96</td> </tr> <tr> <td class="mceVisualAid" align="left">Обхват талии (см)</td> <td class="mceVisualAid" align="center">68</td> <td class="mceVisualAid" align="center">72</td> <td class="mceVisualAid" align="center">76</td> </tr> <tr> <td class="mceVisualAid" align="left">Обхват бедер (см)</td> <td class="mceVisualAid" align="center">96</td> <td class="mceVisualAid" align="center">100</td> <td class="mceVisualAid" align="center">104</td> </tr> </tbody> </table> <p> </p> <p>Длина изделия: 55 см. Для всех размеров.</p>]]>
    6. </description>
    7. XML;
    8.  
    9. $html = simplexml_load_string($xmlstr);
    10.  
    11. $doc = new DOMDocument();
    12. $doc->loadHTML("<html><head><meta charset='UTF-8'></head><body>$html</body></html>");
    13.  
    14. $strong = $doc->getElementsByTagName('strong');
    15. foreach ($strong as $tag) {
    16.     echo $tag->nodeValue.'<br>'.PHP_EOL;
    17. }
    18.  
    19. $tr = $doc->getElementsByTagName('tr');
    20. foreach ($tr as $tag) {
    21.     echo '<br>'.PHP_EOL;
    22.     $td = $doc->getElementsByTagName('td');
    23.     foreach ($td as $tag) {
    24.         echo $tag->nodeValue.', ';
    25.     }
    26. }
     
  10. Avensis

    Avensis Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    22
    Симпатии:
    0
    код не работает.. но это уже не актуально. Спасибо!
     
  11. Avensis

    Avensis Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    22
    Симпатии:
    0
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  13. Avensis

    Avensis Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    22
    Симпатии:
    0
  14. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  15. Avensis

    Avensis Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    22
    Симпатии:
    0
  16. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Документация по отладке и как найти ошибку любую, помогла? Всё понятно как отлаживать программу?
     
  17. Avensis

    Avensis Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    22
    Симпатии:
    0
  18. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Avensis до и после continue; выведи текст, по которому можно понять, где и когда какие данные у тебя.
    Смысл в том, чтобы ты полностью понимал как работает твоя программа.
     
  19. Avensis

    Avensis Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    22
    Симпатии:
    0
  20. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Автор, посты-то выпиливать нафига? Да еще и таким способом.