Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: новости RSS
 
 автор: Mefisto84   (02.01.2007 в 17:47)   письмо автору
 
 

Здравствуйте!
Ничего путного не могу найти по поводу того как работать с RSS? Подскажите пожалуйста, может где информацию можно найти подробную, так как сталкиваюсь с этим в первый раз. Вот к примеру на яндексе есть ссылка на файл .rss, так понимаю что с ним нужно что-то делать, а что именно? Что нужно сделать что бы повесить новости на сайте?
Заранее благодарен.

   
 
 автор: cheops   (02.01.2007 в 22:13)   письмо автору
 
   для: Mefisto84   (02.01.2007 в 17:47)
 

Вы хотите генерировать RSS-рассылку или наоборот читать RSS-ленту новостей и выводить их на своём сайте?

   
 
 автор: technic611   (03.01.2007 в 07:50)   письмо автору
 
   для: cheops   (02.01.2007 в 22:13)
 



<?php 
$text 
file_get_contents("адрес rss"); 


if(
$text)
{
 
$Months=array('Jan'=>'01''Feb'=>'02''Mar'=>'03''Apr'=>'04''May'=>'05''Jun'=>'06''Jul'=>'07''Aug'=>'08''Sep'=>'09','Oct'=>'10','Nov'=>'11','Dec'=>'12'); 
$Days=array('Mon'=>'Пн''Tue'=>'Вт''Wed'=>'Ср''Thu'=>'Чт''Fri'=>'Пт''Sat'=>'Сб''Sun'=>'Вс');



$pattern "/<item>(.*?)<\/item>/ims";/* регулярное выражения для выбора данных между двумя тегами <item></item>*/ 
preg_match_all($pattern$text$array); 
 


$patt1 "/<title>(.*?)<\/title>/ims";/*Заголовок новости*/ 
$patt2 "/<description>(.*?)<\/description>/ims";/*тело новости*/ 
$patt3 "/<pubDate>(.*?)<\/pubDate>/ims";/*дата публикации*/ 
$patt4 "/<link>(.*?)<\/link>/ims";/*ссылка на сайт новостей*/ 
$i=0
foreach (
$array[1] as $v){ 
preg_match_all($patt1$v$temp); 
$news[$i]['title'] = $temp[1][0]; 
preg_match_all($patt2$v$temp); 
$news[$i]['description'] = html_entity_decode($temp[1][0]); 
/*php автоматически переконвертил html символы поэтому вернем все обратно :)*/ 
preg_match_all($patt3$v$temp); 
$news[$i]['pubDate'] = $temp[1][0]; 
preg_match_all($patt4$v$temp); 
$news[$i]['link'] = urldecode($temp[1][0]); 
$i++; 



foreach (
$news as $v){ 

foreach(
$Days as $EngName => $RusName
               
$v['pubDate']=str_replace($EngName$RusName$v['pubDate']); 
foreach(
$Months as $EngName => $RusName
$v['pubDate']=str_replace($EngName$RusName$v['pubDate']);
$v['link']=str_replace(адрес страницы с файлом rss$v['link']);
 
$v['pubDate']=str_replace(GMT""$v['pubDate']);
$v['pubDate']=rtrim($v['pubDate']);
echo 
"<div class=news_title><br><a  href=".$v['link'].">".$v['title']."</a></div><a class=answers>".$v['description']."<font color='#666666'> [".$v['pubDate']."]"

}
?> 

   
 
 автор: Mefisto84   (03.01.2007 в 09:31)   письмо автору
 
   для: technic611   (03.01.2007 в 07:50)
 

Да, я хочу повесить у себя на сайте новости с Яндекса. А это так понимаю Вы мне дали прям готовый уже скрипт? Он разбирает RSS файл? Правильно? Большое спасибо, вот уж не ожидал.

   
 
 автор: Mefisto84   (03.01.2007 в 20:45)   письмо автору
 
   для: Mefisto84   (03.01.2007 в 09:31)
 

Появился один вопрос, проверил скрипт он все правильно разбирает, все работает, кроме одного. Он не правильно указывает ссылку на новость. То есть сам текст ссылки он пишет правильно, а вот при нажатии на ссылку он переходит на главную страницу моего сайта. Подскажите пожалуйста в чем причина?
Заранее благодарен.

   
 
 автор: Mefisto84   (15.01.2007 в 21:11)   письмо автору
 
   для: Mefisto84   (03.01.2007 в 20:45)
 

Ну что никто не подскажет что-ли? Может я не правильно объяснил. Скажу по-другому, в общем когда выводится ссылка на новость, <a href="здесь не правильно выводится ссылка">Здесь все нормально</a>. То есть сам текст который выводится на экран пишется правильно, а именно адрес пишется не правильно. Где тут нужно поправить в коде?

   
 
 автор: mozhunt   (16.01.2007 в 00:09)   письмо автору
 
   для: Mefisto84   (15.01.2007 в 21:11)
 

все работает :) спасибо.
Только в <a href="выводится название сайта :) ">

   
 
 автор: Mefisto84   (16.01.2007 в 09:38)   письмо автору
 
   для: mozhunt   (16.01.2007 в 00:09)
 

что-то я не въехал, последнее сообщение вообще о чем? я наю что там выводится, я прошу подсказать как это исправить.

   
 
 автор: mozhunt   (17.01.2007 в 20:00)   письмо автору
 
   для: Mefisto84   (16.01.2007 в 09:38)
 

Я тоже незнаю :)

   
 
 автор: mozhunt   (27.01.2007 в 19:02)   письмо автору
 
   для: mozhunt   (17.01.2007 в 20:00)
 

возник вопрос: а как его изменить,чтобы он выдирал только 5 новостей.. или 10?

знаю,что нужно цикл поставить,но вот куда...

   
 
 автор: technic611   (28.01.2007 в 05:03)   письмо автору
 
   для: mozhunt   (27.01.2007 в 19:02)
 


<?php  
$text 
file_get_contents("http://localhost/rss.xml");  


if(
$text

 
$Months=array('Jan'=>'01''Feb'=>'02''Mar'=>'03''Apr'=>'04''May'=>'05''Jun'=>'06''Jul'=>'07''Aug'=>'08''Sep'=>'09','Oct'=>'10','Nov'=>'11','Dec'=>'12');  
$Days=array('Mon'=>'Пн''Tue'=>'Вт''Wed'=>'Ср''Thu'=>'Чт''Fri'=>'Пт''Sat'=>'Сб''Sun'=>'Вс'); 



$pattern "/<item>(.*?)<\/item>/ims";/* регулярное выражения для выбора данных между двумя тегами <item></item>*/  
preg_match_all($pattern$text$array);  
  


$patt1 "/<title>(.*?)<\/title>/ims";/*Заголовок новости*/  
$patt2 "/<description>(.*?)<\/description>/ims";/*тело новости*/  
$patt3 "/<pubDate>(.*?)<\/pubDate>/ims";/*дата публикации*/  
$patt4 "/<link>(.*?)<\/link>/ims";/*ссылка на сайт новостей*/  
$i=0;  
foreach (
$array[1] as $v){  
preg_match_all($patt1$v$temp);  
$news[$i]['title'] = $temp[1][0];  
preg_match_all($patt2$v$temp);  
$news[$i]['description'] = html_entity_decode($temp[1][0]);  
/*php автоматически переконвертил html символы поэтому вернем все обратно :)*/  
preg_match_all($patt3$v$temp);  
$news[$i]['pubDate'] = $temp[1][0];  
preg_match_all($patt4$v$temp);  
$news[$i]['link'] = urldecode($temp[1][0]);  
$i++;  

}  
$i=0;

foreach (
$news as $v){  

foreach(
$Days as $EngName => $RusName)  
               
$v['pubDate']=str_replace($EngName$RusName$v['pubDate']);  
foreach(
$Months as $EngName => $RusName)  
$v['pubDate']=str_replace($EngName$RusName$v['pubDate']); 
 
$v['pubDate']=str_replace(GMT""$v['pubDate']); 
$v['pubDate']=rtrim($v['pubDate']); 
if(
$i<5)
{
echo 
"<div class=news_title><br><a  href=".$v['link'].">".$v['title']."</a></div><a class=answers>".$v['description']."<font color='#666666'> [".$v['pubDate']."]";  
}
$i++;
}  

?>

   
 
 автор: Footer   (11.02.2007 в 13:56)   письмо автору
 
   для: technic611   (28.01.2007 в 05:03)
 

Не знаю, почему, но у меня не получается запустить этот скрипт. Вот, я делаю так:

<?php  
$text 
file_get_contents("http://news.yandex.ru/theaters.rss");  


if(
$text

 
$Months=array('Jan'=>'01''Feb'=>'02''Mar'=>'03''Apr'=>'04''May'=>'05''Jun'=>'06''Jul'=>'07''Aug'=>'08'

'Sep'=>'09','Oct'=>'10','Nov'=>'11','Dec'=>'12');  
$Days=array('Mon'=>'Пн''Tue'=>'Вт''Wed'=>'Ср''Thu'=>'Чт''Fri'=>'Пт''Sat'=>'Сб''Sun'=>'Вс'); 



$pattern "/<item>(.*?)<\/item>/ims";/* регулярное выражения для выбора данных между двумя тегами <item></item>*/  
preg_match_all($pattern$text$array);  
  


$patt1 "/<title>(.*?)<\/title>/ims";/*Заголовок новости*/  
$patt2 "/<description>(.*?)<\/description>/ims";/*тело новости*/  
$patt3 "/<pubDate>(.*?)<\/pubDate>/ims";/*дата публикации*/  
$patt4 "/<link>(.*?)<\/link>/ims";/*ссылка на сайт новостей*/  
$i=0;  
foreach (
$array[1] as $v){  
preg_match_all($patt1$v$temp);  
$news[$i]['title'] = $temp[1][0];  
preg_match_all($patt2$v$temp);  
$news[$i]['description'] = html_entity_decode($temp[1][0]);  
/*php автоматически переконвертил html символы поэтому вернем все обратно :)*/  
preg_match_all($patt3$v$temp);  
$news[$i]['pubDate'] = $temp[1][0];  
preg_match_all($patt4$v$temp);  
$news[$i]['link'] = urldecode($temp[1][0]);  
$i++;  

}  

foreach (
$news as $v){  

foreach(
$Days as $EngName => $RusName)  
               
$v['pubDate']=str_replace($EngName$RusName$v['pubDate']);  
foreach(
$Months as $EngName => $RusName)  
$v['pubDate']=str_replace($EngName$RusName$v['pubDate']); 
$v['link']=str_replace("http://news.yandex.ru/theaters.rss"$v['link']); 
 
$v['pubDate']=str_replace(GMT""$v['pubDate']); 
$v['pubDate']=rtrim($v['pubDate']); 
echo 
"<div class=news_title><br><a  href=".$v['link'].">".$v['title']."</a></div><a class=answers>".$v['description']."<font 

color='#666666'> ["
.$v['pubDate']."]";  
}  

?> 

В месте, где должен быть текст, выдаваемый скриптом, ничего нет. Подскажите, что я делаю не так?

   
 
 автор: Footer   (11.02.2007 в 16:25)   письмо автору
 
   для: Footer   (11.02.2007 в 13:56)
 

Хелп! Помогите! Плиз! Никак не разберусь!

   
 
 автор: Footer   (12.02.2007 в 14:39)   письмо автору
 
   для: Footer   (11.02.2007 в 16:25)
 

Жду помощи! Хелп! Помогите разобраться! Плиз!

   
 
 автор: Mefisto84   (12.02.2007 в 17:39)   письмо автору
 
   для: Footer   (12.02.2007 в 14:39)
 

Вот этот же скрипт, с которым я тогда мучался, после немногих изменений(проблемы были с функцией urldecode) он заработал, а до этого и у меня не работал. Короче вот работающая версия, которой я пользуюсь, как гвоорится проверено :-) :


$text = file_get_contents("адрес файла rss");  


if($text) 

 $Months=array('Jan'=>'01', 'Feb'=>'02', 'Mar'=>'03', 'Apr'=>'04', 'May'=>'05', 'Jun'=>'06', 'Jul'=>'07', 'Aug'=>'08', 'Sep'=>'09','Oct'=>'10','Nov'=>'11','Dec'=>'12');  
$Days=array('Mon'=>'Пн', 'Tue'=>'Вт', 'Wed'=>'Ср', 'Thu'=>'Чт', 'Fri'=>'Пт', 'Sat'=>'Сб', 'Sun'=>'Вс'); 



$pattern = "/<item>(.*?)<\/item>/ims";/* регулярное выражения для выбора данных между двумя тегами <item></item>*/  
preg_match_all($pattern, $text, $array);  
  


$patt1 = "/<title>(.*?)<\/title>/ims";/*Заголовок новости*/  
$patt2 = "/<description>(.*?)<\/description>/ims";/*тело новости*/  
$patt3 = "/<pubDate>(.*?)<\/pubDate>/ims";/*дата публикации*/  
$patt4 = "/<link>(.*?)<\/link>/ims";/*ссылка на сайт новостей*/  
$i=0;  
foreach ($array[1] as $v){  
preg_match_all($patt1, $v, $text);  
$news[$i]['title'] = $text[1][0];  
preg_match_all($patt2, $v, $text);  
$news[$i]['description'] = html_entity_decode($text[1][0]);  
/*php автоматически переконвертил html символы поэтому вернем все обратно :)*/  
preg_match_all($patt3, $v, $text);  
$news[$i]['pubDate'] = $text[1][0]; 
preg_match_all($patt4, $v, $text);  
$news[$i]['lind'] = urldecode($text[1][0]);  
$i++;  
}  

foreach ($news as $v){  

foreach($Days as $EngName => $RusName)  
               $v['pubDate']=str_replace($EngName, $RusName, $v['pubDate']);  
foreach($Months as $EngName => $RusName)  
$v['pubDate']=str_replace($EngName, $RusName, $v['pubDate']); 
$v['pubDate']=str_replace(GMT, "", $v['pubDate']); 
$v['pubDate']=rtrim($v['pubDate']); 
echo "<center><a href=".$v['lind']." target=\"_blank\" title=\"".$v['title']."\"><b>$v['title']."</b></a></center><br>".$v['description']." [".$v['pubDate']."]";  
}  

   
 
 автор: Footer   (12.02.2007 в 18:50)   письмо автору
 
   для: Mefisto84   (12.02.2007 в 17:39)
 

Mefisto84, спасибо за помощь. Но у меня всё равно пока ничего не получается. Я изменил только:

$text = file_get_contents("http://news.yandex.ru/theaters.rss");

Загрузил файл на сервер и запустил. Но вообще страница не грузиться. Не знаю что делать. Помогите, очень нужно разобраться а я в этом не очень понимаю. Хелп!

   
 
 автор: mtr   (12.02.2007 в 21:07)   письмо автору
 
   для: Mefisto84   (02.01.2007 в 17:47)
 

А про XMLDOM мы забыли?

   
 
 автор: Loki   (12.02.2007 в 21:50)   письмо автору
 
   для: mtr   (12.02.2007 в 21:07)
 

Во-первых не XMLDOM, а DOMXML. А во-вторых: забудьте про него - он остался в четвертой версии. В пятой - только domdocument.

   
 
 автор: Footer   (13.02.2007 в 09:35)   письмо автору
 
   для: Loki   (12.02.2007 в 21:50)
 

А вы не могли бы поподробнее про это написать. А то я вообще про это ничего не знаю. Просто сохраняю код как файл с расширением .php и всё. Наверное, этого недостаточно? Подскажите, что ещё нужно сделать, чтобы всё заработало?

   
 
 автор: Loki   (13.02.2007 в 10:39)   письмо автору
 
   для: Footer   (13.02.2007 в 09:35)
 

Это уже теологический спор:)
Если вам удобнее разбирать с помощью регулярных выражений - делайте так. Но самые модные веяния призывают работать с xml файлом как с объектом

   
 
 автор: Footer   (13.02.2007 в 18:56)   письмо автору
 
   для: Loki   (13.02.2007 в 10:39)
 

Там многие объяснения написаны на английском. Не очень понятно. А, вообще, если я использую регулярные выражения, то правильно весь код сохранять под именем с расширением .php? Или как правильно делать? Может, нужно сохранять как xml? Я просто не понимаю, как осуществляется разбор содержимого файла rss. Вот я знаю адрес канала, скажем, какого-нибудь на Яндексе типа: http://news.yandex.ru/theaters.rss. Хочу содержимое этого новостного канала размещать на сайте, но не знаю как. Приведённый выше скрипт, почему-то не работает. Не знаю в чём дело. Помогите советом! Плиз!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования