|
|
|
| Из куска текста, который вытягивается из исходника, нужно выцепить заголовок, первое предложение аннонса и дату. Код вот такой получился:
<?php
$text = file_get_contents ("http://www.budshop.com.ua/content/blogcategory/62/153/");
// Ищем начало вхождения фрагмента
$text = trim ($text);
$s = strpos($text, '<table class="contentpaneopen">', 0);
$text = substr($text, $s);
// Ищем конец фрагмента
$s = strpos($text, '</td></tr></table></td></tr><tr>');
$text = substr($text, 0, $s);
//вырезать из текста то, что нужно
$header = preg_match_all('#<td class="contentheading" width="100%"><a href=([^>]*+)>[^<]*</a></td>#i',$text, $header1, PREG_PATTERN_ORDER);
$annons = preg_match_all('#<div class="article-content clearfix">[^<]*</nobr></div>#is', $text, $annons1, PREG_PATTERN_ORDER);
foreach($annons1[0] as $a){
$a2 = explode(".", $a);
$annons_a = $a2[0];
}
$date = preg_match_all('#<td [^>]* class="createdate">[^<]*</td>#i',$text, $date1, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($header[0])&&$i < count($annons_a)&&$i < count($date[0]); $i++){
print $header1[0][$i]."<br>".$annons_a[$i]."<br>".$date1[0][$i];
}
?>
|
Кусок текста нормально вытягивается, а вот что дальше с ним происходит, когда все вырезается, - на экран абсолютно ничего не выводится. Где я неправильно делаю? | |
|
|
|
|
|
|
|
для: Лена
(16.07.2008 в 15:02)
| | Вам нужно взять каждую новость, причем ссылка на исходник должна остаться? Ну зачем же тогда гонять рег. выражения? Ну вроде есть простые и готовые функции в РНР, которыми можно все это сделать:
<?
$text = file_get_contents ("http://www.budshop.com.ua/content/blogcategory/62/153/");
//это начало
$text = substr($text, strpos($text, '<table class="contentpaneopen">'));
//это уже кусок, хотя по этой строке может и не повезти
$text = substr($text, 0, strpos($text, '</td></tr></table></td></tr><tr>'));
//выбросили все теги, кроме линков
$text = strip_tags($text, "<a></a>");
//убрали повторы
$text = str_replace("Новости недвижимости","",$text);
//получили массив новостей
$text = explode("Подробнее...", $text);
for ($i=0; $i<count($text); $i++) {
echo "<p>$text[$i]</p>";
}
?>
|
А если у них есть RSS, то может ее лучше брать для "раскроя"? | |
|
|
|
|
|
|
|
для: sim5
(16.07.2008 в 19:23)
| | RSS-канала у них нет.
Вопросы:
1. Как сделать так, чтобы ссылки вели не на страницу исходника, а на мою страницу?
2. Как сделать, чтобы новости обновлялись, скажем так, каждые 2 часа автоматически? | |
|
|
|
|
|
|
|
для: Лена
(17.07.2008 в 10:39)
| | 1. Если взять анонсы с другого сайта, а направление с них на себя, то это мини-плагиат получается.) Зачем же тогда брать их на другом сайте?
Каждый эелемент массива $text в примере, содержит первое предложение как ссылку. Можно забрать текст этой ссылки (кстати без всяких рег. выр.) и то, что идет после ссылки. Для первого и второго удаляем теги А (так как текст содержит еще ссылки), превратив первое полученное в заголовок, второе в анонс, добавив в конце его <a href="main.php">Подробнее...</a> (собственно зачем тогда их вообще сохранять эти ссылки - вырезать сразу).
2. Использовать планировщик Cron. | |
|
|
|
|
|
|
|
для: sim5
(17.07.2008 в 11:18)
| | 2. Не обязательно Cron. Можно куда-то записывать время последнего обновления и если прошло более двух часов, то обновить новости и файл/таблицу с записью. | |
|
|
|
|
|
|
|
для: BinLaden
(17.07.2008 в 11:20)
| | Можно, но обновление будет только при входе на страницу - не будет посетителей, не будет и обновления. Если нет лимита на 2 часа, тогда конечно так. | |
|
|
|
|
|
|
|
для: sim5
(17.07.2008 в 11:22)
| | Да, но я вижу в этом только плюс. Кому нужно обновление, если нет посетителей? | |
|
|
|
|
|
|
|
для: BinLaden
(17.07.2008 в 11:23)
| | Я такого же мнения, но если срашивают как через 2 часа, то что надо ответить? А вдруг это несколько для иного (перенаправляем то на себя, а на что?):) Если аргумент, что это не совсем обязательно (так же как и для курса валют вопрос был недавно), то автор, думаю, согласится, что без планировщика тоже достаточно будет.) | |
|
|
|
|
|
|
|
для: sim5
(17.07.2008 в 11:28)
| | Как можно записать время последнего обновления без планировщика Cron? Если все новости я нигде сохранять не буду, мне нет в этом надобности, т.е. таблицы у меня не будет. | |
|
|
|
|
|
|
|
для: Лена
(17.07.2008 в 13:27)
| | Использовать одно из двух:
1. Запись в файл.
2. Запись в базу.
1 - можно конечно, но лучше обойтись без этого.
2 - наверняка потребуется некая служебная таблица, в которой вполне может быть всего одна строка записи: курс валют, состояние неких счетчиков и т.п. Вот в такую таблицу и можно записать последню дату обращения к этой странице.
PS. Кстати, если не сохранять анонсы, то как увидит их следующий пользователь, для которого установлено, что обращаятся еще рано, а обращения не было? | |
|
|
|