PDA

View Full Version : Parsing the USFIRST Champ list


Jack
04-01-2003, 07:13 PM
Hey all...

Here is some php code that will parse the usfirst team list for the champ event for you. You can change the echo's to assign the fields to an array which you could insert into your db. If you have any questions, feel free to ask me.

<?php

//Team Parser for The 2003 FIRST Champ. Event
//Designed by: Andrew Schenk (email: webmaster@feds201.com)
//Code tested on PHP 4.3.1 - (should work on any 4+ version & mabey 3 depending on some functions)

//Known Bugs:
//The current source code for the team website is not correct. It is missing the "" around the url.
//If first decides to correct this error do the following to the code:
/*
--find--
echo substr($var, (strpos($var, 'href=')+5), (strpos($var, '>') - strpos($var, 'href=')-5)).'<br />';

--replace with--
echo substr($var, (strpos($var, 'href="')+6), (strpos($var, '">') - strpos($var, 'href="')-6)).'<br />';
*/
//I'm 99% sure that would correct the code, but not sure exactly how they would change it so... who knows?

//to actually use the code, replace the echo statements with an array var and then you could dump that array into your db


//hehe... actually going to include a few comments...

//--get source code from usfirst--//
$source = '';

@ $source_pointer = fopen('http://www.usfirst.org/frc/map/FMPro?-db=team%20events.fp5&-lay=web&-format=team_list.htm&event=CMP&event%20year=2003&status=signed%20up&-sortfield=team%20id&-max=all&-find', "r");

if ( $source_pointer === false )
{
die('Could not open url');
}

while ( !feof($source_pointer) )
{
$source .= fread($source_pointer, 1024);
}

fclose($source_pointer);

$x = 0; //$x is going to be the var to hold our string offset in all the strpos() functions

while ( strpos($source, '<TR BGCOLOR="#FFFFFF">', $x) > $x )
{
echo '<hr>';

$x = strpos($source, '<TR BGCOLOR="#FFFFFF">', $x) + 22; //find the start of a new record (<tr>) and then offset the pointer to the end of it

while ( strpos($source, '</TR>', $x) > strpos($source, '<TD class="news">', $x) && strpos($source, '<TD class="news">', $x) > $x )
{

$x = strpos($source, '<TD class="news">', $x) + 17; //find the start of a new field and offset the pointer to the end

$var = trim(substr($source, $x, (strpos($source, '</TD>', $x) - $x))); //assign the field to the var

if ( strpos($var, '<A') !== false ) //decide if the var has a link in it
{
echo substr($var, (strpos($var, 'href=')+5), (strpos($var, '>') - strpos($var, 'href=')-5)).'<br />'; //get url from link
$var = strip_tags($var); //return the team name
echo $var;
} else {
echo $var.'<br />'; //return a var without a link
}

}

}

//--the end--//

?>

AJ Quick
04-01-2003, 09:16 PM
I noticed a bug, when it displayed results with a website, it didn't properly phrase the location of the the team. That can easily be fixed with this version:

<?php

//Team Parser for The 2003 FIRST Champ. Event
//Designed by: Andrew Schenk (email: webmaster@feds201.com)
//Code tested on PHP 4.3.1 - (should work on any 4+ version & mabey 3 depending on some functions)
//Code tested on PHP 4.1.2 - (worked fine)

//Known Bugs:
//The current source code for the team website is not correct. It is missing the "" around the url.
//If first decides to correct this error do the following to the code:
/*
--find--
echo substr($var, (strpos($var, 'href=')+5), (strpos($var, '>') - strpos($var, 'href=')-5)).'<br />';

--replace with--
echo substr($var, (strpos($var, 'href="')+6), (strpos($var, '">') - strpos($var, 'href="')-6)).'<br />';
*/
//I'm 99% sure that would correct the code, but not sure exactly how they would change it so... who knows?

//to actually use the code, replace the echo statements with an array var and then you could dump that array into your db


//hehe... actually going to include a few comments...

//--get source code from usfirst--//
$source = '';

@ $source_pointer = fopen('http://www.usfirst.org/frc/map/FMPro?-db=team%20events.fp5&-lay=web&-format=team_list.htm&event=CMP&event%20year=2003&status=signed%20up&-sortfield=team%20id&-max=all&-find', "r");

if ( $source_pointer === false )
{
die('Could not open url');
}

while ( !feof($source_pointer) )
{
$source .= fread($source_pointer, 1024);
}

fclose($source_pointer);

$x = 0; //$x is going to be the var to hold our string offset in all the strpos() functions

while ( strpos($source, '<TR BGCOLOR="#FFFFFF">', $x) > $x )
{
echo '<hr>';
$loc = '';

$x = strpos($source, '<TR BGCOLOR="#FFFFFF">', $x) + 22; //find the start of a new record (<tr> ) and then offset the pointer to the end of it

while ( strpos($source, '</TR>', $x) > strpos($source, '<TD class="news">', $x) && strpos($source, '<TD class="news">', $x) > $x )
{

$x = strpos($source, '<TD class="news">', $x) + 17; //find the start of a new field and offset the pointer to the end

$var = trim(substr($source, $x, (strpos($source, '</TD>', $x) - $x))); //assign the field to the var

if ( strpos($var, '<A') !== false ) //decide if the var has a link in it
{
echo substr($var, (strpos($var, 'href=')+5), (strpos($var, '>') - strpos($var, 'href=')-5)).'<br />'; //get url from link
$var = explode("</a>", $var); //by AJ Quick (CogSquad.org)
$loc = $var[1];
$var = strip_tags($var[0]); //return the team name
echo $var.'<br />'.$loc;
$var = trim(substr($source, $x, (strpos($source, '</TD>', $x) - $x))); //assign the field to the var
} else {
echo $var.'<br />'; //return a var without a link
$var = trim(substr($source, $x, (strpos($source, '</TD>', $x) - $x))); //assign the field to the var
}

}

}

//--the end--//

?>




It is really great that you provide teams with these resources. I was totally lost, when it came to doing this, but once I looked at the source for one you did.. it became very easy.

Thanks Jack!

Jack
04-01-2003, 09:55 PM
Hey, thanks for pointing out that error. Your soultion is a bit overcomplacated. I designed the script to be inserted into my MySQL DB. I then changed it so that it could be output to a browser. The real problem was that in forgot the <br /> tag on the end of one of the lines :p

$var = strip_tags($var); //return the team name
echo $var;

to

echo trim(strip_tags($var)).'<br />'; //return the team name


hehe, yeah... thanks again for catching it. (You way's cool too:) )

and as you can see in that fix, you might want to make sure that you run all the $var's though trim() to kill any whitespace as i forgot to do a few times.