импорт RSS на свой сайт

dspu
На сайте с 10.05.2006
Offline
268
24903

мне надо отобразить rss новости на своем сайте в html, причем в полном объеме, а не только заголовки...

в поиске нашел скриптик /ru/forum/38283

он, в принципе, работает, но хотелось бы видеть дату и время также у каждой новости

<pubDate>Tue, 15 May 2007 15:38:00 GMT</pubDate>

кто-нить подскажет как дополнить скрипт или может есть уже готовые другие варианты? а то не силен я в пхп :(

tommy-gung
На сайте с 22.11.2006
Offline
287
#1

 <?php

/**********************************************************
* Parse XML data into an array structure *
* Usage: array parse_rss ( string data ) *
**********************************************************/
function parse_rss($reg_exp, $xml_data) {
preg_match_all($reg_exp, $xml_data, $temp);
return array(
'count'=>count($temp[0]),
'title'=>$temp[1],
'link'=>$temp[2],
'desc'=>$temp[3],
'pubdate'=>$temp[4] //добавлено
);
}

/**********************************************************
* Parse Array data into an HTML structure *
* Usage: string parse_rss ( array data ) *
**********************************************************/
function output_rss($pattern, $rss_data) {
$temp = "";
for($i=0; $i<$rss_data['count']; $i++) {
$temp .= sprintf($pattern,
$rss_data['link'][$i],
html_entity_decode($rss_data['title'][$i]),
html_entity_decode($rss_data['desc'][$i]),
$rss_data['pubdate'][$i] //добавлено
);
}
return $temp;
}

/**********************************************************
* Settings *
**********************************************************/
$url = 'http://news.yandex.ru/hardware.rss';

$reg_exp = '#<item>.*?<title>(.*?)<\/title>.*?';
$reg_exp .='<link>(.*?)<\/link>.*?<description>';
$reg_exp .='(.*?)<\/description>.*?<pubDate>'; //исправлено
$reg_exp .= '(.*?)<\/pubDate>.*?<\/item>#si'; //добавлено

$pattern = '<a href="%s">%s</a><br>%s<br>Date: %s<hr>';

/**********************************************************
* Main script *
**********************************************************/
if ( $xml_data = file_get_contents($url) ) {
$rss_data = parse_rss($reg_exp, $xml_data);
echo output_rss($pattern, $rss_data);
}
/**********************************************************
* The END *
**********************************************************/
?>

добавлено к этому коду /ru/forum/comment/1087879

Здесь не могла быть ваша реклама
dspu
На сайте с 10.05.2006
Offline
268
#2

увы, результат тот же

даты не появилось

H
На сайте с 18.08.2006
Offline
82
#3

готовый вариант - использовать, например, SimplePie

http://simplepie.org/

в таком вот аксепте...
dspu
На сайте с 10.05.2006
Offline
268
#4
Hallas:
готовый вариант - использовать, например, SimplePie
http://simplepie.org/

это че-то запутанная фигня 🙄

требует файл simplepie.inc а его в поставке нету, непонятно

H
На сайте с 18.08.2006
Offline
82
#5

как это - нету? все там есть! сам на сервер ставил... :)

tommy-gung
На сайте с 22.11.2006
Offline
287
#6

прошу прощения, не проверял. Исправил первый пост, проверил, все работает

dspu
На сайте с 10.05.2006
Offline
268
#7
tommy-gung:
прошу прощения, не проверял. Исправил первый пост, проверил, все работает

спасибо, теперь работает

а не подскажете еще два момента😕

1)как эту дату преобразовать в русскую человеческого вида

2)как форматировать новости, если они koi8-r или utf-8 в windows-1251

сори за наглость 😒

[Удален]
#8

Применительно к рассмотренному скрипту ->

/**********************************************************

* Main script *
**********************************************************/
if ( $xml_data = file_get_contents($url) ) {
// вот так можно -->
if ( extension_loaded('mb_string') ) {
$xml_data = mb_convert_encoding($xml_data, "windows-1251", "utf-8");
} elseif ( extension_loaded('iconv') ) {
$xml_data = iconv('utf-8', 'windows-1251', $xml_data);
}
// <--
$rss_data = parse_rss($reg_exp, $xml_data);
echo output_rss($pattern, $rss_data);
}
dspu
На сайте с 10.05.2006
Offline
268
#9
Зингельшухер:
Применительно к рассмотренному скрипту ->
/**********************************************************

* Main script *
**********************************************************/
if ( $xml_data = file_get_contents($url) ) {
// вот так можно -->
if ( extension_loaded('mb_string') ) {
$xml_data = mb_convert_encoding($xml_data, "windows-1251", "utf-8");
} elseif ( extension_loaded('iconv') ) {
$xml_data = iconv('utf-8', 'windows-1251', $xml_data);
}
// <--
$rss_data = parse_rss($reg_exp, $xml_data);
echo output_rss($pattern, $rss_data);
}

спасибо, работает

с датой я сам немного научился

function output_rss($pattern, $rss_data) {

$temp = "";
for($i=0; $i<$rss_data['count']; $i++) {
$temp .= sprintf($pattern,
$rss_data['link'][$i],
html_entity_decode($rss_data['title'][$i]),
html_entity_decode($rss_data['desc'][$i]),
strftime("%d-%m-%Y %R", strtotime($rss_data['pubdate'][$i])) //&#228;&#238;&#225;&#224;&#226;&#235;&#229;&#237;&#238;
);
}
return $temp;
}

только не могу месяц написать по русски, поэтому номером делаю 🙅

dspu
На сайте с 10.05.2006
Offline
268
#10

победил я дату, короче 😎

выкладываю полностью готовый скрипт, может пригодится кому:

<?php

setlocale(LC_ALL, 'ru_RU.CP1251'); //установка русской локали для даты
/**********************************************************
* Parse XML data into an array structure *
* Usage: array parse_rss ( string data ) *
**********************************************************/
function parse_rss($reg_exp, $xml_data) {
preg_match_all($reg_exp, $xml_data, $temp);
return array(
'count'=>count($temp[0]),
'title'=>$temp[1],
'link'=>$temp[2],
'desc'=>$temp[3],
'pubdate'=>$temp[4] //добавлено
);
}

/**********************************************************
* Parse Array data into an HTML structure *
* Usage: string parse_rss ( array data ) *
**********************************************************/
function output_rss($pattern, $rss_data) {
$temp = "";
for($i=0; $i<$rss_data['count']; $i++) {
$temp .= sprintf($pattern,
strftime("%d %B %Y %R", strtotime($rss_data['pubdate'][$i])),
$rss_data['link'][$i],
html_entity_decode($rss_data['title'][$i]),
html_entity_decode($rss_data['desc'][$i])
//добавлено
);
}
return $temp;
}

/**********************************************************
* Settings *
**********************************************************/
$url = 'http://rss.svobodanews.ru/?zone=ru_news_world&count=50';

$reg_exp = '#<item>.*?<title>(.*?)<\/title>.*?';
$reg_exp .='<link>(.*?)<\/link>.*?<description>';
$reg_exp .='(.*?)<\/description>.*?<pubDate>'; //исправлено
$reg_exp .= '(.*?)<\/pubDate>.*?<\/item>#si'; //добавлено

$pattern = '<i>%s</i><br><a href="%s"><strong>%s</strong></a><br>%s<br><br>';
//строка форматирования вывода, можно переставить местами поля и добавить теги

/**********************************************************
* Main script *
**********************************************************/
if ( $xml_data = file_get_contents($url) ) {
// вот так можно -->
if ( extension_loaded('mb_string') ) {
$xml_data = mb_convert_encoding($xml_data, "windows-1251", "utf-8");
} elseif ( extension_loaded('iconv') ) {
$xml_data = iconv('utf-8', 'windows-1251', $xml_data);
}
// <--
$rss_data = parse_rss($reg_exp, $xml_data);
echo output_rss($pattern, $rss_data);
}
/**********************************************************
* The END *
**********************************************************/
?>

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий