Просмотр поста

.
ValekS
Ей 25
Пишем код парсера всех записей
Теперь нам нужно усовершенствовать наш код, что бы он парсил все записи а не только одну. Значит нам нужно сделать так, что бы скрипт пробежался по всем страничкам с записями и занёс их нам в БД.
Приведу сразу код, потом объясню:
function title($var) {      
   preg_match('/<title>(.*?)<\/title>/is', $var, $title);
   $titles = str_replace('&quot;', '"', $title['1']);
   return $titles;
    }

function text($var) {      
   preg_match('/<div class=\"post\">(.*?)<div style=\"float:left\">/is', $var, $text);
   $texts = preg_replace('/<img(.*?)\/>/si','',$text['1']);
   $texts = preg_replace('/<a(.*?)<\/a>/si','',$texts);
   $texts = str_replace('&quot;', '"', $texts);
   $texts = strip_tags($texts);
   return $texts;
    }

for ($i = 1; $i < 177; $i++) {
$file = file_get_contents('http://helltar.ru/post-'.$i.'.html');
$title = title($file);
$text = text($file);

if ($title && $text) {
mysql_query("INSERT INTO `lib` SET
               `refid` = '450',
               `time` = '" . time() . "',
               `type` = 'bk',
               `name` = '" . mysql_real_escape_string(mb_substr(trim($title), 0, 100)) . "',
               `announce` = '" . mysql_real_escape_string(mb_substr(trim($text), 0, 100)) . "',
               `text` = '" . mysql_real_escape_string($text) . "',
               `avtor` = 'ValekS',
               `ip` = '0',
               `soft` = '1',
               `moder` = '1'
           ");

echo 'Пост '.$i.' - Готово!<br/>';
} else {
echo 'Пост '.$i.' -Ошибка!<br/>';
}
  }

Это кстати весь код файла. Как видим функции я переместил в самый верх. Что бы они не путались с остальным кодом и не мешали нам. Затем добавил Цикл for(). Он нужен для того что бы скрипт выполнился заданное кол-во раз. Без цикла наш скрипт не сможет пробежаться по всем записям. Цикл прост: for ($i = 1; $i < 177; $i++) { } - сначала мы создаём цикл, затем присваиваем переменной $i значение 1, потмо ставим условие повторения цикла - если $1 меньше 177 то повторяем цикл, ну и увеличиваем $1 на единицу каждый раз при повторении цикла. Цифра 1 это ай-ди первой записи, хоть её и нет, а 177 это ай-ди последней записи увеличенное на единицу, можно было и не увеличивать - $i >= 176.
Тут ещё есть одно важное дополнение нашего начального кода - условие IF. Условие if ($title && $text) проверяет установлены ли переменные Титл и Текст, и есть они есть то только тогда выполняется запись в Базу Данных и вывод текста “Готово”. Если переменных нет выводим ошибку. Таким способом мы откинем все несуществующие(удалённые) записи, ведь если записи нет то где переменные возьмут Название записи и Текст?
Ну и стоит ещё заметить что для получения данных странички с записью мы подставляем в ссылку переменную $1 вместо ай-ди:
было - $file = file_get_contents('http://helltar.ru/post-176.html');
стало - $file = file_get_contents('http://helltar.ru/post-'.$i.'.html');