| |
|
|
| | у меня такая проблема: при закачке на хостинг скрипта, читающего rss канал он не запускается. просто пустая страница и все. если туда же закачать и xml файл, скрипт его прочитает, а при указании других каналов ничего не пишет. совсем, даже ошибок.
вот он:
<?php // Load and parse the XML document
$rss = simplexml_load_file('index.xml');
$title = $rss->channel->title;
?>
<html xml:lang="ru" lang="ru">
<head>
<title><?php echo $title; ?></title>
</head>
<body>
<h1><?php echo $title; ?></h1>
<?php
// Здесь мы поместим цикл, чтобы включить заголовок элемента и описание
foreach ($rss->channel->item as $item) {
echo "<h2><a href='". $item->link. "'>". $item->title. "</a></h2>";
echo "<p>". $item->description. "</p>";
}
?>
|
а вот такой скрипт читает и внешние каналы, но отображает только 3 новости
<?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]),
'pubdate'=>$temp[1],
'title'=>$temp[2],
'link'=>$temp[3],
'desc'=>$temp[4]
);
}
/**********************************************************
* Parse Array data into an HTML structure *
* Usage: string parse_rss ( array data ) *
**********************************************************/
function output_rss($pattern, $rss_data) {
// for($i=0; $i<$rss_data['count']; $i++) {
for($i=0; $i<3; $i++) {
$temp .= sprintf($pattern,
html_entity_decode($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 = 'index.xml';
$reg_exp = '#<item>.*?<pubDate>(.*?)<\/pubDate>.*?';
$reg_exp .='<title>(.*?)<\/title>.*?';
$reg_exp .='<link>(.*?)<\/link>.*?';
$reg_exp .='<description>(.*?)<\/description>.*?';
$reg_exp .='<\/item>#si';
$pattern = '<span class="date2">%s</span><br><br><a href="%s"><b>%s</b></a><br><br>%s<br><div class="line"></div>';
//ereg_replace("+0400", "df", $pattern);
/**********************************************************
* 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 *
**********************************************************/
?>
|
пожалуйста, подскажите что делать с первым или как заставить 2-ой показывать все? заранее благодарен. | |
| |
|
|
| |
|
|
| |
для: выдр
(06.04.2007 в 15:34)
| | | На хостинге запрещен доступ к внешним файлам. Либо IP хоста забанен новостным сервером, либо новостной хост определяет робота и пользователя и не выдает роботам новости. | |
| |
|
|
| |
|
|
| |
для: XPraptor
(06.04.2007 в 15:37)
| | | дак в том то и дело, что нет! второй скрипт ведь новости получает, только не все выводит | |
| |
|
|
| |
|
|
| |
для: выдр
(06.04.2007 в 15:56)
| | |
function output_rss($pattern, $rss_data) {
// for($i=0; $i<$rss_data['count']; $i++) {
for($i=0; $i<3; $i++)
|
$i<3 - дальше объяснять нужно? | |
| |
|
|
| |
|
|
| |
для: XPraptor
(06.04.2007 в 16:00)
| | | это я уже смотрел, исправлял на большие числа-- без разницы :-( | |
| |
|
|
| |
|
|
| |
для: выдр
(06.04.2007 в 16:24)
| | | Что сомтрели? У вас закомментирована строка выводящая полное кол-во новостей, а вместо нее вставлен цикл от 0 до 2. убюерите цикл и расскомментируйте полный вывод. | |
| |
|
|
| |
|
|
| |
для: XPraptor
(06.04.2007 в 16:35)
| | |
function output_rss($pattern, $rss_data) {
for($i=0; $i<$rss_data['count']; $i++) {
$temp .= sprintf($pattern,
html_entity_decode($rss_data['pubdate'][$i]),
$rss_data['link'][$i],
html_entity_decode($rss_data['title'][$i]),
html_entity_decode($rss_data['desc'][$i])
);
}
|
вот так? всеравно только 3 новости | |
| |
|
|
| |
|
|
| |
для: выдр
(06.04.2007 в 16:49)
| | | А сколько у вас новостей позвольте спросить в index.xml находится? | |
| |
|
|
| |
|
|
| |
для: XPraptor
(06.04.2007 в 16:54)
| | | 7 | |
| |
|
|
| |
|
|
| |
для: выдр
(06.04.2007 в 17:04)
| | | А все соответствуют формату, может где ошибка после третьей новости есть и парсер прекращает разбор? И может еще кэш не перегружается, попробуйте сбросить и открыть страницу заново. | |
| |
|
|
| |
|
|
| |
для: XPraptor
(06.04.2007 в 17:32)
| | | нет, я даже эксперимент провел: удалил из xml файлика одну из выводимых новостей, так вместо нее просто другая появляется | |
| |
|
|
| |
|
|
| |
для: выдр
(06.04.2007 в 17:45)
| | | Вообще очень плохой скрипт для разбора. Вот этот код может вызывать проблеммы:
function parse_rss($reg_exp, $xml_data) {
preg_match_all($reg_exp, $xml_data, $temp);
return array(
'count'=>count($temp[0]),
|
Здесь preg_match_all находит все варианты парсинга в файле и помещает их в массив $temp. А потом проверяется сколько он нашел новостей count($temp[0])
Но в temp[0] попадают только полные совпадения по шаблону. Если где то что то не нашлось, то оно туда не попадет. Скорее всего проблемма в этом. | |
| |
|
|
| |
|
|
| |
для: XPraptor
(07.04.2007 в 02:27)
| | | не подскажите, что нужно делать? в php очень мало понимаю, а скрипт нужен скоро | |
| |
|
|
| |
|
|
| |
для: выдр
(07.04.2007 в 03:51)
| | | Дайте сюда ваш index.xml, я проверю и подправлю. | |
| |
|
|
| |
|
|
| |
для: XPraptor
(07.04.2007 в 06:39)
| | | извине пожалуйста, похоже что это все-таки хостинг... я думал что он файлы берет из внешнего канала, а утром посмотрел код, и оказалось, что от читал все тотже index.xml только на хостинге (они в одной папке лежали). буду другой хостинг искать | |
| |
|
|