Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*-------------- ОПРЕДЕЛЯЕМ ТИП КОНТЕНТА И ПОДКЛЮЧАЕМ БИБИЛИОТЕКУ ПАРСЕРА ----------------*/
- header("Content-type: text/html; charset=utf-8");
- // подключаем библиотеку парсера
- include_once('simple_html_dom.php');
- /*------------------------------ ПОДКЛЮЧАЕМСЯ К БАЗЕ ДАННЫХ ------------------------------*/
- // данные для подключения
- $db_host = "localhost";
- $db_name = "filatov";
- $db_user = "filatov";
- $db_pass = "bVG4I6CJyyqWj4xk";
- // подключаемся к БД
- $mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
- // задаем кодировку
- $mysqli->query("SET NAMES 'utf8'");
- // если не подключились выводим ошибки
- if (!$mysqli) {
- echo "Ошибка: Невозможно установить соединение с MySQL." . PHP_EOL . "<br>";
- echo "Код ошибки errno: " . mysqli_connect_errno() . PHP_EOL . "<br>";
- echo "Текст ошибки error: " . mysqli_connect_error() . PHP_EOL . "<br>";
- exit;
- }
- /*-------------------------- МАССИВ ДЛЯ URL НОВОСТНЫХ РЕСУРСОВ ---------------------------*/
- // создаем массив с ссылками на новостные ресурсы
- $res = [
- 'u-f.ru' => 'http://u-f.ru/show_news_all',
- 'mk.ru' => 'http://www.mk.ru/news/',
- 'eg.ru' => 'http://www.eg.ru/daily/news/',
- 'dni.ru' => 'https://dni.ru',
- 'rbk.ru' => 'http://www.rbc.ru',
- 'ren.tv' => 'http://ren.tv/novosti',
- 'lenta.ru' => 'https://lenta.ru',
- 'svpressa.ru' => 'http://svpressa.ru/all/news/',
- 'tvzvezda.ru' => 'http://tvzvezda.ru',
- 'rambler.ru' => 'https://news.rambler.ru'
- ];
- // массив названий доменов
- $res_names = array_keys($res);
- /*-----------------------------------***-- U-F.RU --***-----------------------------------*/
- /*--------------- подключаемся к сайту ---------------*/
- $html = str_get_html(file_get_contents($res['u-f.ru']));
- $news = $html->find('.field-content');
- if(count($news)) { // ищем по html тегам
- foreach ($news as $divs) {
- $content[] = $divs->innertext;
- }
- }
- // подчищаем за собой после получения нужных данных
- $html->clear();
- unset($html);
- unset($news);
- /*----------- группируем полученные данные -----------*/
- /*
- удаляем лишние ссылки - с учетом количества статей в колонке и периодом обновления 5 минут более чем достаточно
- при $i от нуля до 39 - массив 10 статей из 4 элементов - время,ссылка,изображение,заголовок
- удаляем весь мусор, что после 10 статей
- */
- for($i=0;$i<1000;$i++) if($i > 39) unset($content[$i]);
- // группируем массив по статьям - статья состоит из 1-время, 2-ссылка на новость, 3-изображение, 4-заголовок
- $content = array_chunk($content,4);
- /*------------------ получаем данные -----------------*/
- foreach ($content as $cont) {
- /*-------------- получаем ссылку статьи --------------*/
- // заменяем локальный домен на домен входящего новостника
- $link = (string)htmlspecialchars($cont[1]);
- // удаляем html теги перед ссылкой
- $link = stristr($link,'/');
- // удаляем html теги после ссылки и сохраняем конец ссылки
- preg_match_all('~\/(\d+)~',$link,$end_link);
- // оставляем конечный элемент массива и переводим в строку
- $end_link = implode(array_splice($end_link[0],-1));
- // обрезаем все ненужное по концу ссылки
- $link = stristr($link,$end_link,true);
- // собираем новую ссылку
- $link = "http://".$res_names[0].$link.$end_link;
- /*------- получаем ссылку изображения статьи ---------*/
- // ссылка на изображение
- $image_source = htmlspecialchars($cont[2]);
- // оставляем только ссылку из src
- preg_match_all('/src=(\d|\w|\W)[^\s]+/',$image_source,$image_link);
- // обрубаем остаточные теги. 10 и -6 это из-за кавычек и переносов
- $image_link = mb_substr(implode($image_link[0]),10,-6);
- // создаем массив с поддерживаемыми типами изображений
- $extensions = array(1 => "gif", 2 => "jpeg", 3 => "png", 4 => "bmp");
- // получаем размеры и тип изображения в виде числа
- list($original_width, $original_height, $image_type) = getimagesize($image_link);
- // преобразуем числовое представление в тип изображения
- $image_type = $extensions[$image_type];
- // кодируем изображение в base64
- $image_base64 = base64_encode(file_get_contents($image_link));
- //собираем изображение для последующего встраивания в src
- $image = "data:image/$image_type;base64,$image_base64";
- /*-------------- обращаемся к статье -----------------*/
- // получаем данные со страниц статей
- $article_source = file_get_contents($link);
- /*-------------- получаем заголовок -----------------*/
- //вынимаем заголовок
- preg_match_all('/page-title(.*?)\/h1/',htmlspecialchars($article_source),$title);
- // обрезаем лишние символы
- $title = mb_substr(implode($title[1]),10,-4);
- /*------- получаем содержимое статьи ---------*/
- // вынимаем содержимое статьи
- preg_match_all('/field-name-body(.*?)\/div/s',$article_source,$article_content);
- preg_match_all('/<p>(.*?)<\/p>/is',$article_content[0][0],$article_content);
- $article_content = (implode('',$article_content[1]));
- // чистим текст
- // удаляем ссылки на левые статьи
- $text = preg_replace('/Читайте.также(.*?)<a.href(.*?)<\/a>/', '',$article_content);
- // удаляем мусор из твиттера
- $text = preg_replace('/—(.*?)\(@(.*?)\)(.*?)г./', '',$text);
- // удаляем лишние пробелы
- $text = preg_replace('/\s{2,}/',' ',$text);
- // добавляем пробел после точек, если их нет
- $text = preg_replace('/\.(?!\.)/', '. ', $text);
- // добавляем пробел после точек с запятой, если их нет
- $text = preg_replace('/\;(?!\.)/', '; ', $text);
- // удаляем html теги
- $text = strip_tags($text);
- var_dump($text);
- // получаем ссылки на видео с ютуба
- preg_match_all('/\/\/www.youtube.com(.*?)\"/',$article_content,$youtube);
- // если ссылка на ютуб есть то
- echo "<br><br>";
- /*-------------- сохраняем всё в БД -----------------*/
- //создаем запрос к БД
- $article_query = $mysqli->query("SELECT * FROM `articles` WHERE `article_link` = '".$link."'");
- // если статей в базе нет совсем
- if (mysqli_num_rows($article_query) == 0) {
- $mysqli->query("INSERT INTO `articles`(`article_link`,`article_image`,`article_title`,`article_text`)
- VALUES ('".$link."','".$image."','".$title."','".$text."')");
- } else { // если база уже не пустая,проверяем, есть ли статьи в базе
- if ($article_query === false) {
- $mysqli->query("INSERT INTO `articles`(`article_link`,`article_image`,`article_title`,`article_text`)
- VALUES ('".$link."','".$image."','".$title."','".$text."')");
- }
- }
- }
- /*------------- закрываем соединение ----------------*/
- $mysqli->close();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement