Location: PHPKode > projects > IceBB > icebb/includes/tasks/update_rss.task.php
<?php
//******************************************************//
//           /////////                 ////   /////
//              //                    // //  //  //
//             //      /////  ////// ////   ////
//            //      //     ////   //  // //  //
//        /////////  /////  ////// /////  /////
//******************************************************//
// icebb.net // 1.0 Beta 7
//******************************************************//
// update RSS feeds task
// $Id: update_rss.php 195 2005-07-24 03:51:11Z mutantmonkey $
//******************************************************//

/*
Note about this task:
---------------------
Do _NOT_ run this task more than every 15 minutes, doing so will cause webmasters
to get pissed at you and could get you banned from their site
*/

class task_update_rss
{
	function run()
	{
		global $icebb,$db,$std;
	
		require($icebb->settings['board_path'].'includes/classes/xml.lib.php');
		$xml						= new xml_parser();
	
		// read RSS
		$rread						= $db->query("SELECT fid,rss FROM icebb_forums WHERE rss!=''");
		while($f					= $db->fetch_row($rread))
		{
			$rss					= unserialize($f['rss']);
			$rss['fid']				= $f['fid'];
		
			$to_read[]				= $rss;
		}
		
		if(is_array($to_read))
		{
			$topicsq		= $db->query("SELECT * FROM icebb_topics ORDER BY tid DESC LIMIT 1");
			$last_topic		= $db->fetch_row($topicsq);
			$tid			= $last_topic['tid']+1;
			
			$postsq			= $db->query("SELECT * FROM icebb_posts ORDER BY pid DESC LIMIT 1");
			$last_post		= $db->fetch_row($postsq);
			$pid			= $last_post['pid']+1;
		
			foreach($to_read as $r)
			{
				$doc					= $xml->xml2array(file_get_contents($r['url']));
				$to_insert				= $doc['channel'][0]['item'];
				if(is_array($to_insert))
				{
					foreach($to_insert as $i => $item)
					{
						$pubdate			= empty($item['pubDate']) ? $item['dc:date'] : $item['pubDate'];
						$pubdate			= strtotime($pubdate);
					
						if($pubdate		   <= $r['last_check'])
						{
							break;
						}
					
						$items[$i]['title']	= $item['title'];
						$items[$i]['link']	= $item['link'];
						$items[$i]['description']= $item['description'];
						$items[$i]['pubdate']= $pubdate;
					}
				}
				
				if(is_array($items))
				{
					krsort($items);
					
					foreach($items as $i)
					{
						$db->insert('icebb_topics',array(
										'tid'			=> $tid,
										'forum'			=> $r['fid'],
										'icon'			=> '',
										'title'			=> addslashes($i['title']),
										'description'	=> '',
										'snippet'		=> substr(addslashes($i['description']),0,255),
										'starter'		=> "RSS Feed",
										'lastpost_time'	=> $i['pubdate'],
										'lastpost_author'=> "RSS Feed",
										'has_poll'		=> 0,
										'views'			=> 0,
										));
										
						$db->insert('icebb_posts',array(
										'pid'			=> $pid,
										'ptopicid'		=> $tid,
										'pauthor_id'	=> '0',
										'pauthor'		=> "RSS Feed",
										'pauthor_ip'	=> '127.0.0.1',
										'pdate'			=> $i['pubdate'],
										'ptext'			=> addslashes($i['description'])."\n\n[url=".addslashes($i['link'])."]".addslashes($i['link'])."[/url]",
										'pis_firstpost'	=> '1',
										));
						
						$lastpost_time	= intval($i['pubdate']);
						
						$tid++;
						$pid++;
					}
				
					$r2fid						= $r['fid'];
					unset($r['fid']);	
					$r['last_check']			= $lastpost_time;
					$db->query("UPDATE icebb_forums SET rss='".addslashes(serialize($r))."',topics=topics+".count($items).",lastpostid='{$tid}',lastpost_title='".addslashes($i['title'])."',lastpost_time='{$lastpost_time}',lastpost_author='RSS Feed' WHERE fid='{$r2fid}'");
	
					// update stats
					$cache_result3				= $db->fetch_result("SELECT COUNT(*) as posts FROM icebb_posts");
					$cache_result31				= $db->fetch_result("SELECT COUNT(*) as topics FROM icebb_topics");
					$cache_result32				= $db->fetch_result("SELECT COUNT(*) as replies FROM icebb_posts WHERE pis_firstpost!=1");
					$icebb->cache['stats']['posts']= $cache_result3['posts'];
					$icebb->cache['stats']['topics']= $cache_result31['topics'];
					$icebb->cache['stats']['replies']= $cache_result32['replies'];
					$std->recache($icebb->cache['stats'],'stats');
				}
			}
		}
	}
}
?>
Return current item: IceBB