Advertisement
Guest User

Untitled

a guest
May 20th, 2017
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.47 KB | None | 0 0
  1. <?php
  2. /*-------------- ОПРЕДЕЛЯЕМ ТИП КОНТЕНТА И ПОДКЛЮЧАЕМ БИБИЛИОТЕКУ ПАРСЕРА ----------------*/
  3.  
  4.  
  5. header("Content-type: text/html; charset=utf-8");
  6. // подключаем библиотеку парсера
  7. include_once('simple_html_dom.php');
  8.  
  9.  
  10. /*------------------------------ ПОДКЛЮЧАЕМСЯ К БАЗЕ ДАННЫХ ------------------------------*/
  11.  
  12. // данные для подключения
  13. $db_host = "localhost";
  14. $db_name = "filatov";
  15. $db_user = "filatov";
  16. $db_pass = "bVG4I6CJyyqWj4xk";
  17. // подключаемся к БД
  18. $mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
  19. // задаем кодировку
  20. $mysqli->query("SET NAMES 'utf8'");
  21. // если не подключились выводим ошибки
  22. if (!$mysqli) {
  23.     echo "Ошибка: Невозможно установить соединение с MySQL." . PHP_EOL . "<br>";
  24.     echo "Код ошибки errno: " . mysqli_connect_errno() . PHP_EOL . "<br>";
  25.     echo "Текст ошибки error: " . mysqli_connect_error() . PHP_EOL . "<br>";
  26.     exit;
  27. }
  28.  
  29. /*-------------------------- МАССИВ ДЛЯ URL НОВОСТНЫХ РЕСУРСОВ ---------------------------*/
  30.  
  31. // создаем массив с ссылками на новостные ресурсы
  32. $res = [
  33.         'u-f.ru'        =>  'http://u-f.ru/show_news_all',
  34.         'mk.ru'         =>  'http://www.mk.ru/news/',
  35.         'eg.ru'         =>  'http://www.eg.ru/daily/news/',
  36.         'dni.ru'        =>  'https://dni.ru',
  37.         'rbk.ru'        =>  'http://www.rbc.ru',
  38.         'ren.tv'        =>  'http://ren.tv/novosti',
  39.         'lenta.ru'      =>  'https://lenta.ru',
  40.         'svpressa.ru'   =>  'http://svpressa.ru/all/news/',
  41.         'tvzvezda.ru'   =>  'http://tvzvezda.ru',
  42.         'rambler.ru'    =>  'https://news.rambler.ru'
  43.        ];
  44. // массив названий доменов
  45. $res_names = array_keys($res);
  46.  
  47.  
  48. /*-----------------------------------***-- U-F.RU --***-----------------------------------*/
  49. /*--------------- подключаемся к сайту ---------------*/
  50. $html = str_get_html(file_get_contents($res['u-f.ru']));
  51.  
  52. $news = $html->find('.field-content');
  53.  
  54. if(count($news)) { // ищем по html тегам
  55.     foreach ($news as $divs) {
  56.         $content[] = $divs->innertext;
  57.     }
  58. }
  59. // подчищаем за собой после получения нужных данных
  60. $html->clear();
  61. unset($html);
  62. unset($news);
  63.  
  64. /*----------- группируем полученные данные -----------*/
  65. /*
  66. удаляем лишние ссылки - с учетом количества статей в колонке и периодом обновления 5 минут более чем достаточно
  67. при $i от нуля до 39 - массив 10 статей из 4 элементов - время,ссылка,изображение,заголовок
  68. удаляем весь мусор, что после 10 статей
  69. */
  70. for($i=0;$i<1000;$i++) if($i > 39) unset($content[$i]);
  71. // группируем массив по статьям - статья состоит из 1-время, 2-ссылка на новость, 3-изображение, 4-заголовок
  72. $content = array_chunk($content,4);
  73.  
  74.  
  75. /*------------------ получаем данные -----------------*/
  76. foreach ($content as $cont) {
  77.  
  78.  
  79.     /*-------------- получаем ссылку статьи --------------*/
  80.     // заменяем локальный домен на домен входящего новостника
  81.     $link = (string)htmlspecialchars($cont[1]);
  82.     // удаляем html теги перед ссылкой
  83.     $link = stristr($link,'/');
  84.     // удаляем html теги после ссылки и сохраняем конец ссылки
  85.     preg_match_all('~\/(\d+)~',$link,$end_link);
  86.     // оставляем конечный элемент массива и переводим в строку
  87.     $end_link = implode(array_splice($end_link[0],-1));
  88.     // обрезаем все ненужное по концу ссылки
  89.     $link = stristr($link,$end_link,true);
  90.     // собираем новую ссылку
  91.     $link = "http://".$res_names[0].$link.$end_link;
  92.  
  93.  
  94.     /*------- получаем ссылку изображения статьи ---------*/
  95.     // ссылка на изображение
  96.     $image_source = htmlspecialchars($cont[2]);
  97.     // оставляем только ссылку из src
  98.     preg_match_all('/src=(\d|\w|\W)[^\s]+/',$image_source,$image_link);
  99.     // обрубаем остаточные теги. 10 и -6 это из-за кавычек и переносов
  100.     $image_link = mb_substr(implode($image_link[0]),10,-6);
  101.     // создаем массив с поддерживаемыми типами изображений
  102.     $extensions = array(1 => "gif", 2 => "jpeg", 3 => "png", 4 => "bmp");
  103.     // получаем размеры и тип изображения в виде числа
  104.     list($original_width, $original_height, $image_type) = getimagesize($image_link);
  105.     // преобразуем числовое представление в тип изображения
  106.     $image_type = $extensions[$image_type];
  107.     // кодируем изображение в base64
  108.     $image_base64 = base64_encode(file_get_contents($image_link));
  109.     //собираем изображение для последующего встраивания в src
  110.     $image = "data:image/$image_type;base64,$image_base64";
  111.  
  112.  
  113.     /*-------------- обращаемся к статье -----------------*/
  114.     // получаем данные со  страниц статей
  115.     $article_source = file_get_contents($link);
  116.  
  117.  
  118.     /*-------------- получаем заголовок -----------------*/
  119.     //вынимаем заголовок
  120.     preg_match_all('/page-title(.*?)\/h1/',htmlspecialchars($article_source),$title);
  121.     // обрезаем лишние символы
  122.     $title = mb_substr(implode($title[1]),10,-4);
  123.  
  124.  
  125.     /*------- получаем содержимое статьи ---------*/
  126.     // вынимаем содержимое статьи
  127.     preg_match_all('/field-name-body(.*?)\/div/s',$article_source,$article_content);
  128.     preg_match_all('/<p>(.*?)<\/p>/is',$article_content[0][0],$article_content);
  129.     $article_content = (implode('',$article_content[1]));
  130.  
  131.     // чистим текст
  132.     // удаляем ссылки на левые статьи
  133.     $text = preg_replace('/Читайте.также(.*?)<a.href(.*?)<\/a>/', '',$article_content);
  134.     // удаляем мусор из твиттера
  135.     $text = preg_replace('/—(.*?)\(@(.*?)\)(.*?)г./', '',$text);
  136.     // удаляем лишние пробелы
  137.     $text = preg_replace('/\s{2,}/',' ',$text);
  138.     // добавляем пробел после точек, если их нет
  139.     $text = preg_replace('/\.(?!\.)/', '. ', $text);
  140.     // добавляем пробел после точек с запятой, если их нет
  141.     $text = preg_replace('/\;(?!\.)/', '; ', $text);
  142.     // удаляем html теги
  143.     $text = strip_tags($text);
  144.     var_dump($text);
  145.     // получаем ссылки на видео с ютуба
  146.     preg_match_all('/\/\/www.youtube.com(.*?)\"/',$article_content,$youtube);
  147.     // если ссылка на ютуб есть то
  148.  
  149.     echo "<br><br>";
  150.  
  151.  
  152.     /*-------------- сохраняем всё в БД -----------------*/
  153.     //создаем запрос к БД
  154.     $article_query = $mysqli->query("SELECT * FROM `articles` WHERE `article_link` = '".$link."'");
  155.     // если статей в базе нет совсем
  156.     if (mysqli_num_rows($article_query) == 0) {
  157.         $mysqli->query("INSERT INTO `articles`(`article_link`,`article_image`,`article_title`,`article_text`)
  158.                                            VALUES ('".$link."','".$image."','".$title."','".$text."')");
  159.     } else { // если база уже не пустая,проверяем, есть ли статьи в базе
  160.         if ($article_query === false) {
  161.             $mysqli->query("INSERT INTO `articles`(`article_link`,`article_image`,`article_title`,`article_text`)
  162.                                            VALUES ('".$link."','".$image."','".$title."','".$text."')");
  163.         }
  164.     }
  165. }
  166.  
  167. /*------------- закрываем соединение ----------------*/
  168. $mysqli->close();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement