Вывод RSS-ленты на статической php странице

Тема в разделе "Веб-дизайн", создана пользователем lvivport, 26 фев 2010.

Статус темы:
Закрыта.
Модераторы: zek24
  1. lvivport

    lvivport Создатель

    Регистр.:
    8 авг 2008
    Сообщения:
    46
    Симпатии:
    3
    Есть RSS лента. Нужно выводить заголовки из нее на статической странице. Как это сделать?

    Добавлено через 28 минут
    Извините, протупил. Не заметил раздел ПХП для начинающих. Перенесите тему, пожалуйста
     
  2. Ins1ne

    Ins1ne Постоялец

    Регистр.:
    26 авг 2009
    Сообщения:
    89
    Симпатии:
    25
    1) Скорее всего вы ошиблись разделом.
    2) Что значит "выводить заголовки"? спарсить?
    Чтобы получить исчерпывающий ответ, нужно правильно задать вопрос, показать пример RSS ленты и конкретно описать что вы хотите получить.
     
  3. lvivport

    lvivport Создатель

    Регистр.:
    8 авг 2008
    Сообщения:
    46
    Симпатии:
    3
    вот например лента
    http://inosmi.ru/export/rss2/index.xml
    Мне нужно на статическую страницу выводить из нее заголовки. Парсить ничего не нужно. Ссылка заголовка ведет на источник.
     
  4. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    а парсить-то как раз нужно
    PHP:
    <?php
    $itemNum
    =0;
    class 
    RSSParser    {
        var 
    $channel_title="";
        var 
    $channel_website="";
        var 
    $channel_description="";
        var 
    $channel_pubDate="";
        var 
    $channel_lastUpdated="";
        var 
    $channel_copyright="";
        var 
    $title="";
        var 
    $link="";
        var 
    $description="";
        var 
    $pubDate="";
        var 
    $author="";
        var 
    $url="";
        var 
    $width="";
        var 
    $height="";
        var 
    $inside_tag=false;    
        function 
    RSSParser($file,$encType)    {
                
    $this->xml_parser xml_parser_create($encType);
                
    xml_set_object$this->xml_parser, &$this );
                
    xml_set_element_handler$this->xml_parser"startElement""endElement" );
                
    xml_set_character_data_handler$this->xml_parser"characterData" );
                
    $fp = @fopen("$file","r") or die( "$file could not be opened" );
                while (
    $data fread($fp4096)){xml_parse$this->xml_parser$datafeof($fp)) or die( "XML error");}
                
    fclose($fp);
                
    xml_parser_free$this->xml_parser );
            }
        
        function 
    startElement($parser,$tag,$attributes=''){
            
    $this->current_tag=$tag;
            if(
    $this->current_tag=="ITEM" || $this->current_tag=="IMAGE"){
                
    $this->inside_tag=true;
                
    $this->description="";
                
    $this->link="";
                
    $this->title="";
                
    $this->pubDate="";
            }
        }
        
        function 
    endElement($parser$tag){
            switch(
    $tag){
                case 
    "ITEM":
                    
    $this->titles[]=trim($this->title);
                    
    $this->links[]=trim($this->link);
                    
    $this->descriptions[]=trim($this->description);
                    
    $this->pubDates[]=trim($this->pubDate);
                    
    $this->authors[]=trim($this->author);
                    
    $this->author=""$this->inside_tag=false;
                    break;
                case 
    "IMAGE":
                    
    $this->channel_image="<img src=\"".trim($this->url)."\" width=\"".trim($this->width)."\" height=\"".trim($this->height)."\" alt=\"".trim($this->title)."\" border=\"0\" title=\"".trim($this->title)."\" />";
                    
    $this->title=""$this->inside_tag=false;
                default:
                    break;
            }
        }
        
        function 
    characterData($parser,$data){
            if(
    $this->inside_tag){
                switch(
    $this->current_tag){
                    case 
    "TITLE":
                        
    $this->title.=$data; break;
                    case 
    "DESCRIPTION":
                        
    $this->description.=$data; break;
                    case 
    "LINK":
                        
    $this->link.=$data; break;
                    case 
    "URL":
                        
    $this->url.=$data; break;                    
                    case 
    "WIDTH":
                        
    $this->width.=$data; break;
                    case 
    "HEIGHT":
                        
    $this->height.=$data; break;
                    case 
    "PUBDATE":
                        
    $this->pubDate.=$data; break;
                    case 
    "AUTHOR":
                        
    $this->author.=$data;    break;
                    default: break;                                    
                }
    //end switch
            
    }else{
                switch(
    $this->current_tag){
                    case 
    "DESCRIPTION":
                        
    $this->channel_description.=$data; break;
                    case 
    "TITLE":
                        
    $this->channel_title.=$data; break;
                    case 
    "LINK":
                        
    $this->channel_website.=$data; break;
                    case 
    "COPYRIGHT":
                        
    $this->channel_copyright.=$data; break;
                    case 
    "PUBDATE":
                        
    $this->channel_pubDate.=$data; break;                    
                    case 
    "LASTBUILDDATE":
                        
    $this->channel_lastUpdated.=$data; break;                
                    default:
                        break;
                }
            }
        }
    }
    /* адрес рсс ленты и кодировка */
    $feed_rss = new RSSParser("http://inosmi.ru/export/rss2/index.xml","utf-8");
    ?>
    <!--выводим заголовки рсс-->
    <table width="100%" border="0" class="tab">
              <?php
    /* количество заголовков в данном примере 9    */      
    $feed_rss_RSSmax=9;
    if(
    $feed_rss_RSSmax==|| $feed_rss_RSSmax>count($feed_rss->titles))$feed_rss_RSSmax=count($feed_rss->titles);
    for(
    $itemNum=0;$itemNum<$feed_rss_RSSmax;$itemNum++){?><tr>
                <td align="left" ><a href="<?php echo $feed_rss->links[$itemNum]; ?>"><?php 
            $title
    =$feed_rss->titles[$itemNum];
            echo  
    $title;
            
    ?></a></td>
              </tr>
              <?php ?>
            </table>
     
    lvivport нравится это.
  5. lvivport

    lvivport Создатель

    Регистр.:
    8 авг 2008
    Сообщения:
    46
    Симпатии:
    3
    Супер! То что нужно

    Только еще бы как-то переводить в кодировку cp1251

    И еще, как выводить кроме заголовка со ссылкой еще и другие параметры? Например время, картинку, description
     
  6. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    PHP:
    <table width="100%" >
          <?php
    $feed_rss_RSSmax
    =17;
    if(
    $feed_rss_RSSmax==|| $feed_rss_RSSmax>count($feed_rss->titles))$feed_rss_RSSmax=count($feed_rss->titles);
    for(
    $itemNum=0;$itemNum<$feed_rss_RSSmax;$itemNum++){?>
          <tr>
            <td align="center" ><a href="<?php echo $feed_rss->links[$itemNum]; ?>">
              <?php 
            $title
    =$feed_rss->titles[$itemNum];
            echo  
    iconv("UTF-8","windows-1251"$title )?></a>       </td>
          </tr>
          <tr>
            <td ><?php 
            $descr
    =$feed_rss->descriptions[$itemNum];
            echo  
    iconv("UTF-8","windows-1251"$descr )?>
               </td>
          </tr>
          <?php ?>
            </table>
    вот в 1251 и с дескрипшен вставь вместо этого
    PHP:
    <table width="100%" border="0" class="tab"> 
              <?php 
           
    $feed_rss_RSSmax
    =9
    if(
    $feed_rss_RSSmax==|| $feed_rss_RSSmax>count($feed_rss->titles))$feed_rss_RSSmax=count($feed_rss->titles); 
    for(
    $itemNum=0;$itemNum<$feed_rss_RSSmax;$itemNum++){?><tr> 
                <td align="left" ><a href="<?php echo $feed_rss->links[$itemNum]; ?>"><?php  
            $title
    =$feed_rss->titles[$itemNum]; 
            echo  
    $title
            
    ?></a></td> 
              </tr> 
              <?php ?> 
            </table>
    остальное можно тоже добавить в принципе просто готового сейчас под рукой нет
     
  7. Janee

    Janee Создатель

    Регистр.:
    10 янв 2009
    Сообщения:
    45
    Симпатии:
    0
    а не подскажете как можно вывести новости из rss ленты на html станице, как это реализовано на юкозе?
    Цель вывода - страница с полноценными новостями из rss канала (с картинками и прочим)
     
  8. ercalote

    ercalote Постоялец

    Регистр.:
    27 мар 2008
    Сообщения:
    86
    Симпатии:
    21
    Боюсь, что никак. На юкозе скорее всего стоит ЧПУ в mod_rewrite. А чем не устраивает расширение .php?
     
  9. int++

    int++ Писатель

    Регистр.:
    26 янв 2010
    Сообщения:
    6
    Симпатии:
    2
    ну да, реврайтами сделать и всё путево будет!
     
  10. Janee

    Janee Создатель

    Регистр.:
    10 янв 2009
    Сообщения:
    45
    Симпатии:
    0
    в php не силен, я не знаю как мне можно рализовать вывод rss контента на html странице, скажите как через php реализовать, сделаю, лишь бы результат получить, дайте конкретный пример или предложение, порассуждать я и сам могу, спасибо:)
     
Статус темы:
Закрыта.