Loading:


    RSS BOX odczyt kanałów RSS - AJAX i PHP

    Skrypt pobiera dane z kanału RSS i wyświetla je co określoną ilość czasu podaną w zmiennej.

    Na początku tworzymy katalog o nazwie rsscache w nim będzie przechowywany cache



    Napisz Artyku³

    Listing


    //index.html   #############################################

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Ajax</title>
    <link href="ajaxcss.css" rel="stylesheet" type="text/css">
    <script type="text/javascript" src="ajaxcore.js"></script>
    <script type="text/javascript" src="ajax.js"></script>
    </head>
    <body onload="startRequest('http://rss.di.com.pl/all.rss');">
    <div id="mainDiv" class="mainDiv">
    <p style="text-align:center;">To jest główna warstwa danych.</p>
    </div>
    <div id="rssBox" class="rssBox">
    </div>
    </body>
    </html>







    //lastRSS.php-----------------------------------------------------

    <?php

    class lastRSS {
            // -----------------------------------------
            // Public properties
            // -----------------------------------------------
            var $default_cp = 'UTF-8';
            var $CDATA = 'nochange';
            var $cp = '';
            var $items_limit = 0;
            var $stripHTML = False;
            var $date_format = '';

            // ------------------------------------------
            // Private variables
            // --------------------------------------------
            var $channeltags = array ('title', 'link', 'description', 'language', 'copyright', 'managingEditor', 'webMaster', 'lastBuildDate', 'rating', 'docs');
            var $itemtags = array('title', 'link', 'description', 'author', 'category', 'comments', 'enclosure', 'guid', 'pubDate', 'source');
            var $imagetags = array('title', 'url', 'link', 'width', 'height');
            var $textinputtags = array('title', 'description', 'name', 'link');

            // -----------------------------------------
            // Parse RSS file and returns associative array.
            // ---------------------------------------------
            function Get ($rss_url) {
                    // If CACHE ENABLED
                    if ($this->cache_dir != '') {
                            $cache_file = $this->cache_dir . '/rsscache_' . md5($rss_url);
                            $timedif = @(time() - filemtime($cache_file));
                            if ($timedif < $this->cache_time) {
                                    // cached file is fresh enough, return cached array
                                    $result = unserialize(join('', file($cache_file)));
                                    // set 'cached' to 1 only if cached file is correct
                                    if ($result) $result['cached'] = 1;
                            } else {
                                    // cached file is too old, create new
                                    $result = $this->Parse($rss_url);
                                    $serialized = serialize($result);
                                    if ($f = @fopen($cache_file, 'w')) {
                                            fwrite ($f, $serialized, strlen($serialized));
                                            fclose($f);
                                    }
                                    if ($result) $result['cached'] = 0;
                            }
                    }
                    // If CACHE DISABLED >> load and parse the file directly
                    else {
                            $result = $this->Parse($rss_url);
                            if ($result) $result['cached'] = 0;
                    }
                    // return result
                    return $result;
            }
           
            // --------------------------------------------
            // Modification of preg_match(); return trimed field with index 1
            // from 'classic' preg_match() array output
            // -------------------------------------
            function my_preg_match ($pattern, $subject) {
                    // start regullar expression
                    preg_match($pattern, $subject, $out);

                    // if there is some result... process it and return it
                    if(isset($out[1])) {
                            // Process CDATA (if present)
                            if ($this->CDATA == 'content') { // Get CDATA content (without CDATA tag)
                                    $out[1] = strtr($out[1], array('<![CDATA['=>'', ']]>'=>''));
                            } elseif ($this->CDATA == 'strip') { // Strip CDATA
                                    $out[1] = strtr($out[1], array('<![CDATA['=>'', ']]>'=>''));
                            }

                            // If code page is set convert character encoding to required
                            if ($this->cp != '')
                                    //$out[1] = $this->MyConvertEncoding($this->rsscp, $this->cp, $out[1]);
                                    $out[1] = iconv($this->rsscp, $this->cp.'//TRANSLIT', $out[1]);
                            // Return result
                            return trim($out[1]);
                    } else {
                    // if there is NO result, return empty string
                            return '';
                    }
            }

            // --------------------------------------------
            // Replace HTML entities &something; by real characters
            // ---------------------------------------------
            function unhtmlentities ($string) {
                    // Get HTML entities table
                    $trans_tbl = get_html_translation_table (HTML_ENTITIES, ENT_QUOTES);
                    // Flip keys<==>values
                    $trans_tbl = array_flip ($trans_tbl);
                    // Add support for &apos; entity (missing in HTML_ENTITIES)
                    $trans_tbl += array('&apos;' => "'");
                    // Replace entities by values
                    return strtr ($string, $trans_tbl);
            }

            // ---------------------------------------------
            // Parse() is private method used by Get() to load and parse RSS file.
            // Don't use Parse() in your scripts - use Get($rss_file) instead.
            // ---------------------------------------------
            function Parse ($rss_url) {
                    // Open and load RSS file
                    if ($f = @fopen($rss_url, 'r')) {
                            $rss_content = '';
                            while (!feof($f)) {
                                    $rss_content .= fgets($f, 4096);
                            }
                            fclose($f);

                            // Parse document encoding
                            $result['encoding'] = $this->my_preg_match("'encoding=[\'\"](.*?)[\'\"]'si", $rss_content);
                            // if document codepage is specified, use it
                            if ($result['encoding'] != '')
                                    { $this->rsscp = $result['encoding']; } // This is used in my_preg_match()
                            // otherwise use the default codepage
                            else
                                    { $this->rsscp = $this->default_cp; } // This is used in my_preg_match()

                            // Parse CHANNEL info
                            preg_match("'<channel.*?>(.*?)</channel>'si", $rss_content, $out_channel);
                            foreach($this->channeltags as $channeltag)
                            {
                                    $temp = $this->my_preg_match("'<$channeltag.*?>(.*?)</$channeltag>'si", $out_channel[1]);
                                    if ($temp != '') $result[$channeltag] = $temp; // Set only if not empty
                            }
                            // If date_format is specified and lastBuildDate is valid
                            if ($this->date_format != '' && ($timestamp = strtotime($result['lastBuildDate'])) !==-1) {
                                                    // convert lastBuildDate to specified date format
                                                    $result['lastBuildDate'] = date($this->date_format, $timestamp);
                            }

                            // Parse TEXTINPUT info
                            preg_match("'<textinput(|[^>]*[^/])>(.*?)</textinput>'si", $rss_content, $out_textinfo);
                                    // This a little strange regexp means:
                                    // Look for tag <textinput> with or without any attributes, but skip truncated version <textinput /> (it's not beggining tag)
                            if (isset($out_textinfo[2])) {
                                    foreach($this->textinputtags as $textinputtag) {
                                            $temp = $this->my_preg_match("'<$textinputtag.*?>(.*?)</$textinputtag>'si", $out_textinfo[2]);
                                            if ($temp != '') $result['textinput_'.$textinputtag] = $temp; // Set only if not empty
                                    }
                            }
                            // Parse IMAGE info
                            preg_match("'<image.*?>(.*?)</image>'si", $rss_content, $out_imageinfo);
                            if (isset($out_imageinfo[1])) {
                                    foreach($this->imagetags as $imagetag) {
                                            $temp = $this->my_preg_match("'<$imagetag.*?>(.*?)</$imagetag>'si", $out_imageinfo[1]);
                                            if ($temp != '') $result['image_'.$imagetag] = $temp; // Set only if not empty
                                    }
                            }
                            // Parse ITEMS
                            preg_match_all("'<item(| .*?)>(.*?)</item>'si", $rss_content, $items);
                            $rss_items = $items[2];
                            $i = 0;
                            $result['items'] = array(); // create array even if there are no items
                            foreach($rss_items as $rss_item) {
                                    // If number of items is lower then limit: Parse one item
                                    if ($i < $this->items_limit || $this->items_limit == 0) {
                                            foreach($this->itemtags as $itemtag) {
                                                    $temp = $this->my_preg_match("'<$itemtag.*?>(.*?)</$itemtag>'si", $rss_item);
                                                    if ($temp != '') $result['items'][$i][$itemtag] = $temp; // Set only if not empty
                                            }
                                            // Strip HTML tags and other bullshit from DESCRIPTION
                                            if ($this->stripHTML && $result['items'][$i]['description'])
                                                    $result['items'][$i]['description'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['description'])));
                                            // Strip HTML tags and other bullshit from TITLE
                                            if ($this->stripHTML && $result['items'][$i]['title'])
                                                    $result['items'][$i]['title'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['title'])));
                                            // If date_format is specified and pubDate is valid
                                            if ($this->date_format != '' && ($timestamp = strtotime($result['items'][$i]['pubDate'])) !==-1) {
                                                    // convert pubDate to specified date format
                                                    $result['items'][$i]['pubDate'] = date($this->date_format, $timestamp);
                                            }
                                            // Item counter
                                            $i++;
                                    }
                            }

                            $result['items_count'] = $i;
                            return $result;
                    }
                    else // Error in opening return False
                    {
                            return False;
                    }
            }
    }

    ?>









    //dane.php   #############################################

    <?php

    require_once('lastRSS.php');

    if(isSet($_GET["url"]) && $_GET["url"] != ""){
      $url = $_GET["url"];

      $rss = new lastRSS;
      $rss->cache_dir = './rsscache';
      $rss->cache_time = 3600;
      $rss->cp = "UTF-8";

      $str = "";
      if ($rssArr = $rss->get($url)) {
        foreach($rssArr['items'] as $row){
          $str .= $row['title'] . "\n";
          $str .= $row['pubDate'] . "\n";
          $str .= $row['link'] . "\n";
          $str .= $row['description'] . "\n\n";
        }
        echo rtrim($str);
      }
      else {
        die ("error");
      }
    }
    else{
      echo "error";
    }
    ?>




    //ajaxcss.css   #############################################

    .mainDiv
    {
      color: #333333;
      position: relative;
      background-color: #EFEFEF;
      border: 1px solid #000000;
      margin: 10px 10px 10px 10px;
      padding: 14px 14px 14px 14px;
      width: 350px;
      visibility: visible;
    }

    .dataDiv
    {
      color: #333333;
      position: relative;
      background-color: #ffffff;
      border: 1px solid #000000;
      margin: 10px 10px 10px 10px;
      padding: 14px 14px 14px 14px;
      width: 420px;
      visibility: visible;
    }

    .myButton
    {
      font-family:helvetica,sans-serif;
      font-size:84%;
      font-weight:bold;
      border:1px solid;
      border-top-color:#696;
      border-left-color:#696;
      border-right-color:#363;
      border-bottom-color:#363;
      width:120px;
      margin:5px;
    }

    .myTextInput
    {
      border:1px solid;
      background-color: #F8F8F8;
      border-top-color:#696;
      border-left-color:#696;
      border-right-color:#363;
      border-bottom-color:#363;
      width:70%;
    }



    //ajaxcore.js   #############################################

    function getXMLHttpRequestObject()
    {
      try{
        return new XMLHttpRequest();
      }
      catch(e){
        try{
          return new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e){
          return false;
        }
      }
    }

    function startGETRequest(url, onComplete, onEnd)
    {
      var XMLHttpRequestObject = getXMLHttpRequestObject();
      if(XMLHttpRequestObject){
        XMLHttpRequestObject.open("GET", url);
        XMLHttpRequestObject.onreadystatechange = function()
        {
          if (XMLHttpRequestObject.readyState == 4){
            if(XMLHttpRequestObject.status == 200){
              var responseXML = XMLHttpRequestObject.responseXML;
              var responseText = XMLHttpRequestObject.responseText;
              onComplete(responseText, responseXML);
            }
            delete XMLHttpRequestObject;
            onEnd();
          }
        }
        XMLHttpRequestObject.send(null);
      }
    }

    function startPOSTRequest(url, params, onComplete, onEnd)
    {
      var XMLHttpRequestObject = getXMLHttpRequestObject();
      if(XMLHttpRequestObject){
        XMLHttpRequestObject.open("POST", url);
        XMLHttpRequestObject.setRequestHeader(
          'Content-Type', 'application/x-www-form-urlencoded');
        XMLHttpRequestObject.onreadystatechange = function()
        {
          if (XMLHttpRequestObject.readyState == 4){
            if(XMLHttpRequestObject.status == 200){
              var responseXML = XMLHttpRequestObject.responseXML;
              var responseText = XMLHttpRequestObject.responseText;
              onComplete(responseText, responseXML);
            }
            delete XMLHttpRequestObject;
            onEnd();
          }
        }
        XMLHttpRequestObject.send(params);
      }
    }


    //ajax.js   #############################################

    var mainArray = new Array();
    var currItem = 0;
    var timeout = 5;

    function startRequest(param)
    {
      var rssDiv = document.getElementById("rssBox");
      rssDiv.innerHTML = "Trwa wczytywanie danych...";
      url = "dane.php?url=" + param;
      startGETRequest(url, onComplete, onEnd);
    }

    function startRSSShow()
    {
      if(mainArray.length < 1) return;
      var item = mainArray[currItem];
      if(++currItem >= mainArray.length) currItem = 0;
      text = "<p><b>" + item['title'] + "</b></p>";
      text += "<p>" + item['pubDate'] + "</p>";
      text += "<p>" + item['description'] + "</p>";
      text += "<a href=\"" + item['link'] + "\">Więcej...</a>";

      var rssDiv = document.getElementById("rssBox");
      rssDiv.innerHTML = text;
      setTimeout("startRSSShow();", timeout * 1000);
    }

    function onComplete(text, xml)
    {
      if(text == 'error'){
        var rssDiv = document.getElementById("rssBox");
        rssDiv.innerHTML = "Wiadomości RSS nie są dostępne.";
      }
      else{
        items = text.split("\n\n");
        for(i = 0; i < items.length; i++){
          tempArr = new Array();
          elements = items[i].split("\n");
          tempArr['title'] = elements[0];
          tempArr['pubDate'] = elements[1];
          tempArr['link'] = elements[2];
          tempArr['description'] = elements[3];
          mainArray.push(tempArr);
        }
        startRSSShow();
      }
    }

    function onEnd()
    {
    }
     




    Dodano przez: igor
    Ranga: Administrator serwisu Punktów: 0
    Komentarze użytkowników
      • Tre¶æ komentarza
        Kod do komentarza (opcjonalnie)
        PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
        Autor
        Token
        token

         

         








    funkcje.net
    Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2025 v.1.5 | design: diviXdesign & rainbowcolors