Results 1 to 6 of 6

Thread: Advanced RSS Ticker not able to retrieve date

  1. #1
    Join Date
    Apr 2013
    Posts
    2
    Thanks
    1
    Thanked 0 Times in 0 Posts

    Default Advanced RSS Ticker not able to retrieve date

    I am trying to read feed from http://directsellingnews.com/index.php/site/rss using Advanced RSS Ticker from http://www.dynamicdrive.com/dynamici...ajax/index.htm . I am not able to get the proper dates for the feeds. All the feed shows this date Dec 31, 1969 5:00:00 PM. Can anybody help me find the solution? I think the link for the javascript file is http://www.dynamicdrive.com/dynamici...x/rssticker.js

    Thank You.
    Mukti

  2. #2
    Join Date
    Jul 2008
    Location
    Derbyshire, UK
    Posts
    2,025
    Thanks
    16
    Thanked 315 Times in 313 Posts
    Blog Entries
    13

    Default

    Is this the only feed you're showing on your page via the Advanced RSS Ticker?
    Focus on Function Web Design | Latest News RSS | Facebook | Twitter |
    Fast Edit (A flat file, PHP web page editor & CMS. Small, FREE, no database!) | Fast Edit BE (Snippet Manager) (Web content editor for multiple editable regions!) | Fast Apps |
    The only limit to creativity is imagination: JemCon.org

  3. #3
    Join Date
    Jul 2008
    Location
    Derbyshire, UK
    Posts
    2,025
    Thanks
    16
    Thanked 315 Times in 313 Posts
    Blog Entries
    13

    Default

    Ive done a bit of investigating and believe I've found a fix.

    The reason for the problem is the formatting of the date within the RSS feed structure. The sample feeds used in the Advanced RSS Ticker demo pack, and the scripts which parse the results, all use <pubDate>. However, the RSS feed that you're using uses <dc:date>.

    The easiest fix is to change the date tag in the lastRSS.php file - just the 2 changes in red should do it;
    Code:
    <?php
    /*
     ======================================================================
     lastRSS 0.9.1
     
     Simple yet powerfull PHP class to parse RSS files.
     
     by Vojtech Semecky, webmaster @ webdot . cz
     
     Latest version, features, manual and examples:
     	http://lastrss.webdot.cz/
    
     ----------------------------------------------------------------------
     LICENSE
    
     This program is free software; you can redistribute it and/or
     modify it under the terms of the GNU General Public License (GPL)
     as published by the Free Software Foundation; either version 2
     of the License, or (at your option) any later version.
    
     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     GNU General Public License for more details.
    
     To read the license please visit http://www.gnu.org/copyleft/gpl.html
     ======================================================================
    */
    
    /**
    * lastRSS
    * Simple yet powerfull PHP class to parse RSS files.
    */
    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', 'dc:date', '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]['dc:date'])) !==-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;
    		}
    	}
    }
    
    ?>
    The down side to this is that if you are displaying other RSS feeds on your page that use <pubDate>, they will now no longer parse because <pubDate> has been replaced with <dc:date>

    Continued in next post due to character limit...
    Last edited by Beverleyh; 04-17-2013 at 01:33 PM.
    Focus on Function Web Design | Latest News RSS | Facebook | Twitter |
    Fast Edit (A flat file, PHP web page editor & CMS. Small, FREE, no database!) | Fast Edit BE (Snippet Manager) (Web content editor for multiple editable regions!) | Fast Apps |
    The only limit to creativity is imagination: JemCon.org

  4. #4
    Join Date
    Jul 2008
    Location
    Derbyshire, UK
    Posts
    2,025
    Thanks
    16
    Thanked 315 Times in 313 Posts
    Blog Entries
    13

    Default

    An alternative method would be to allow the lastRSS.php script to choose between the <pubDate> and <dc:date> formats - this modified file does the trick (tested and confirmed to be working) - note the changes in red;
    Code:
    <?php
    /*
     ======================================================================
     lastRSS 0.9.1
     
     Simple yet powerfull PHP class to parse RSS files.
     
     by Vojtech Semecky, webmaster @ webdot . cz
     
     Latest version, features, manual and examples:
     	http://lastrss.webdot.cz/
    
     ----------------------------------------------------------------------
     LICENSE
    
     This program is free software; you can redistribute it and/or
     modify it under the terms of the GNU General Public License (GPL)
     as published by the Free Software Foundation; either version 2
     of the License, or (at your option) any later version.
    
     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     GNU General Public License for more details.
    
     To read the license please visit http://www.gnu.org/copyleft/gpl.html
     ======================================================================
    */
    
    /**
    * lastRSS
    * Simple yet powerfull PHP class to parse RSS files.
    */
    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', 'dc:date', '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'])));
    
    // start mod - choose pubDate or dc:date
    					if ($result['items'][$i]['pubDate'] != '') {
    						$timestamp = strtotime($result['items'][$i]['pubDate']);
    						} else if ($result['items'][$i]['dc:date'] != '') {
    						$timestamp = strtotime($result['items'][$i]['dc:date']);
    						}
    
    					// If date_format is specified and pubDate is valid
    					if ($this->date_format != '' && ($timestamp) !==-1) {
    						// convert pubDate to specified date format
    						$result['items'][$i]['pubDate'] = date($this->date_format, $timestamp);
    					}
    // end mod - choose pubDate or dc:date
    
    
    					// Item counter
    					$i++;
    				}
    			}
    
    			$result['items_count'] = $i;
    			return $result;
    		}
    		else // Error in opening return False
    		{
    			return False;
    		}
    	}
    }
    
    ?>
    Focus on Function Web Design | Latest News RSS | Facebook | Twitter |
    Fast Edit (A flat file, PHP web page editor & CMS. Small, FREE, no database!) | Fast Edit BE (Snippet Manager) (Web content editor for multiple editable regions!) | Fast Apps |
    The only limit to creativity is imagination: JemCon.org

  5. The Following User Says Thank You to Beverleyh For This Useful Post:

    muktisen (04-17-2013)

  6. #5
    Join Date
    Apr 2013
    Posts
    2
    Thanks
    1
    Thanked 0 Times in 0 Posts

    Talking Thank You very much

    Dear Beverlyh,

    It perfectly works.

    How may i thank you? It took me the whole morning and afternoon to figure out what was wrong and you solved it pretty quickly.

    Thank You very much.

    God bless.

    Mukti...

  7. #6
    Join Date
    Jul 2008
    Location
    Derbyshire, UK
    Posts
    2,025
    Thanks
    16
    Thanked 315 Times in 313 Posts
    Blog Entries
    13

    Default

    No worries - I've been playing with RSS feeds quite a lot recently so I was already in the right frame of mind
    Focus on Function Web Design | Latest News RSS | Facebook | Twitter |
    Fast Edit (A flat file, PHP web page editor & CMS. Small, FREE, no database!) | Fast Edit BE (Snippet Manager) (Web content editor for multiple editable regions!) | Fast Apps |
    The only limit to creativity is imagination: JemCon.org

Similar Threads

  1. Replies: 2
    Last Post: 06-08-2009, 06:50 PM
  2. Advanced RSS Ticker Hung on "intilizing Ticker"
    By slamothe in forum Dynamic Drive scripts help
    Replies: 2
    Last Post: 01-21-2009, 06:15 PM
  3. Getting the Advanced RSS Ticker to display the most up-to-date feed
    By TJF74 in forum Dynamic Drive scripts help
    Replies: 0
    Last Post: 09-26-2008, 12:05 AM
  4. Advanced RSS Ticker - Stuck on "Initializing ticker"
    By unifem in forum Dynamic Drive scripts help
    Replies: 5
    Last Post: 10-16-2006, 02:40 AM
  5. Advanced RSS Ticker - Display Date next to Topic!
    By ikarus79m in forum Dynamic Drive scripts help
    Replies: 5
    Last Post: 02-26-2006, 01:34 PM

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •