Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите новечку в PHP довести до ума

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Помогите довести до ума скрипт
Dio09
Отправлено: 13 Февраля, 2011 - 14:28:52
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Знатоки, помогите пожалуйста довести до ума скрипт. Задача такая:
Нужно с ежедневно обновляемого сайта брать инфу вот код нужного фрагмента:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <div class="hotd">
  2. <div class="title">
  3. <a href="http://www.sunmar.ru/hotel/1027/"><!-- ссылка 1-->ENDAM HOTEL 3*+<!--название 1--></a>
  4. </div>
  5. <table cellpadding="0" cellspacing="0" width="202" class="discount">
  6. <tr>
  7. <td class="text"><a href="/agent/actions/hotelday/"<!-- ссылка 1 --> style="color:red">Дополнительная скидка <br />от стоимости тура</a></td>
  8. <td>
  9. <table cellpadding="0" cellspacing="0" border="0">
  10. <tr>
  11. <td><img src="/images/discount/1/1.png" width="34" height="51" title="10%" alt="10%" / ><!-- картинка 1--></td>
  12.  
  13. <td><img src="/images/discount/2/0.png" width="65" height="51" title="10%" alt="10%" / ><!-- картинка 2--></td>
  14. </tr>
  15. </table>
  16. </td>
  17. </tr>
  18. </table>
  19. <a href="http://www.sunmar.ru/hotel/1027/" title="ENDAM HOTEL 3*+"><img class="photo" src="/img/hotelday/small/ENDAM-HOTEL.jpg " <!--Картинка 3--> width="199" height="131" alt="ENDAM HOTEL 3*+" /><br /></a>
  20. </div>
  21.  


Мой скрип (не судите строго, то что я вывел название, уже для меня достижение, 2 недели парился):
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. $text = file_get_contents( 'http://www.sunmar.ru/' );
  3. preg_match_all( '/(?<=<div class="title">)(.*?)(?=<\/div)|(?<=<div class="text">)(.*?)(?=<\/div)/is' , $text , $title);
  4. echo $title [0] [0] ;
  5. ?>

Он выводит только название-ссылку
Нужно получить:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <td><?php echo $title [0] [0] ; ?><!-- оно же название 1 и ссылка 1, в данном случае нормально, но далее нужно разделить--></td>
  3. <br>
  4. </td>
  5.   </tr>
  6.   <tr>
  7.     <td height="9"></td>
  8.   </tr>
  9. <tr>
  10. <td class="discount"><a href="http://www.sunmar.ru/<?php ссылка 2 ?>" style="color:red">Дополнительная скидка <br>от стоимости тура</a></td>
  11.  
  12. <td><<?php картинка 1?>></td>
  13. <td><<?php картинка 2?>></td>
  14. </tr>
  15. <tr>
  16.     <td colspan="3"  align="center"><br>
  17. <a href="<?php ссылка 1 ?>" title="<?php название 1 ?>"><img class="photo" src="<?php Картинка 3?>" width="195" height="131"  alt="<?php название 1?>" /></a>
  18. </td>

Про то что, его нужно поставить на cron, знаю, но это уже другой вопрос

(Отредактировано автором: 13 Февраля, 2011 - 22:44:23)

 
 Top
grefon
Отправлено: 13 Февраля, 2011 - 18:38:48
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




Вот честно, никогда не любил регулярки Однако Наверное я тупой для них Радость
В Вашей регулярке искать нужно первое вхождение "</div></div></div>", а Вы ищите "</div>", по этому выводится только заголовок. Прикола ради написал на нерегулярке, это рабочий вариант, но в данном случае регулярками проще и легче. Но все же:
PHP:
скопировать код в буфер обмена
  1. $text = file_get_contents( 'http://www.sunmar.ru/' );
  2.                 $ddbody = strlen('<div class="title">');
  3.                 $pos1 = strpos($text, '<div class="title">') - 19;
  4.                 if ($pos1 !== FALSE) {
  5.                         $pos2 = strpos($text, "</div></div></div>") - 7;
  6.                         if ($pos2 !== FALSE) {
  7.                                 $body = substr($text, $pos1+$ddbody, $pos2-$pos1-$ddbody);
  8.                         }
  9.                 }
  10. echo $body;


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
JustUserR
Отправлено: 14 Февраля, 2011 - 14:05:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Dio09 В качестве возможного варианта решения предполагаемой задачи допустимо исопльзование средств XML-анализатора позволяющег обеспечить извлечение отдельныъ элементов и их параметров из оригинального документа - на основе предоставления явного вложенного пути к целевому элементу или критерия его поиска в XML-документе
Использование средств XML-анализатора для решения предполагаемой задачи в действительности является в значительной мере более эффективным решением обеспечиваемого за счет проведения разбора XML-документа в компиированном коде соответствующих модулей
Более подробная информация по данному вопросу предоставлена здесь http://www.php.su/functions/?page=cat_xml


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Dio09
Отправлено: 14 Февраля, 2011 - 17:41:43
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Собственно вот
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. $content = file_get_contents( 'http://www.sunmar.ru/' );
  3. preg_match( '{(?<=<div class="hotd">)(.+?)(?=<\/div><\/div>)}is' , $content , $result);
  4. $patterns[1] = "/src=\"/";
  5. $patterns[2] = "/<\/a>/";
  6.  
  7.  
  8. $replacements[1] = "src=\"http://www.sunmar.ru";
  9. $replacements[2] = "</a><br>";
  10.  
  11. $result = preg_replace($patterns, $replacements, $result);
  12. ?>
  13. <?php echo $result [0]; ?>

Результат достигнут, правда не так как хотелось.
Спасибо grefon за нужное направление поиска.
 
 Top
JustUserR
Отправлено: 16 Февраля, 2011 - 14:23:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Dio09 пишет:
Результат достигнут, правда не так как хотелось.
Использование средств XML-анализатора для решения предполагаемой задачи в действительности является в значительной мере более эффективным решением обеспечиваемого за счет проведения разбора XML-документа в компиированном коде соответствующих модулей - более подробная информация предоставлена здесь http://ru.php.net/manual/en/class.domelement.php


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB