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

.
ValekS
Ей 25
Пишем код парсера одной странички
Тут сразу я напишу 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('&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;
    }


Как видите я пока хочу написать код который будет брать одну запись,ссылку на которую мы укажем, и заносить её к нам в БД.
Код наших функций весьма прост. Разберём сначала первую функцию title():
функция принимает параметр $var, это код нашей странички с записью, затем идёт обработка этого кода. Функция preg_match(‘’, ‘’, ‘’); выполняет у нас поиск текста по регулярному выражению, из переменной $var(весь текст здесь хранится), и заносит найденный текст массивом, в нашем случае Название записи, в переменную $title.
Затем идёт функция str_replace('&quot;', '"', $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.

После запроса выводим текст “Готово”.

Так. Ну можно проверять. Последнюю запись блога нам в библиотеку должно добавить.