PDA

Просмотр полной версии : rss reader php


.::BARS::.
18.06.2008, 18:14
Все привет, помогите реализовать рсс реадер на пхп... Что имею ввиду: есть сайт с рсс новостями, так вот надо что бы скрипт их читал и записывал в файл в виде текста... а при заходе на скрипт выдавал их как статьи....

<?php
error_reporting(0);
ini_set('user_agent',$_SERVER['HTTP_USER_AGENT']);

//грузим rss файл
$data = file_get_contents('http://bash.org.ru/rss/');

//обрабатываем
preg_match_all('|<pubDate>(.+)</pubDate>|i',$data,$dat);

preg_match_all('|<description><!\[CDATA\[(.+)\]\]></description>|i',$data,$content);

//теперь у нас есть 2 массива по 100 элементов, воспользуемся постраничным выводом

//всего элементов
$all = sizeof($content[1]);

//число сообщений на странице
$pnumber=10;

//номер страницы
$page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;

//число страниц
$num_pages = ceil($all/$pnumber);

//начальная позиция
$start = $page*$pnumber-$pnumber;

//проверка номера страницы
if($page > $num_pages || $page < 1)
{
$page=1;
$start=0;
}

//заголовки
if(substr_count($_SERVER['HTTP_USER_AGENT'], 'MSIE'))
{header('Content-type: text/html; charset=utf-8');}
else
{header('Content-type: application/xhtml+xml; charset=utf-8');}

header('Cache-control: no-cache');

//выводим верх страницы (html код, выносим за <?php

print '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<head>
<title>'.$_SERVER['HTTP_HOST'].'</title>
</head>
<body>';


//выводим цитаты
if($all)
{
for($i=$start; $i<$start+$pnumber; $i++)
{print '<p style="border:1px solid;padding:2px">'.$dat[1][$i].'<br />'.str_replace('<br>','<br/>',iconv('windows-1251','utf-8',$content[1][$i])).'</p>';}

//навигация
echo '<p>';

for($pr = '', $i=1; $i<=$num_pages; $i++)
{
echo $pr=(($i == 1 || $i == $num_pages || abs($i-$page) < 2) ? ($i == $page ? " [$i] " : ' <a href="'.$_SERVER['SCRIPT_NAME'].'?page='.$i.'">'.$i.'</a> ') : (($pr == ' ... ' || $pr == '')? '' : ' ... '));
}

echo '</p>';
}
else
{echo '<p>ыыыы.... нет ничего</p>';}

print '</body></html>';
?>

это пример баша... только тут чтение... а нам нужно что бы новости сохранялись...

Chaak
18.06.2008, 18:44
дык в чем проблема?
Сохрани в файл!

Naydav
18.06.2008, 18:47
Ну и что сложного ?
Вместо print и echo, инфу схраняй в переменную, а потом запиши в файл fwrite();

и удали
//заголовки
if(substr_count($_SERVER['HTTP_USER_AGENT'], 'MSIE'))
{header('Content-type: text/html; charset=utf-8');}
else
{header('Content-type: application/xhtml+xml; charset=utf-8');}

header('Cache-control: no-cache');

Еще можно сделать, каждую новость в разный файл

.::BARS::.
19.06.2008, 13:26
Легко сказать... если бы я мог, то не просил бы помочь... не хочет он писать и все... пусто...

real_kas
19.06.2008, 13:35
Легко сказать... если бы я мог, то не просил бы помочь... не хочет он писать и все... пусто...

а права на запись проверял?

.::BARS::.
19.06.2008, 13:55
а права на запись проверял?
Я что на дауна похож? Конешно же проверял.... Говорю же что при записи он просто не качает новости...

.::BARS::.
19.06.2008, 13:58
...и удали
Цитата://заголовки
if(substr_count($_SERVER['HTTP_USER_AGENT'], 'MSIE'))
{header('Content-type: text/html; charset=utf-8');}
else
{header('Content-type: application/xhtml+xml; charset=utf-8');}

header('Cache-control: no-cache');...
это не суть сейчас важно.. заголовки уберу... сейчас надо с записью разобраться...

Naydav
19.06.2008, 15:34
это не суть сейчас важно.. заголовки уберу... сейчас надо с записью разобраться...
Нужно убрать, что б ошибку в браузер не "выдавало"

Рабочий код:

<?

error_reporting(0);
ini_set('user_agent',$_SERVER['HTTP_USER_AGENT']);

//грузим rss файл
$data = file_get_contents('http://bash.org.ru/rss/');

//обрабатываем
preg_match_all('|<pubDate>(.+)</pubDate>|i',$data,$dat);

preg_match_all('|<description><!\[CDATA\[(.+)\]\]></description>|i',$data,$content);

//теперь у нас есть 2 массива по 100 элементов, воспользуемся постраничным выводом

//всего элементов
$all = sizeof($content[1]);

//число сообщений на странице
$pnumber=10;

//номер страницы
$page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;

//число страниц
$num_pages = ceil($all/$pnumber);

//начальная позиция
$start = $page*$pnumber-$pnumber;

//проверка номера страницы
if($page > $num_pages || $page < 1)
{
$page=1;
$start=0;
}

//заголовки
/*if(substr_count($_SERVER['HTTP_USER_AGENT'], 'MSIE'))
{header('Content-type: text/html; charset=utf-8');}
else
{header('Content-type: application/xhtml+xml; charset=utf-8');}

header('Cache-control: no-cache');*/

//выводим верх страницы (html код, выносим за <?php

$text = '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<head>
<title>'.$_SERVER['HTTP_HOST'].'</title>
</head>
<body>';


//выводим цитаты
if($all)
{
for($i=$start; $i<$start+$pnumber; $i++)
{$text .= '<p style="border:1px solid;padding:2px">'.$dat[1][$i].'<br />'.str_replace('<br>','<br/>',iconv('windows-1251','utf-8',$content[1][$i])).'</p>';}

//навигация
$text .= '<p>';

for($pr = '', $i=1; $i<=$num_pages; $i++)
{
$text .= $pr=(($i == 1 || $i == $num_pages || abs($i-$page) < 2) ? ($i == $page ? " [$i] " : ' <a href="'.$_SERVER['SCRIPT_NAME'].'?page='.$i.'">'.$i.'</a> ') : (($pr == ' ... ' || $pr == '')? '' : ' ... '));
}

$text .= '</p>';
}
else
{echo '<p>ыыыы.... нет ничего</p>';}

$text .= '</body></html>';


$f = fopen("text.txt", "w");
fwrite($f, $text);
fclose($f);



?>

Код 100% рабочий, если у тебя не получиться, смотри права на запись(может ли твой скрипт создавать файлы)
рузультат выложить?

.::BARS::.
19.06.2008, 17:16
Код 100% рабочий, если у тебя не получиться, смотри права на запись(может ли твой скрипт создавать файлы)
рузультат выложить? Покажи что у тебя вышло?
Писать пишет, но на выводе пусто...
+ код перезаписывается, а надо ДОписывать новые а не перезаписывать старые... Что то я туплю наверное...

Naydav
19.06.2008, 17:37
+ код перезаписывается, а надо ДОписывать новые а не перезаписывать старые
Замени $f = fopen("text.txt", "w"); на $f = fopen("text.txt", "a");
'a' - Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его сздать

Покажи что у тебя вышло?

Содержимое файла text.txt, которое меняеться взависимости от переданной переменной $page
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<head>
<title>edukation.com.ua</title>
</head>
<body><p style="border:1px solid;padding:2px">Thu, 19 Jun 2008 13:30:39 +0400<br />Вот скажите, нахрена в &quot;Битве Экстрасенсов&quot; называют победителей? Чо ж это за экстрасенсы, которые не могут прочитать, что внутри конверта?<br/>Надо так - собрались, вышел Пореченков, один обрадовался, другой тупо развернулся и ушел!</p><p style="border:1px solid;padding:2px">Thu, 19 Jun 2008 13:30:01 +0400<br />&lt;Sgt. Joker&gt; Ну ёб твайу мать, пля почему русские не научатся снимать фильмы?? почаму??<br/>&lt;xxxx&gt;ну и какой фильм ты на этот раз посмотрел?<br/>&lt;Sgt. Joker&gt; Дерзкие дни, балять..<br/>&lt;xxxx&gt;ОМГ, чую недоброе..<br/>&lt;Sgt. Joker&gt; особенно меня, как рукопашника, порадовал момент когда тощий пацанёнок голыми руками и криком ки-я поклал дюжину качков с битами, храбро и безболезненно стерпев десяток попаданий арматуриной по почкам..<br/>&lt;Sgt. Joker&gt; Невольно вспоминается ответ Стивена Сигала на вопрос, что бы вы сделали если бы на вас напали двое с ножами?<br/>&lt;Sgt. Joker&gt; Он грит,у меня 7 дан по айкидо. Вообще, очень мало людей с таким уровнем мастерства, но даже я предпочёл бы убежать.</p><p style="border:1px solid;padding:2px">Thu, 19 Jun 2008 12:54:15 +0400<br />&lt;111&gt; Народ! Дайте чтонибудь над чем я могу поглумится с пояльником и отвёрткой. Я вам чтонибудь полезное соберу!<br/>&lt;222&gt; мне тут кое-кто денег должен...</p><p style="border:1px solid;padding:2px">Thu, 19 Jun 2008 12:53:01 +0400<br />JAx (02:24:37 18/06/2008)<br/>ЕСТЬ ЛЮДИ С СЕРДЦАМИ ИЗ КАМНЯ,ЕСТЬ КАМНИ С СЕРДЦАМИ ЛЮДЕЙ... <br/> JAx (02:24:42 18/06/2008)<br/>а я какой ??<br/> Наташка (02:24:53 18/06/2008)<br/>ты дерево</p><p style="border:1px solid;padding:2px">Wed, 18 Jun 2008 22:54:01 +0400<br />Dar: привет<br/>Strelok: привет<br/>Dar: как дела?<br/>Strelok: как в Шотландии<br/>Dar: в смысле<br/>Strelok: все в юбках а ебать некого<br/>Dar: эммм... я Дарина<br/>Strelok: эммм... а я стрелог<br/>Dar: это имя ?<br/>Strelok: ага<br/>Dar: что ага ?<br/>Strelok: рубероид говорю дорожает<br/>Dar: какой рубероид ?<br/>Strelok: в одессе который. Не знаешь почем сейчас ?<br/>Dar: нет...<br/>Strelok: вот и я незнаю =( а он сцуко дорожает<br/>Dar: зачем тебе рубероид ?<br/>Strelok: на дережабль наклею <br/>Dar: какой дережабль ???<br/>Strelok: который возит сиамских близнецов на планету фрион 2000<br/>Dar: ты с ума сошел ???<br/>Strelok: хм... а ты попробуй дережабль покрыть рубероидом, любой с ума сойдет :LOL:<br/>Strelok: приятно было пообщаться Дарина ))) пиши если что<br/>Dar: ...ну пока</p><p style="border:1px solid;padding:2px">Wed, 18 Jun 2008 19:31:01 +0400<br />Larson<br/>фенечка твоя так пахнет приятно.. :-*<br/>SeltsamLizzie<br/>чем же?<br/>Larson<br/>духами твоими..<br/>вообще тобой:-*<br/>Larson<br/>так приятно.. как будто ты счас за спиной стоишь, а волосы твои мне на плечи падают.. :-*<br/>SeltsamLizzie<br/>заинька...такой ты милый у меня... <br/>Larson<br/>надо тебе носки мои в сумку подложить, чтоб тоже меня вспоминала;)</p><p style="border:1px solid;padding:2px">Wed, 18 Jun 2008 18:55:01 +0400<br />с пикапфорума<br/><br/>robot:Каждый раз после сношения подруга замечает, что у нее немеет кожа живота, то есть теряет чувствительность. Продолжается онемение несколько минут. Это нормально или признак паталогии? При этом месячные задерживаются уже 1,5 месяца.<br/>Kryptos:Ты спокойный парень я смотрю,..</p><p style="border:1px solid;padding:2px">Wed, 18 Jun 2008 12:27:47 +0400<br />Пару лет назад дом культуры &quot;Современник&quot; приглашал на семинар с заголовком:<br/>&quot;Если ты умный, то почему больной и некрасивый?&quot;<br/>Еле удержался чтоб не сходить..)</p><p style="border:1px solid;padding:2px">Wed, 18 Jun 2008 12:26:51 +0400<br />OConnor <br/>из википедии:<br/>Евгений Иванович Забабахин (16 января 1917 — 27 декабря 1984) — советский учёный-физик, один из создателей ядерного оружия в СССР, академик АН СССР<br/><br/>OConnor<br/>Блин, вот я чувствовал, что он ядерщик...</p><p style="border:1px solid;padding:2px">Wed, 18 Jun 2008 12:26:01 +0400<br />Fieriya.<br/>Сидим после праздничков работаем, вдруг как гром среди ясного неба адский храп новенького сотрудника. Подхожу потолкать.. смотрю последнее, что бедняга успел загуглить «Лекарство от храпа», меняю тихонько в строке поиска надпись на «Лекарств от Лунатизма» рядом кладу железную ножку от сломанного офисного стула полив ее кончик, кетчупом тихонько воссоздав в офисе панораму битвы с инопланетным разумом, все прячемся в соседнем зале, укладываясь в позах трупа. Звоним ему на рабочий.<br/><br/>Вид от лица главного героя в его пересказе после (в курилке):<br/>DimsonN<br/>«блядь, одупляюсь хватаю телефон там уже гудки, цепляю какуйто ***ню железную измазанную в красной дряни. Мне стыдно боюсь повернуться .. думаю мож не заметили, что я дрых.. потом мысль, а сколько я дрых? Глядь на часы на компе. блядь 20 минут.. смотрю надпись Лунатизм.. начинаю тупить.. поворачиваюсь. спросить…а ааа (С) «Ну бля мужики мне хватило и плаката Тимошенко на половину пропущенного в шредере на полу» следующий кадр, вижу сцуко все трубки сняты, и там тишина.. в голове пиздец по сильнее того, что вы устроили в офисе.. особенно когда видишь горизонтально торчащие женские сапоги из ванной и слышны стоны из соседней комнаты… думаю грабили!.. хватаю железо .. с дрожью в коленках иду в зал тихо открываю дверь и когда от туда выпадает рука… и я вижу вас всех скукожанных на полу, и орущих мне «НЕеееТТТ Дима!!! проснисььь Дима это СОН!!! НЕ надо больше!!!» мне настает полный пиздец…</p><p> [1] <a href="/test.php?page=2">2</a> ... <a href="/test.php?page=10">10</a> </p></body></html>
Пожалуйста :)

.::BARS::.
19.06.2008, 17:45
Усек... СПАСИБО....

Naydav
19.06.2008, 17:47
Возникнут проблемы - пиши :)

Писать пишет, но на выводе пусто...
Для вывода, расскоментируй заголовки и в конце добавь
echo $text;
Будет помимо записи еще и в браузер выводить :)

.::BARS::.
30.06.2008, 16:45
А как реализовать что бы он не переписывал файл, а дописывал..... Допустим новая новость, он ее дописал, вот так

Naydav
30.06.2008, 16:52
Допустим новая новость, он ее дописал, вот так
Как так?
Замени $f = fopen("text.txt", "w"); на $f = fopen("text.txt", "a");
'a' - Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его сздать

zythar
30.06.2008, 16:57
дак написано же:
вместо $f = fopen("text.txt", "w"); пиши $f = fopen("text.txt", "a"); или $f = fopen("text.txt", "a+");

.::BARS::.
30.06.2008, 17:14
а если нам надо вначало указатель поставить?

Naydav
30.06.2008, 17:17
если просто нужно дописать вначало
'r+' Окрывает файл для чтения и записи; помещяет указатель в начало файла.

zythar
30.06.2008, 17:27
боже мой, какие мы ленивые (*

вот, почитай http://php.net/manual/en/function.fopen.php

Naydav насколько я помню "w" создает файл если его нет и перезаписывает если он есть

Naydav
30.06.2008, 17:34
Naydav насколько я помню "w" создает файл если его нет и перезаписывает если он есть
так точно

Используем:
'a' Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его сздать.
и
'r+' Окрывает файл для чтения и записи; помещяет указатель в начало файла.

zythar
30.06.2008, 18:04
так точно

Используем:

и

поменяй и на или (*

Naydav
30.06.2008, 18:12
поменяй и на или (*
Я думаю суть и так ясна

используем 'a' - для записи в конец файла
и(или)
'r+' - для записи в начало

Electr0sis
01.07.2008, 01:51
Thanxs u bro :)

.::BARS::.
01.07.2008, 12:31
Спасибо... поставил бы + обоим, то вот не могу, пишет что надо поставить кому нить, и так у всех... =(

.::BARS::.
01.07.2008, 12:47
Бля.. ничего хорошего... я обновляю страницу, и мне поновой дописывает и дописывает... а мне надо что бы дописывало только новое... все равно не то..

Solker
01.07.2008, 15:43
.::BARS::. ты Олень Ленивый.

<?php

$file = file_get_contents('http://bash.org.ru/rss/');

preg_match_all('#<title>Цитата \#([0-9]+)</title>#i',$file,$id);
preg_match_all('#<pubDate>(.+)</pubDate>#i',$file,$time);
preg_match_all('#<description><!\[CDATA\[(.+)\]\]></description>#i',$file,$content);

$filename = "quotes.txt";
$handle = fopen($filename, "a+");
$cont = @fread($handle, filesize($filename));

for($i=0;$i<count($id[1]);$i++)
{
if(strpos($cont,$id[1][$i])) continue;
$str = "[{$id[1][$i]}][{$time[1][$i]}]\r\n{$content[1][$i]}\r\n";
fwrite($handle, $str);
}

fclose($handle);

echo 'Done!';

?>