IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Rss - как экспортировать себе на сайт (http://www.imho.ws/showthread.php?t=59778)

Folder 25.05.2004 20:43

Rss - как экспортировать себе на сайт
 
Сейчас много сайтов предлагают экспорт новостей в формате RSS, предлагая для этого УРЛ типа _http://news.yandex.ru/index.rss.
Так вот, у меня есть сайт, и я хочу размещать их новости, что надо для это сделать?

RaZEr 25.05.2004 20:47

http://spectator.ru/technology/web-b...SS_for_dummies

Folder 26.05.2004 01:17

Я там читал, только ничего не понял...
Ты можешь на конкретнои примере привести, что надо прописать в php?

RaZEr 26.05.2004 01:34

PHP код:

<? 
// кешируем RSS файлик 
// место куда пишем файлик кэша 
$filename $_SERVER['DOCUMENT_ROOT']."/cache/phpnews.rss"

// проверяем насколько старый файлик 
$modif=time()-@filemtime ("$filename"); 

// если в кэше нет файла или он слишком старый - обновляем 
if(!file_exists($filename) || $modif>"3600"
  { 
   
$rss file_get_contents("http://www.php.net/news.rss"); 
     
   
$handle fopen ("$filename""w"); 
    
   
fwrite($handle$rss); 
     
   
fclose($handle); 
  } 


// подключаем либу из набора PEAR для разбора rss 
require_once("XML/RSS.php"); 

     
    
$rss =& new XML_RSS("$filename"); 

    
$rss->parse(); 
                        
    foreach (
$rss->getItems() as $value) { 
     
            
//VAR_DUMP($value); exit;  //- это так на всякий случай если надо посмотреть что там лежит :-) 
              
            // формируем строку с новостями 
            
$page $page."<b>".$value['dc:date']."</b><a href=\"".$value['link']."\" class=\"menu\">"."&nbsp;".$value['title']. "</a><br>" .$value['description'] . "\n"
    }    

// выводим все что получили 
echo"$page";
?>


Folder 27.05.2004 04:08

RaZEr, спасибо за желание помочь!
но я все равно не смог разобраться в этом :idontnow:
придется оставить эту затею.

Wild Diablo 01.11.2004 01:53

А можете показать готовый php код, который бы работал?
Например который бы показывал:
_http://news.yandex.ru/index.rss
на моей страничке.
:help:

Hubbitus 01.11.2004 15:13

Цитата:

Wild Diablo:
А можете показать готовый php код, который бы работал?
А что код RaZEr'а не готовый, или не работает? Проставьте свои пути и имена файлов и все пучком.

Sych 01.11.2004 19:02

кушайте не обляпайтесь :-) http://www.php.com.ua/tips/18/ добавлена поддержка php5 :-) теперь все стало проще.

CATCHed 23.11.2004 00:31

http://www.feedforall.com/

svoy 23.11.2004 02:37

нам-бы кряку к ней

Goryn 21.12.2004 21:53

Воспользовался приведенным выше скриптом. Выдается ошибка:

Warning: main(XML/RSS.php): failed to open stream: No such file or directory in /usr/home/.../index1.php on line 160

Fatal error: main(): Failed opening required 'XML/RSS.php' (include_path='.:/usr/local/lib/php') in /usr/home/.../index1.php on line 160


К чему бы это? И как это побороть?

RaZEr 21.12.2004 22:02

Зайди на сайт PEAR (pear.php.net), скачай библиотеку для работы с RSS и поставь.

fuldon 26.04.2005 21:32

А может быть есть специальные скрипты для этих целей?
Или даже программые продукты.

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

Если кто-то использует на своем сайте, покажите как у вас это выглядит. :)

Goryn 26.04.2005 22:14

miXei, а в чем проблема? Используешь все вышесказанное. Что тебе мешает в зависимости от запроса использовать тот или иной файл в твоем кеше и соостветсвующий ему источник. Например до скрипта
RaZEr используешь конструкцию что-то вроде

Код:

switch ($cod)
{
  case 'news1':
  $filename="...";
  $rss_url="http://...";
  break;
 ...
  default:
  $filename="...";
  $rss_url="http://...";
  break;
}

$cod - это параметр в URL, например (если этот фрагмент лежит в скрипте news.php):

_http://www.yourdomen.ru/news.php?cod=news1

Потом просто меняешь соответсвующую строку на

$rss = file_get_contents($rss_url);

Еще можно загнать эти два параметра для каждого варианта в массив. И забирать их оттуда по индексу, передаваемому опять же в URL.

Sych 27.04.2005 12:01

Для особых танкистов - пример

Доработать напильником до нужного состояния.

Goryn 18.08.2005 22:01

А может подсказать подобный код для Perl?

Hubbitus 19.08.2005 11:24

Цитата:

Goryn:
А может подсказать подобный код для Perl?
Дак полно же их библиотек с цпане:
http://cpan.uwinnipeg.ca/dist/RSS-Parser-Lite
http://cpan.uwinnipeg.ca/dist/HTML-RSSAutodiscovery
http://cpan.uwinnipeg.ca/dist/XML-RSS
http://cpan.uwinnipeg.ca/dist/XML-RSS-Feed
http://cpan.uwinnipeg.ca/dist/XML-RSS-Parser
http://cpan.uwinnipeg.ca/dist/XML-RSSLite
http://cpan.uwinnipeg.ca/dist/XML-RSS-LibXML
http://cpan.uwinnipeg.ca/dist/XML-RSS-TimingBot
.....
Вобщем выбор-то огромный - http://cpan.uwinnipeg.ca/dist/XML/

Goryn 19.08.2005 13:48

а как удаленный файл получить? какой есть аналог

$rss = file_get_contents("http://www.php.net/news.rss");

?

Hubbitus 22.08.2005 14:58

Цитата:

Goryn:
а как удаленный файл получить? какой есть аналог
Например CURL:
вот пример http://cvs.sourceforge.net/viewcvs.p...viewcvs-markup
http://curl.haxx.se/libcurl/perl/
А вообще, как всегда, вариантов несколько, еще один популярный для ПЕРЛа libwww: http://lwp.linpro.no/lwp/

P.S. Если даже файл на ПЕРЛе не прочитать самостоятельно, может и не стоит тогда на нем писать? :confused: :)

Deeger 07.09.2005 13:33

Скажите как с моего сайта сделать чтоб мои новости экспортировали???

У меня формат файла не rss и не xml ! А формат .php который выглядит как rss.... Скажите код для вывода его ?

Hubbitus 07.09.2005 13:39

Цитата:

Deeger:
А формат .php который выглядит как rss....
Формат скрипта PHP не может выглядеть как rss, ведь rss - это XML, а ПХП - скриптовой язык программирования, синтаксис у них даже рядом не стоял!

А если вы выводите на PHP свои новости в формате RSS, то никаких проблем и нету - просто кто-то может себе экспортировать указанным выше способом вывод этих данных, главное чтобы отдаваемый Вами документ был валиден.

Goryn 13.07.2006 10:50

Решил я тут все-таки написать аналогичный скрипт на Perl.
Нам понадобятся два модуля:

LWP::Simple - взятие содержимого файла с другого сайта
XML::RSS - парсер для RSS. Если вы его ставите, то в подкаталог Perl, где лежат файлы .enc модуля необходимо скопировать соответсвующие файлы с тем же расширением из этого архива
cyrillic - модуль для работы и конвертирования кириллического текста.


Вот сам код:

Код:

use LWP::Simple;
 use XML::RSS;
 use cyrillic;
 my $filr="имя_файла_для_хранения_RSS_на вашем_сайте";
 my $urls="URL_RSS-ленты";
 $ll=time();
 @fileatr=stat($filename);
 $modif=$ll-$fileatr[9];
 if ( !$fileatr[9] || ($modif > 3600) ) {
  $rsscont = get($urls);
  open (RSF, ">$filename");
  print RSF $rsscont;
  close RSF;
 }
 my $rss=XML::RSS -> new;
 $rss -> parsefile($filename);       
 $inews=0;
 my @items=@{$rss -> {items}};
 foreach my $item (@items) {
  $aa=$item -> {'title'}; # Заносим в переменную $aa очередной заголовок
  $aa=cyrillic::convert( utf, win, $aa ); # Переводим из юникода
  $bb=$item -> {'link'}; # Заносим в переменную $bb адрес этого поста
  print "<br>$aa --- $bb "; # Выводим в нужном нам виде
 }

Если кто может предложить более простое решение - буду рад.

Goryn 13.07.2006 12:05

Методом неимоверных научных тыков нашел как решить проблему под Windows. Соответсвующие изменения внес в предыдущий пост. Потом попробую у хостера под Unix все опробовать - у него модули ставить надо.

Sych 13.07.2006 13:24

search.cpan.org/dist/Text-Iconv/Iconv.pm

Goryn 14.07.2006 14:15

Первый раз в суппорте мне сказали "ставьте модули себе"... Пришлось осваивать эту науку. В результате у меня появилось впечатление, что ActivePerl под винды при установке модуля сразу смотрит какие ему нужны и ставит и их. Потому что мне пришлось много чего ставить. Итак, полный список необходимых модулей:

LWP::Simple (как правило у хостеров стоит уже)
XML::RSS + Russian encodings pack
cyrillic
XML::Parser
Unicode::String

После того, как поставил все необходимое, приведенный скрипт заработал. Теперь у меня такая проблема: в RSS дата и время поста храниться в подобном виде:

Fri, 23 Jun 2006 14:18:08 +0300

Можно из этого как то просто сформировать дату и время в более удобоваримом виде? Особенно дату, чтобы месяц был по русски? Я пока просто убрал "лишнее":

Код:

  $cc=$item -> {'pubDate'};
  $cc=~ s/^\S{4}\s//igm;
  $cc=~ s/:\d{2}\s\+\d*$//igm;

Может кто что простое предложит?

Saruman 16.07.2006 01:08

если есть Date::Manip, можно просто им распарсивать исходную строку, после чего снова собирать ее в нужный стринг. К примеру:
Код:

use Date::Manip;

$string = 'Fri, 23 Jun 2006 14:18:08 +0300';
$date = ParseDate($string);

print &UnixDate($date, "%b %e, %Y, %T");


xmaker 23.07.2006 17:21

Есть много скриптов которым только дай адрес они тебе сами все экспортируют и выдят как нужно... к примеру rssEcualizer, Auto Blog Builder и т.д... но их целесообразно ипользовать если нужно грабить много фидов если с одного то лучше скрипт пройтой взять.


Часовой пояс GMT +4, время: 11:45.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.