Пишем код парсера одной странички
Тут сразу я напишу 2 оговорки:
1) Я буду парсить только сам текст записи, картинки в мои планы не входят. Так что их я буду вырезать.
2) Как сказано в первой оговорке, я буду парсить сам текст записи. Поэтому я вырежу все ссылки и HTML теги из текста.
Почему я буду так делать? Это ознакомительный код парсера, в котором я не хочу мучиться с обработкой картинок(тем более что в JohnCMS картинку в статью, в библиотеке, не вставишь), ссылок, жирного текста и т.д.
Итак, приступим! Я начну с того что создам в корне чистого JohnCMS папку parser. В ней я создам файл index.php, в кодировке UTF-8(без BOM), в котором напишу заготовку обычной странички для движка JohnCMS:
<?php
define('_IN_JOHNCMS', 1);
require_once('../incfiles/core.php');
require_once('../incfiles/head.php');
require_once('../incfiles/end.php');
?>
Далее получим последнюю запись с блога helltar.ru:
$file = file_get_contents('http://helltar.ru/post-176.html');
Как видите данные я получаю стандартной функцией PHP и заношу их в переменную $file. Конечно можно и даже нужно использовать cURL(рекомендуется его использовать, но использовать file_get_contents никто не запрещает). Но я выбрал file_get_contents что бы было меньше строчек кода не знакомого новичкам.
Затем я напишу две функции, которые будут вытаскивать Название записи и Текст:
function title($var) {
preg_match('/<title>(.*?)<\/title>/is', $var, $title);
$titles = str_replace('"', '"', $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('"', '"', $texts);
$texts = strip_tags($texts);
return $texts;
}
Как видите я пока хочу написать код который будет брать одну запись,ссылку на которую мы укажем, и заносить её к нам в БД.
Код наших функций весьма прост. Разберём сначала первую функцию title():
функция принимает параметр $var, это код нашей странички с записью, затем идёт обработка этого кода. Функция preg_match(‘’, ‘’, ‘’); выполняет у нас поиск текста по регулярному выражению, из переменной $var(весь текст здесь хранится), и заносит найденный текст массивом, в нашем случае Название записи, в переменную $title.
Затем идёт функция str_replace('"', '"', $title['1']); , она в уже Названии записи заменяет html код кавычек на сами кавычки - “, если конечно этот HTML код кавычек есть в Названии. Обратите внимание как выводится Название записи - $title['1'] а не просто $title, Название у нас же в массиве.
Ну и наконец идёт строка, которая указывает что наша функция отдаёт - return $titles; , тут думаю всё просто и комментариев не надо.
Вторая функция - text() - делает практически тоже самое что и первая функция. Принимает $var, затем вырезает текст записи, это у нас делает preg_match(), потом идёт preg_replace(), эта функция вырезает изображения и ссылки в Тексте записи, дальше идёт уже знакомая нам функция str_replace(), делает она тоже самое что и в функции title(), и напоследок весь текст обрабатывается функцией strip_tags, которая вырезает все HTML теги с текста.
Что будем делать дальше? Разумеется записывать всё это добро в нашу Базу Данных:
$title = title($file);
$text = text($file);
mysql_query("INSERT INTO `lib` SET
`refid` = '1',
`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 'Готово!';
Это MySQL запрос для добавления статьи в библиотеку, в движке ДжонЦМС. Перед ним идут 2 переменные которым мы присваиваем Название и Текст записи - вызываем функции обработки Названия и Текста, код которых мы написали перед этим, и присваиваем переменным. В качестве параметра передаём содержимое переменной $file.
Сам запрос как видите состоит из 10 полей:
-
refid - это ай-ди категории в которую мы будем добавлять записи. Я в библиотеке создал категорию “Записи Helltar.ru” и она получила у меня ай-ди 1.
-
time - время добавления записи. Записываем время стандартной функцией time().
-
type - это поле нужно для того что бы библиотека знала что мы добавили статью или категорию.
-
name - Название статьи, перед занесением в БД мы обрабатываем его, что бы не было уязвимостей и обрезаем если оно более 100 символов.
-
announce - анонс статьи, мы вырезаем первые 100 символов Текста статьи и заполняем это поле.
-
text - Текст статьи.
-
avtor - автор статьи. Тот кто её добавил. Пишем свой ник.
-
ip - ай-пи добавившего статью. Что бы не замарачиваться пишем просто 0.
-
soft - браузер и т.д. добавившего статью. Что бы не замарачиваться пишем просто - 1.
-
moder - модерация статьи. Если 1 - то промодерирована, если 0 - то не промодерирована. Пишем 1.
После запроса выводим текст “Готово”.
Так. Ну можно проверять. Последнюю запись блога нам в библиотеку должно добавить.