rss reader php

Discussion in 'PHP' started by .::BARS::., 18 Jun 2008.

  1. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    Все привет, помогите реализовать рсс реадер на пхп... Что имею ввиду: есть сайт с рсс новостями, так вот надо что бы скрипт их читал и записывал в файл в виде текста... а при заходе на скрипт выдавал их как статьи....

    PHP:
    <?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 == || $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>';
    ?>
    это пример баша... только тут чтение... а нам нужно что бы новости сохранялись...
     
  2. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    дык в чем проблема?
    Сохрани в файл!
     
  3. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Ну и что сложного ?
    Вместо print и echo, инфу схраняй в переменную, а потом запиши в файл fwrite();

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

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    Легко сказать... если бы я мог, то не просил бы помочь... не хочет он писать и все... пусто...
     
  5. real_kas

    real_kas Member

    Joined:
    22 Mar 2007
    Messages:
    40
    Likes Received:
    7
    Reputations:
    5
    а права на запись проверял?
     
  6. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    Я что на дауна похож? Конешно же проверял.... Говорю же что при записи он просто не качает новости...
     
  7. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    это не суть сейчас важно.. заголовки уберу... сейчас надо с записью разобраться...
     
  8. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Нужно убрать, что б ошибку в браузер не "выдавало"

    Рабочий код:

    Код 100% рабочий, если у тебя не получиться, смотри права на запись(может ли твой скрипт создавать файлы)
    рузультат выложить?
     
    #8 Naydav, 19 Jun 2008
    Last edited: 19 Jun 2008
  9. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    Покажи что у тебя вышло?
    Писать пишет, но на выводе пусто...
    + код перезаписывается, а надо ДОписывать новые а не перезаписывать старые... Что то я туплю наверное...
     
  10. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Замени $f = fopen("text.txt", "w"); на $f = fopen("text.txt", "a");
    'a' - Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его сздать

    Содержимое файла text.txt, которое меняеться взависимости от переданной переменной $page
    Пожалуйста :)
     
    #10 Naydav, 19 Jun 2008
    Last edited: 19 Jun 2008
    1 person likes this.
  11. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    Усек... СПАСИБО....
     
  12. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Возникнут проблемы - пиши :)

    Для вывода, расскоментируй заголовки и в конце добавь
    Будет помимо записи еще и в браузер выводить :)
     
    #12 Naydav, 19 Jun 2008
    Last edited: 19 Jun 2008
  13. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    А как реализовать что бы он не переписывал файл, а дописывал..... Допустим новая новость, он ее дописал, вот так
     
  14. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Как так?
     
  15. zythar

    zythar Elder - Старейшина

    Joined:
    16 Feb 2008
    Messages:
    517
    Likes Received:
    109
    Reputations:
    5
    дак написано же:
    вместо $f = fopen("text.txt", "w"); пиши $f = fopen("text.txt", "a"); или $f = fopen("text.txt", "a+");
     
  16. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    а если нам надо вначало указатель поставить?
     
  17. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    если просто нужно дописать вначало
     
    #17 Naydav, 30 Jun 2008
    Last edited: 30 Jun 2008
  18. zythar

    zythar Elder - Старейшина

    Joined:
    16 Feb 2008
    Messages:
    517
    Likes Received:
    109
    Reputations:
    5
    боже мой, какие мы ленивые (*

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

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

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    так точно

    Используем:
    и
     
    #19 Naydav, 30 Jun 2008
    Last edited: 30 Jun 2008
  20. zythar

    zythar Elder - Старейшина

    Joined:
    16 Feb 2008
    Messages:
    517
    Likes Received:
    109
    Reputations:
    5
    поменяй и на или (*