Home > SEO, Blog, News > Делаем новости на сайте

Делаем новости на сайте

Как и обещал, по-тихоньку начинаю заполнять главную страницу (морду) сайта. Решил начать с новостных лент. Это сделает вид морды не таким уже скучным, и плюс ко всему, люблю я на обеде почитать новости, а чтоб не рыскать в поисках интересующих меня тематик, очень удобно собрать их у себя на сайте. Частенько, кстати, на различных программерских форумах новички вопрошают, дескать, как бы так сделать, чтоб новости сами собой появлялись на нашем сайте? Опишу один способ. Существует в интернете множество новостных сайтов, или порталов с новостными разделами. Помимо чтения новостей непосредственно на самом сайте, этими же сайтами предоставляются RSS-ленты (RSS-feeds). Что такое рсс, думаю, не стоит объяснять. И так, делаем в базе данных пару master-detail табличек (источники, и сами новости), берем несколько интересующих нас фидов (я взял с яндекса), пишем робота, который будет читать из таблиц источников URL этих фидов (на самом деле, можно было и в php-файле держать в виде массива – дело вкуса), затем получать по этому URL и парсить RSS-файл, содержимое которого представляет собой XML-документ, и ставим этого робота на график. Я поставил ежечасно. Теперь самое приятное – делаем отображение новостей на нашем сайте. Делаем выборку последних новостей, и отображаем с красивым оформлением. Потом меня посетила мысль сделать так, чтобы последний пост в блоге отображался на морде в такой же манере, как и новости. Попутно узнал о теге <!–more–> в WordPress’e. Это для того, чтоб на главной странице блога не отображался весь пост, а только первая его часть, как раз по то место в тексте, где встречается этот тег. В месте разрыва на главной странице помещается ссылка Читать далее, перейдя по которой попадаем на страницу поста, где он опубликован уже в полном объеме. Попутно узнал, что у этого тега есть расширенное применение: можно написать <!–more И в этот момент… –>, и тогда вместо слов Читать далее в ссылке будет эта фраза “И в этот момент…”. Но лично я особой эстетики в этом не нахожу.
Еще немножко о SEO. Поисковые системы не любят дублирующий контент, плагиат, зеркала, сателлиты, дорвеи, и всячески пытаются с ними бороться накладыванием на злоупотребляющих различных непот-фильтров, посылкой в бан или выпадом из индекса. И вряд ли тому же яндексу понравится, если он обнаружит фрагменты своих лент на чужом сайте. Другое дело, если этот сайт разместил ссылку на источник. Именно так я и поступил. Яндекс останется доволен, а я смогу почитать полную версию заинтересовавшей меня новости. Кроме того, все новости заключил в тег <NOINDEX> – это предотвратит учет поисковыми роботами всех ссылок, находящихся внутри этого тега, и как следствие, передачу индексов цитирования от меня и без того крутому яндексу.
В планах дальнейшего оживления морды – прикрутка курсов валют, прогноза погоды, тв-передач и радио-эфиров.
И еще на последок. Где-то с неделю назад ко мне заходил первый спам-бот и оставил сообщение через комментарии. Уж не знаю, как они меня нашли, я пока ни в каких поисковиках не регистрировал сайт.

  1. Dimas
    February 10th, 2011 at 16:05 | #1

    Решил ещё раз повторить…
    Эта строчка вызвала у меня громадный интерес…..
    “пишем робота, который будет читать из таблиц источников URL этих фидов”
    Расскажите пожалуйста по подробнее..

  2. February 13th, 2011 at 13:58 | #2

    так собственно, методика такая же, как и в парсере тв-программы.
    берем новостную ленту, например, новости науки на яндексе
    http://news.yandex.ru/Russia/science.rss
    получаем контент

    $xmlstr = file_get_contents($rss);

    парсим xml формат

    $xml = simplexml_load_string($xmlstr);

    далее делаем цикл по коллекции элементов RSS

      $cnt = 0;
        foreach ( $xml->children()->children() as $item ) 
          if (process_item($src['rss_source_id'], $item)) $cnt++;else error_log($mysqli->error); 
        error_log( "channel updated (" . $cnt . ")\n");

    точно также две master-detail таблицы, одна – заголовки новостных лент, вторая – строки RSS (сами новости). функция process_item – аналог process_programme из парсера тв-программ.
    другие новостные ленты можно найти также на яндексе. или еще где.

  3. Dimas
    February 13th, 2011 at 15:44 | #3

    ОК… А можно выложить именно Ваш вариант……

  4. Dimas
    February 14th, 2011 at 17:13 | #4

    А как всё таки парсятся картинки….

  5. Dimas
    February 15th, 2011 at 04:09 | #5

    Думаю, что эта информация должна размещаться здесь….

    Идея простая, робот, который парсит новостные ленты и обновляет их на сайте, загружает страницу по ссылке из ленты, парсит ее, находит ссылку на картинку, и сохраняет файл картинки в папке с изображениями.

    Можно Вас попросить выложить пример кода, чтобы посмотреть как это выглядит…

  6. February 15th, 2011 at 10:14 | #6

    Сегодня выложу… если до полуночи домой попаду)

  7. Dimas
    February 15th, 2011 at 13:10 | #7

    Отлично! Выразил Вам свою благодарность ;)

  8. February 16th, 2011 at 01:19 | #8
    //Функция граббинга картинки из новостной ленты.
    //Вызывается после вставки новости в таблицу
    //$url - ссылка на статью из RSS, $id - идентификатор строки новости в нашей таблице
      function grab_pic($url,$id) {
    //Получаем контент страницы с новостью - в ней где-то прячется картинка
         $c = file_get_contents($url);
    //ищем в html-коде url картинки
         if (!$c) return false;
         $p = strpos($c,'[dd class="photo g-line"]');
         if (!$p) return false;
         $p2 = strpos($c, '[/dd]');
         if (!$p2) return false;
         $c = substr($c, $p, $p2 - $p);
         $p =strpos($c, 'src="');
         if (!$p) return false;
         $p2 =strpos($c, '"', $p + 5);
         if (!$p) return false;
         $c = substr($c, $p+5, $p2 - $p - 5);
    //Если дошли до этого места, значит картинку нашли. Сохраняем на диске
         file_put_contents('/path_to_html_dir/img/news/'.date('Ymd').'_'.$id, file_get_contents($c));
      }

    Я решил сохранять картинки в формате YYYYMMDD_ID, чтоб потом легко было удалять старые картинки, но пока что необходимости в этом нет – средний размер картинки 6Кб. На некоторых страницах нет картинки, поэтому, если робот ее там не нашел, то и на диске файла не появится.
    Ну а изобразить страницу с новостями на своем сайте, имея данные в базе и картинки на диске – дело техники.

    ps квадратные скобки в примере [] нужно заменить на треугольные < > – у вордпрессовского плагина подсветки синтаксиса какие-то нелады с треугольными скобками.

  9. Dimas
    February 16th, 2011 at 01:32 | #9

    И всё таки можно выложить Ваш скрипт здесь целиком в архиве. Моя благодарность будет безграничной :)

  10. Dimas
    March 2nd, 2011 at 06:50 | #10

    В плане SEO есть ли смысл закрывать ссылки на Яндекс тегом nofollow

  11. serhio
    March 3rd, 2011 at 12:05 | #11

    Отвечу за автора (он сейчас очень занят).
    Официальной информации о том, учитывает ли Яндекс аттрибут nofollow нет, но и против него он ничего не имеет. Вердикт таков: nofollow можно использовать без какого-либо опасения санкций со стороны Яндекса. Однако, злоупотреблять им не стоит, иначе гугл может счесть ресурс линкопомойкой и сделать что-нибудь нехорошее. Например, понизить в выдаче или списать PR.