php xml feed

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
a11c
Forum Newbie
Posts: 4
Joined: Mon Apr 05, 2010 5:26 pm

php xml feed

Post by a11c »

hello all,

i have a php script that pulls xml feed from various websites. The script works fine when only using once per page. I would like to modify the coding to allow me to use the same script 2 times per page. here are my files and coding

when i call on the file i use

Code: Select all

<?php include ($_SERVER["DOCUMENT_ROOT"]."/rss/rss.php"); ?>
the other is

Code: Select all

<?php include ($_SERVER["DOCUMENT_ROOT"]."/rss/sidebarvideo.php"); ?>
now i have 2 php files, the php files look like this; the only difference is on line 4. one uses /rss/rsslist.txt & the other is /rss/video.txt

Code: Select all

<?php

$nr_news=15;
$rssfile=$_SERVER["DOCUMENT_ROOT"]."/rss/rsslist.txt";
$rssurls=file($rssfile);
$rand=rand(1,count($rssurls))-1;
$file = $rssurls[$rand];

$rss_channel = array();
$currently_writing = "";
$main = "";
$item_counter = 0;

function startElement($parser, $name, $attrs) {
   	global $rss_channel, $currently_writing, $main;
   	switch($name) {
   		case "RSS":
   		case "RDF:RDF":
   		case "ITEMS":
   			$currently_writing = "";
   			break;
   		case "CHANNEL":
   			$main = "CHANNEL";
   			break;
   		case "IMAGE":
   			$main = "IMAGE";
   			$rss_channel["IMAGE"] = array();
   			break;
   		case "ITEM":
   			$main = "ITEMS";
   			break;
   		default:
   			$currently_writing = $name;
   			break;
   	}
}

function endElement($parser, $name) {
   	global $rss_channel, $currently_writing, $item_counter;
   	$currently_writing = "";
   	if ($name == "ITEM") {
   		$item_counter++;
   	}
}

function characterData($parser, $data) {
	global $rss_channel, $currently_writing, $main, $item_counter;
	if ($currently_writing != "") {
		switch($main) {
			case "ITEMS":
				if (isset($rss_channel[$main][$item_counter][$currently_writing])) {
					$rss_channel[$main][$item_counter][$currently_writing] .= $data;
				} else {
					//print ("rss_channel[$main][$item_counter][$currently_writing] = $data<br>");
					$rss_channel[$main][$item_counter][$currently_writing] = $data;
				}
				break;
		}
	}
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
/*
if (!($fp = fopen($file, "r"))) {
	die("could not open XML input");
}

/*
while ($data = fread($fp, 4096)) {
	if (!xml_parse($xml_parser, $data, feof($fp))) {
		die(sprintf("XML error: %s at line %d",
					xml_error_string(xml_get_error_code($xml_parser)),
					xml_get_current_line_number($xml_parser)));
	}
}
*/
$data=curl_string($file);
xml_parse($xml_parser,$data);
xml_parser_free($xml_parser);

// putting in array
$news=array();
if (isset($rss_channel["ITEMS"])) 
{
	if (count($rss_channel["ITEMS"]) > 0) 
		for($i = 0;$i < count($rss_channel["ITEMS"]);$i++) $news[]=$rss_channel["ITEMS"][$i];
}
$c=0;
foreach($news as $key=>$val)
{
	if($c<$nr_news)
	{
		echo "<p align=left>";
		echo '<a href="'.$val['LINK'].'">'.$val['TITLE'].'</a> - '.$val['PUBDATE'].'<br>'.''.$val['DESCRIPTION'].'</font></p>';
	}
	$c++;
}


function curl_string ($url,$user_agent='Mozilla 5.0'){

       $ch = curl_init();

       curl_setopt ($ch, CURLOPT_URL, $url);
       curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent);
       curl_setopt ($ch, CURLOPT_HEADER, 0);
       curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
       curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
       curl_setopt ($ch, CURLOPT_TIMEOUT, 120);
       $result = curl_exec ($ch);
       curl_close($ch);
       return $result;
  
}

?>
now when i check the browser i get a fatal error.

Fatal error: Cannot redeclare startelement() (previously declared in /home1/bigmoney/public_html/sitename/rss/video.php:14) in /home1/bigmoney/public_html/sitename/rss/sidebarvideo.php on line 36


can anyone help me configure to allow both to work together. thanks for any help
lunarnet76
Forum Commoner
Posts: 67
Joined: Sun Apr 04, 2010 2:07 pm
Location: Edinburgh

Re: php xml feed

Post by lunarnet76 »

hu just a really quick'n'dirty solution : add if(!function_exists("functionName")) before all your functions :drunk:
a11c
Forum Newbie
Posts: 4
Joined: Mon Apr 05, 2010 5:26 pm

Re: php xml feed

Post by a11c »

can i ask why, i have only minimal experience with php
lunarnet76
Forum Commoner
Posts: 67
Joined: Sun Apr 04, 2010 2:07 pm
Location: Edinburgh

Re: php xml feed

Post by lunarnet76 »

in fact you cannot have two time the same function in a script,
as you include 2 time the same file and that file contains a function it is included 2 times!
with function_exists you ensure that the function is written only once in the script,
is it clear? cause my explanation seam a bit confused lol
a11c
Forum Newbie
Posts: 4
Joined: Mon Apr 05, 2010 5:26 pm

Re: php xml feed

Post by a11c »

so i should add

Code: Select all

if(!function_exists("functionName"))
to all functions. now will this fix my problem or is this just using php properly?
lunarnet76
Forum Commoner
Posts: 67
Joined: Sun Apr 04, 2010 2:07 pm
Location: Edinburgh

Re: php xml feed

Post by lunarnet76 »

you should use the function_exists only before startelement and endelement,
this is not a proper way of coding, this is just to avoid errors and it will make your code working!
The proper way would be to remove the function from the file you are included, and to had them in the file that includes your two rss feeds
User avatar
AbraCadaver
DevNet Master
Posts: 2572
Joined: Mon Feb 24, 2003 10:12 am
Location: The Republic of Texas
Contact:

Re: php xml feed

Post by AbraCadaver »

Move ALL of your functions to a file called rss/functions.php and make sure they are removed from rss/rss.php and rss/sidebarvideo.php. Then at the top of those two files put:

Code: Select all

include_once($_SERVER["DOCUMENT_ROOT"]."/rss/functions.php");
mysql_function(): WARNING: This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQLextension should be used. See also MySQL: choosing an API guide and related FAQ for more information.
a11c
Forum Newbie
Posts: 4
Joined: Mon Apr 05, 2010 5:26 pm

Re: php xml feed

Post by a11c »

i did everything as described and.....IT WORKS GREAT.

thanks for all the time and effort
Post Reply