Вывод новостей с rss другого сайта

Тема в разделе "Как сделать...", создана пользователем Yus, 25 мар 2009.

Статус темы:
Закрыта.
  1. Yus

    Yus

    Регистр.:
    12 янв 2008
    Сообщения:
    255
    Симпатии:
    71
    Гуру php и подобные, к вам насущный вопрос;)

    Цель.
    Есть статичная страничка на моём сайте - news.php
    Нужно, чтобы на ней выводились новости с нескольких других сайтов, с их rss.

    То есть нужно, чтобы заходя на страничку пользователь видел заголовок новости, саму новость и ссылку на источник. Чтобы можно было вставить ЭТО инклудом в news.php и настроить через стили всё это.

    Думаю, что реализовать это не трудно. Может кто сталкивался? или есть готовые скрипты?:nezn:

    Заранее безмерно благодарен!
     
  2. Yus

    Yus

    Регистр.:
    12 янв 2008
    Сообщения:
    255
    Симпатии:
    71
    Может кто-нибудь всё-таки сталкивался с подобным?! вопро-то вроде бы элементарен....
     
  3. virtualbrest

    virtualbrest

    Регистр.:
    6 май 2007
    Сообщения:
    210
    Симпатии:
    18
    Вот тебе образец кода, дальше сам, надеюсь... Если нет, пиши чего непонятно, хотя чего уж тут непонятного... Все банально просто:

    PHP:
    <?
    $file file_get_contents('http://news.tut.by/rss/all.rss');

    $file1 preg_match_all('|<description>(.+)</description>|U',$file,$frazes);
    $file1 preg_match_all('|<title>(.+)</title>|U',$file,$title);
    $file1 preg_match_all('|<link>(.+)</link>|U',$file,$link);
    $file1 preg_match_all('|<pubDate>(.+)</pubDate>|U',$file,$pub);


    for(
    $i=2;$i<15;$i++){ 

    echo 
    "<p><div id=header><a target=_blank href=".$link[1][$i]."><b>".$title[1][$i]."</b></a> ".$pub[1][$i-2]."<br>".$frazes[1][$i-1]."\r\n</div></p>";
    }
    ?> 
     
    Yus нравится это.
  4. Yus

    Yus

    Регистр.:
    12 янв 2008
    Сообщения:
    255
    Симпатии:
    71

    Огромная, конечно, благодарность. Эх...бъю себя по рукам, что не учил php когда на это было время.

    ps теперь чтобы перефигачить это добро под rss ленту с яндекса убью неделю:D

    Добавлено через 16 минут
    Смотри, немного изменил вывод, у меня получился такой код:
    PHP:
    <?
    $file file_get_contents('http://news.yandex.ru/Russia/metallurgy.rss');

    $file1 preg_match_all('|<description>(.+)</description>|U',$file,$frazes);
    $file1 preg_match_all('|<title>(.+)</title>|U',$file,$title);
    $file1 preg_match_all('|<link>(.+)</link>|U',$file,$link);
    $file1 preg_match_all('|<pubDate>(.+)</pubDate>|U',$file,$pub);


    for(
    $i=2;$i<10;$i++){ 

    echo 
    "<p><b>".$title[1][$i]."</b><br>Дата: ".$pub[1][$i-2]."<br>".$frazes[1][$i-1]."<br><a target=_blank href=".$link[1][$i].">Источник</a>\r\n</p>";
    }
    ?> 
    И такой результат:
    Вопрос №1:
    Как сделать вывод даты в формате не как сейчас, а например:
    Вопрос №2:
    Хочу сделать вывод источника как:
    А если просто выставляю .$link[1][$i]. в анкор, то выдаёт какую-то хрень.
    Вопрос №3:
    Можно ли добавить две яндекс ленты в источники? ли три? чтобы он их вместе обрабатывал и выводил?
     
  5. NoN

    NoN Постоялец

    Регистр.:
    25 ноя 2008
    Сообщения:
    79
    Симпатии:
    33
    есть функция удобаня очень

    Код:
    $url = 'http://';       //адрес RSS ленты  
    $rss = simplexml_load_file($url); //Интерпретирует XML-файл в объект  
    //цикл для обхода всей RSS ленты  
    
    foreach ($rss->channel->item as $item) 
    {  
    print_r($item)
    
    //echo $item->pubDate;
    }

    Данные лучше писать в базу и потом выводить на сайт, или генерировать статический сайт по расписанию и инклудить его потом.
     
    virtualbrest и Yus нравится это.
  6. virtualbrest

    virtualbrest

    Регистр.:
    6 май 2007
    Сообщения:
    210
    Симпатии:
    18
    PHP:
    <br><a target=_blank href=".$link[1][$i].">Источник</a>\r\n</p>
    у себя замени на это:

    PHP:
    <br>Источник: <a target=_blank href=".$link[1][$i].">".$link[1][$i]."</a>\r\n</p>
    По поводу даты - надо ее форматировать, см. документацию к PHP, выбирай какой тебе надо формат, мне счас просто некогда копаться. По идее должно работать, хотя не проверял, проверь.

    Вставояй скока хош себе лент, но на каждую по такому циклу, но учти, что это ж идет запрос к удаленному среверу + обработка ответа, короче если по правильному, то тебе NoN написал, как надо. Впрочем, для 1 ленты сойдет.
     
    Yus нравится это.
  7. Asin

    Asin

    Регистр.:
    18 авг 2008
    Сообщения:
    621
    Симпатии:
    390
    Под WordPress есть готовые решения. Даже не одно и не два ... :)
     
  8. virtualbrest

    virtualbrest

    Регистр.:
    6 май 2007
    Сообщения:
    210
    Симпатии:
    18
    Хороший способ, мне понравилось :) Выкладываю готовое решение для вашего способа:

    Код:
    <ul><?
    
    $url = 'http://news.tut.by/rss/index.rss'; // поставить адрес ленты
    $rss = simplexml_load_file($url);
    
    foreach ($rss->channel->item as $item)
    {
    
    $rss1 = $item->link;
    echo "<li><a href=".$rss1."><b>".$item->title."</b></a> <small>".$item->pubDate."</small> <br>
    <blockquote>".$item->description."</blockquote>";
    }
    
    ?></ul>
     
  9. oneathome

    oneathome

    Регистр.:
    6 фев 2007
    Сообщения:
    159
    Симпатии:
    5
    virtualbrest как ограничить кол-во новостей Можно ли таким способом забрать полную новость?
     
  10. medvoodoo

    medvoodoo Постоялец

    Регистр.:
    28 мар 2007
    Сообщения:
    89
    Симпатии:
    19
    ограничеть кол-во можно счетчиком, что то типо:
    PHP:
    $i 1;
    $n 5;
    foreach...
    if(
    $i<$n) break;
    $i++;
    полностью новости в RSS не публикуются, вам тогда по ссылке надо забирать новость и парсить ее.
     
    oneathome нравится это.
Статус темы:
Закрыта.