Главная > SEO, Блог, Новости > Делаем новости на сайте

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

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

  1. Dimas
    10 February 2011 в 16:05 | #1

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

  2. 13 February 2011 в 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
    13 February 2011 в 15:44 | #3

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

  4. Dimas
    14 February 2011 в 17:13 | #4

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

  5. Dimas
    15 February 2011 в 04:09 | #5

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

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

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

  6. 15 February 2011 в 10:14 | #6

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

  7. Dimas
    15 February 2011 в 13:10 | #7

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

  8. 16 February 2011 в 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
    16 February 2011 в 01:32 | #9

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

  10. Dimas
    2 March 2011 в 06:50 | #10

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

  11. serhio
    3 March 2011 в 12:05 | #11

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

Подписаться на комментарии по RSS