Extracting data from XML sheet with PHP

TFlan

I could change this in my User CP.
Reaction score
64
i cant seem to figure this one out...

if i have this for xml:

Code:
<taghere attributename="value" anothername="value1" />

how do i get it so i can assign to a php value
Code:
$value = attributename;
 

enouwee

Non ex transverso sed deorsum
Reaction score
240
i cant seem to figure this one out...

if i have this for xml:

Code:
<taghere attributename="value" anothername="value1" />

how do i get it so i can assign to a php value
Code:
$value = attributename;
Which PHP version are you using and what exactly are you up to?

  • For large documents processed as a stream, use the SAX-based API functions. You'll find some more or less useful examples in this thread from: www.php.net.
  • For smaller things or when you have to jump back and forth between elements, there's XML DOM. Note that the API changed between PHP 4 and PHP 5.
  • There's more, like SimpleXML or XMLReader / XMLWriter.
  • Don't use some weird preg_match() constructs, as you'll have to do proper charset conversion and entity decoding.
Note that you definately don't want to set $myAttr based on attributename="myAttr", as bad things(TM) will happen on user-fed documents without toroughful input validation.

Brain-dead example using PHP5 DOM, without any sanity checks:
Code:
<?php

$xml = new DOMDocument();
$xml->loadXML('<taghere attributename="value" anothername="value1" />');

$elems = $xml->getElementsByTagName('taghere');
foreach ($elems as $elem)
{
  print $elem->getAttribute('attributename'). ' = ' . $elem->getAttribute('anothername') . "\n";
}

?>
 

TFlan

I could change this in my User CP.
Reaction score
64
Thank-you, but when i go to test this:

Code:
Warning: domdocument() expects at least 1 parameter, 0 given in
(address here) on line 5

Fatal error: Call to undefined function: loadxml() in
(address here) on line 6

Those errors are found on:

PHP:
$xml = new DOMDocument();
$xml->loadXML('test.xml');

EDIT:

This may be why

"PHP Version 4.4.0" -phpinfo();
 

enouwee

Non ex transverso sed deorsum
Reaction score
240
This may be why

"PHP Version 4.4.0" -phpinfo();

As this example shows, the day you're forced to upgrade to PHP5 or later, you'll have a lot of fun. Or just call it defective by design.

On a side note: if I were you, I'd choose another language for your website or whatever you're messing around with. That'd spare you quite a few potential security breaches, given you're running a pretty old release 4.4.0 (unless security patches have been backported?). If you really want to stick with PHP, add at least Stefan Esser's Suhosin hardening patches and extension: http://www.hardened-php.org/suhosin.127.html

Here's the same brain-dead code as above, but backported to PHP4:
PHP:
<?php

$xml = domxml_open_mem('<taghere attributename="value" anothername="value1" />');

$elems = $xml->get_elements_by_tagname('taghere');
foreach ($elems as $elem)
{
  print $elem->get_attribute('attributename'). ' = ' . $elem->get_attribute('anothername') . "\n";
}

?>
 

TFlan

I could change this in my User CP.
Reaction score
64
omg i cant figure this out for the life of me... ive been at php.net for the past couple hours trying to figure it out...

PHP:
function GetRoster(){
	$roster_front = "<table><tr><td>Name</td><td>Level</td><td>Class</td><td>Race</td><td>Gender</td><td></td></tr>";
	$xml = domxml_open_file("http://armory.worldofwarcraft.com/guild-info.xml?r=Lightning's+Blade&n=Paradigm+Shift");
	$elems = $xml->get_elements_by_tagname('characters');
	foreach ($elems as $elem){
		$name = $elem->get_attribute('name');
		$level = $elem->get_attribute('level');
		$class = $elem->get_attribute('class');
		$race = $elem->get_attribute('race');
		$gender = $elem->get_attribute('gender');
		$url = $elem->get_attribute('url');
	 	$roster_front .= "<tr><td>$name</td><td>$level</td><td>$class</td><td>$race</td><td>$gender</td><td><a href='http://armory.worldofwarcraft.com/character-sheet.xml?$url'>Armory</a></td></tr>";
	} 
	$roster_front .= "</table>";
	return $roster_front;
}

i get these errors:

Code:
Warning: domxml_open_file(): ParsePI: PI xml-stylesheet never end ... in /home/www/theugl.com/functions/functions.php on line 5

Warning: domxml_open_file(): Start tag expected, '<' not found in /home/www/theugl.com/functions/functions.php on line 5

Fatal error: Call to a member function on a non-object in /home/www/theugl.com/functions/functions.php on line 6

for the second warning i dont know what the hell its talking about...
 

enouwee

Non ex transverso sed deorsum
Reaction score
240
i get these errors:

Code:
Warning: domxml_open_file(): ParsePI: PI xml-stylesheet never end ... in /home/www/theugl.com/functions/functions.php on line 5

Warning: domxml_open_file(): Start tag expected, '<' not found in /home/www/theugl.com/functions/functions.php on line 5

Fatal error: Call to a member function on a non-object in /home/www/theugl.com/functions/functions.php on line 6

for the second warning i dont know what the hell its talking about...
It's pretty obvious, you only have to read the error messages and look at your code:

  1. fetch the XML file using a HTTP GET (cURL or whatever your favorite is) and not directly from the DOMXML code and switch to domxml_opem_mem() instead. Someone might turn off fopen_wrappers and you'll look stupid. Or it's already disabled, which would be good choice.
  2. (optional, may work find with the XSL stylesheet) remove the stylesheet from XML file, or tell PHP to ignore external entities
  3. once that works, you'll get another error. Try fetching character instead of characters in get_elements_by_tagname()
 

mase

____ ___ ____ __
Reaction score
154
Lol, are you sure you want to be opening Blizzard's xml files and listing the roster? You could be IP banned if someone spams it.
 

TFlan

I could change this in my User CP.
Reaction score
64
enouwee said:
fetch the XML file using a HTTP GET (cURL or whatever your favorite is) and not directly from the DOMXML code and switch to domxml_opem_mem() instead. Someone might turn off fopen_wrappers and you'll look stupid. Or it's already disabled, which would be good choice.

Im using domxml_opem_mem(), looked up the cURL, i have never even heard of that library before :confused:, i need some help there.

enouwee said:
(optional, may work find with the XSL stylesheet) remove the stylesheet from XML file, or tell PHP to ignore external entities

Ok, i found how to do it with php5, which my server isn't upgrading to yet..., but i can't find it on php4 :/

thanks for the help so far :D
 

enouwee

Non ex transverso sed deorsum
Reaction score
240
i need some help there.

Now what about this :D :
PHP:
<?php

$url = 'http://armory.worldofwarcraft.com/guild-info.xml?r=Lightning\'s+Blade&n=Paradigm+Shift';

header('Content-type: text/plain');

# -------------------------------------
# fetch $url using either cURL or fopen
# -------------------------------------
if (function_exists('curl_init'))
{
	# curl_* functions are available
	print "[+] cURL is installed. Using it.\n";
	if (($handle = curl_init($url)) === false)
	{
		print "[-] curl_init() failed\n";
		exit;
	}
	curl_setopt($handle, CURLOPT_HEADER, 0);
	curl_setopt($handle, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);

	if (($content = curl_exec($handle)) === false)
	{
		print "[-] curl_exec() failed\n";
		curl_close($handle);	
		exit;
	}
	curl_close($handle);	
}
else if (is_resource($handle = fopen($url, 'r')))
{
	# revert to fopen()
	print "[+] Using fopen_wrapper\n";
	$content = '';
	while(!feof($handle))
	{
		if (($tmp = fread($handle, 4096)) === false)
		{
			print "[-] fread() failed\n";
			fclose($handle);	
			exit;
		}
		$content .= $tmp;
	}
	fclose($handle);	
}
else if (function_exists('fsockopen'))
{
	print "[+] Using fsockopen()\n";
	if (!preg_match(',http://(.*?)(/.*),', $url, &$matches))
	{
		print '[-] Invalid $url: ' . $url . "\n";
		exit;
	}

	if (!($handle = fsockopen($matches[1], 80)))
	{
		print "[-] fread() failed\n";
		exit;
	}

	$request = 'GET ' . $matches[2] . ' HTTP/1.1' . "\n"
	. 'Host: ' . $matches[1] . "\n"
	. 'Connection: close' . "\n\n";

	$len = strlen($request);
	if (fwrite($handle, $request, $len) != $len)
	{
		print "[-] fwrite() couldn't send the data\n";
		exit;
	}
	fflush($handle);

	$content = '';
	while(!feof($handle))
	{
		if (($tmp = fread($handle, 4096)) === false)
		{
			print "[-] fread() failed\n";
			fclose($handle);	
			exit;
		}
		$content .= $tmp;
	}
	fclose($handle);	

	if (($pos = strpos($content, "\n\n")) === false && ($pos = strpos($content, "\r\n\r\n")) === false)
	{
		print "[-] HTTP response header not found\n";
		exit;
	}

	$content = substr($content, $pos);
}
else
{
	# better try something else...
	print "[-] Bad luck, neither cUrl, fsockopen() nor fopen_wrapper available\n";
	exit;
}

# ---------------------------
# parse $content using DOMXML
# ---------------------------
if (($xml = domxml_open_mem($content)) == false)
{
	print "[-] domxml_open_mem() failed\n";
	exit;
}

$elems = $xml->get_elements_by_tagname('character');
if (empty($elems))
{
	print "[-] No elements available.\n";
	exit;
}

print "[+] Output:\n";
foreach ($elems as $elem)
{
	print 'Name:	' . $elem->get_attribute('name') . "\n"
	. 'Level:	' . $elem->get_attribute('level') . "\n"
	. 'Class:	' . $elem->get_attribute('class') . "\n"
	. 'Race:	 ' . $elem->get_attribute('race') . "\n"
	. 'Gender: ' . $elem->get_attribute('gender') . "\n"
	. 'Url:		' . $elem->get_attribute('url') . "\n\n";
}

?>
 

TFlan

I could change this in my User CP.
Reaction score
64
wow! (+rep on that one)

I love it, but...

Code:
[+] cURL is installed. Using it.
<br />
<b>Warning</b>:  domxml_open_mem(): ParsePI: PI xml-stylesheet never end ...
 in ... on line <b>105</b><br />
<br />
<b>Warning</b>:  domxml_open_mem(): Start tag expected, '&lt;' not found
 in ... on line <b>105</b><br />
[-] domxml_open_mem() failed

Lines its talking about, but i think you know from this:

Code:
[-] domxml_open_mem() failed

here is the php

PHP:
if (($xml = domxml_open_mem($content)) == false)
{
    print "[-] domxml_open_mem() failed\n";
    exit;
}


---------

@ DDRtists
Oh but i do!!! Plus this will give me insight on how to use XML inside PHP, which is a big bonus :D
 

enouwee

Non ex transverso sed deorsum
Reaction score
240
Nice one, Blizzard. :rolleyes:
Maybe I should have tested on the live system, rather than a local copy of the XML save.

Working solution in a few minutes. The webserver doesn't return you XML, but plain HTML.
 

TFlan

I could change this in my User CP.
Reaction score
64
i can always put in a timer, allowing it to open once a day, and every 24 hours save the Armory XML to an XML sheet on my server and just pull the info off of that.

problem solved :D

-----
EDIT:
-----

Source from link http://armory.worldofwarcraft.com/guild-info.xml?r=Lightning's+Blade&n=Underworld

Code:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/layout/guild-info.xsl"?>

<page globalSearch="1" lang="en_us" requestUrl="/guild-info.xml">
  <guildInfo>
    <guild battleGroup="Vindication" name="Underworld" realm="Lightning's Blade" rosterUrl="r=Lightning%27s+Blade&amp;n=Underworld&amp;p=1" statsUrl="r=Lightning%27s+Blade&amp;n=Underworld" statsUrlEscape="r=Lightning%27s+Blade&amp;n=Underworld">
      <members memberCount="49">
        <character class="Rogue" classId="4" gender="Male" genderId="0" level="47" name="Acillatem" race="Undead" raceId="5" rank="4" url="r=Lightning%27s+Blade&amp;n=Acillatem"/>
        <character class="Druid" classId="11" gender="Male" genderId="0" level="70" name="Amaha" race="Tauren" raceId="6" rank="1" url="r=Lightning%27s+Blade&amp;n=Amaha"/>
        <character class="Shaman" classId="7" gender="Male" genderId="0" level="70" name="Asakhar" race="Orc" raceId="2" rank="3" url="r=Lightning%27s+Blade&amp;n=Asakhar"/>
        <character class="Warlock" classId="9" gender="Male" genderId="0" level="48" name="Bloodi" race="Blood Elf" raceId="10" rank="3" url="r=Lightning%27s+Blade&amp;n=Bloodi"/>

        <character class="Rogue" classId="4" gender="Male" genderId="0" level="46" name="Bloodmaniak" race="Blood Elf" raceId="10" rank="4" url="r=Lightning%27s+Blade&amp;n=Bloodmaniak"/>
        <character class="Druid" classId="11" gender="Male" genderId="0" level="20" name="Clockradio" race="Tauren" raceId="6" rank="4" url="r=Lightning%27s+Blade&amp;n=Clockradio"/>
        <character class="Rogue" classId="4" gender="Male" genderId="0" level="60" name="Cooldowns" race="Blood Elf" raceId="10" rank="3" url="r=Lightning%27s+Blade&amp;n=Cooldowns"/>
        <character class="Priest" classId="5" gender="Female" genderId="1" level="66" name="Curranhealz" race="Undead" raceId="5" rank="3" url="r=Lightning%27s+Blade&amp;n=Curranhealz"/>
        <character class="Warlock" classId="9" gender="Male" genderId="0" level="70" name="Deathwishh" race="Undead" raceId="5" rank="3" url="r=Lightning%27s+Blade&amp;n=Deathwishh"/>
        <character class="Mage" classId="8" gender="Male" genderId="0" level="45" name="Diablomaniak" race="Blood Elf" raceId="10" rank="4" url="r=Lightning%27s+Blade&amp;n=Diablomaniak"/>
        <character class="Warrior" classId="1" gender="Male" genderId="0" level="25" name="Doesitmatter" race="Undead" raceId="5" rank="4" url="r=Lightning%27s+Blade&amp;n=Doesitmatter"/>
        <character class="Warrior" classId="1" gender="Male" genderId="0" level="70" name="Eofk" race="Tauren" raceId="6" rank="1" url="r=Lightning%27s+Blade&amp;n=Eofk"/>
        <character class="Warlock" classId="9" gender="Male" genderId="0" level="70" name="Fearfigment" race="Undead" raceId="5" rank="3" url="r=Lightning%27s+Blade&amp;n=Fearfigment"/>

        <character class="Hunter" classId="3" gender="Male" genderId="0" level="11" name="Fokd" race="Tauren" raceId="6" rank="4" url="r=Lightning%27s+Blade&amp;n=Fokd"/>
        <character class="Hunter" classId="3" gender="Male" genderId="0" level="70" name="Foldeak" race="Blood Elf" raceId="10" rank="3" url="r=Lightning%27s+Blade&amp;n=Foldeak"/>
        <character class="Mage" classId="8" gender="Male" genderId="0" level="70" name="Froggert" race="Undead" raceId="5" rank="3" url="r=Lightning%27s+Blade&amp;n=Froggert"/>
        <character class="Priest" classId="5" gender="Male" genderId="0" level="70" name="Ghostmaniak" race="Blood Elf" raceId="10" rank="1" url="r=Lightning%27s+Blade&amp;n=Ghostmaniak"/>
        <character class="Druid" classId="11" gender="Male" genderId="0" level="70" name="Grogol" race="Tauren" raceId="6" rank="1" url="r=Lightning%27s+Blade&amp;n=Grogol"/>
        <character class="Paladin" classId="2" gender="Male" genderId="0" level="70" name="Halomaniak" race="Blood Elf" raceId="10" rank="1" url="r=Lightning%27s+Blade&amp;n=Halomaniak"/>
        <character class="Paladin" classId="2" gender="Male" genderId="0" level="25" name="Herthnbuble" race="Blood Elf" raceId="10" rank="4" url="r=Lightning%27s+Blade&amp;n=Herthnbuble"/>
        <character class="Priest" classId="5" gender="Male" genderId="0" level="70" name="Hippoboy" race="Troll" raceId="8" rank="4" url="r=Lightning%27s+Blade&amp;n=Hippoboy"/>
        <character class="Warrior" classId="1" gender="Male" genderId="0" level="70" name="Hippoman" race="Tauren" raceId="6" rank="3" url="r=Lightning%27s+Blade&amp;n=Hippoman"/>

        <character class="Mage" classId="8" gender="Male" genderId="0" level="21" name="Jamairak" race="Undead" raceId="5" rank="4" url="r=Lightning%27s+Blade&amp;n=Jamairak"/>
        <character class="Paladin" classId="2" gender="Female" genderId="1" level="51" name="Jessicalee" race="Blood Elf" raceId="10" rank="3" url="r=Lightning%27s+Blade&amp;n=Jessicalee"/>
        <character class="Rogue" classId="4" gender="Male" genderId="0" level="70" name="Jikeidan" race="Undead" raceId="5" rank="1" url="r=Lightning%27s+Blade&amp;n=Jikeidan"/>
        <character class="Hunter" classId="3" gender="Male" genderId="0" level="70" name="Kakihara" race="Orc" raceId="2" rank="3" url="r=Lightning%27s+Blade&amp;n=Kakihara"/>
        <character class="Rogue" classId="4" gender="Male" genderId="0" level="39" name="Kalph" race="Undead" raceId="5" rank="3" url="r=Lightning%27s+Blade&amp;n=Kalph"/>
        <character class="Warrior" classId="1" gender="Male" genderId="0" level="70" name="Marahumal" race="Tauren" raceId="6" rank="3" url="r=Lightning%27s+Blade&amp;n=Marahumal"/>
        <character class="Priest" classId="5" gender="Female" genderId="1" level="70" name="Mirowen" race="Undead" raceId="5" rank="1" url="r=Lightning%27s+Blade&amp;n=Mirowen"/>
        <character class="Mage" classId="8" gender="Male" genderId="0" level="22" name="Nuajix" race="Undead" raceId="5" rank="4" url="r=Lightning%27s+Blade&amp;n=Nuajix"/>
        <character class="Mage" classId="8" gender="Male" genderId="0" level="70" name="Reboot" race="Blood Elf" raceId="10" rank="0" url="r=Lightning%27s+Blade&amp;n=Reboot"/>

        <character class="Mage" classId="8" gender="Male" genderId="0" level="70" name="Rexmaniak" race="Blood Elf" raceId="10" rank="1" url="r=Lightning%27s+Blade&amp;n=Rexmaniak"/>
        <character class="Druid" classId="11" gender="Male" genderId="0" level="68" name="Roako" race="Tauren" raceId="6" rank="3" url="r=Lightning%27s+Blade&amp;n=Roako"/>
        <character class="Mage" classId="8" gender="Male" genderId="0" level="70" name="Sarriz" race="Undead" raceId="5" rank="3" url="r=Lightning%27s+Blade&amp;n=Sarriz"/>
        <character class="Hunter" classId="3" gender="Male" genderId="0" level="70" name="Sevenups" race="Troll" raceId="8" rank="1" url="r=Lightning%27s+Blade&amp;n=Sevenups"/>
        <character class="Mage" classId="8" gender="Male" genderId="0" level="70" name="Shabobble" race="Undead" raceId="5" rank="3" url="r=Lightning%27s+Blade&amp;n=Shabobble"/>
        <character class="Warrior" classId="1" gender="Male" genderId="0" level="70" name="Spearhead" race="Undead" raceId="5" rank="2" url="r=Lightning%27s+Blade&amp;n=Spearhead"/>
        <character class="Rogue" classId="4" gender="Male" genderId="0" level="70" name="Spiritkiller" race="Troll" raceId="8" rank="3" url="r=Lightning%27s+Blade&amp;n=Spiritkiller"/>
        <character class="Warlock" classId="9" gender="Male" genderId="0" level="70" name="Stupify" race="Undead" raceId="5" rank="3" url="r=Lightning%27s+Blade&amp;n=Stupify"/>
        <character class="Mage" classId="8" gender="Male" genderId="0" level="70" name="Sudantu" race="Undead" raceId="5" rank="4" url="r=Lightning%27s+Blade&amp;n=Sudantu"/>

        <character class="Hunter" classId="3" gender="Male" genderId="0" level="70" name="Trappa" race="Blood Elf" raceId="10" rank="3" url="r=Lightning%27s+Blade&amp;n=Trappa"/>
        <character class="Priest" classId="5" gender="Male" genderId="0" level="70" name="Trie" race="Undead" raceId="5" rank="3" url="r=Lightning%27s+Blade&amp;n=Trie"/>
        <character class="Shaman" classId="7" gender="Male" genderId="0" level="70" name="Twopac" race="Tauren" raceId="6" rank="4" url="r=Lightning%27s+Blade&amp;n=Twopac"/>
        <character class="Mage" classId="8" gender="Male" genderId="0" level="64" name="Uptown" race="Undead" raceId="5" rank="4" url="r=Lightning%27s+Blade&amp;n=Uptown"/>
        <character class="Warrior" classId="1" gender="Male" genderId="0" level="70" name="Warhero" race="Orc" raceId="2" rank="3" url="r=Lightning%27s+Blade&amp;n=Warhero"/>
        <character class="Druid" classId="11" gender="Male" genderId="0" level="70" name="Warugi" race="Tauren" raceId="6" rank="3" url="r=Lightning%27s+Blade&amp;n=Warugi"/>
        <character class="Shaman" classId="7" gender="Male" genderId="0" level="70" name="Xereth" race="Troll" raceId="8" rank="2" url="r=Lightning%27s+Blade&amp;n=Xereth"/>
        <character class="Druid" classId="11" gender="Male" genderId="0" level="70" name="Yaok" race="Tauren" raceId="6" rank="2" url="r=Lightning%27s+Blade&amp;n=Yaok"/>
        <character class="Warlock" classId="9" gender="Female" genderId="1" level="70" name="Zukina" race="Blood Elf" raceId="10" rank="1" url="r=Lightning%27s+Blade&amp;n=Zukina"/>

      </members>
    </guild>
  </guildInfo>
</page>
 

TFlan

I could change this in my User CP.
Reaction score
64
So like this:

PHP:
function CheckRoster(){
	$sql = "SELECT * FROM miscinfo WHERE title = 'rostertimer'";
	$result = mysql_query($sql);
	if(mysql_query($sql)){
		$prev_day = mysql_result($result, 0, 'info1');
		$curr_day = date(Ymd);
		if($prev_day<$currday){
			UpdateRoster();
		}else{
			GetRoster();
		}
	}else{
		return "Error: Could not complete $sql";
	}
}
 

enouwee

Non ex transverso sed deorsum
Reaction score
240
DISCLAIMER: This code is for demonstration purposes only and sends wrong "identification" headers to get the XML content instead the HTML. Do not use it to automatically fetch content of the Blizzard site.

This server configuration is definatly intentional, be it for compatibility purposes (older browsers can't necessarily do client-side XSL transformations) or to prevent data-mining.

PHP:
<?php

$url = 'http://armory.worldofwarcraft.com/guild-info.xml?r=Lightning\'s+Blade&n=Paradigm+Shift';

header('Content-type: text/plain');

if (($handle = curl_init($url)) === false)
{
	print "[-] curl_init() failed\n";
	exit;
}

$headers = array(
  'Accept: text/xml,application/xml,application/xhtml+xml',
  'Accept-Charset: utf-8,ISO-8859-1'
);

curl_setopt($handle, CURLOPT_HEADER, 0);
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20070101 Firefox/2.0.0.4');
curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);

if (($content = curl_exec($handle)) === false)
{
	print "[-] curl_exec() failed\n";
	curl_close($handle);	
	exit;
}
curl_close($handle);	


if (($xml = domxml_open_mem($content)) == false)
{
	print "[-] domxml_open_mem() failed\n";
	exit;
}

$elems = $xml->get_elements_by_tagname('character');
if (empty($elems))
{
	print "[-] No elements available.\n";
	exit;
}

print "[+] Output:\n";
foreach ($elems as $elem)
{
	print 'Name:	' . $elem->get_attribute('name') . "\n"
	. 'Level:	' . $elem->get_attribute('level') . "\n"
	. 'Class:	' . $elem->get_attribute('class') . "\n"
	. 'Race:	 ' . $elem->get_attribute('race') . "\n"
	. 'Gender: ' . $elem->get_attribute('gender') . "\n"
	. 'Url:		' . $elem->get_attribute('url') . "\n\n";
}


?>
 

TFlan

I could change this in my User CP.
Reaction score
64
Ok i love you because it worked :D

BUT im scared of what u mean in the disclaimer....
wrong "identification" headers

Meaning, the code is lying to wow.com?
 

enouwee

Non ex transverso sed deorsum
Reaction score
240
Ok i love you because it worked :D

BUT im scared of what u mean in the disclaimer....


Meaning, the code is lying to wow.com?
Yes, it's pretending to be a Firefox browser, as the Blizzard webserver sends back HTML if you don't provide a supported "User-Agent" and/or "Accept" header, matching a (probably hardcoded) list of browsers known to be able to apply XSLT correctly).

You shouldn't fetch the stats this way. It might work, but it might also get you in trouble. Better check the terms and conditions or ask for permission.
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Varine Varine:
    I ordered like five blocks for 15 dollars. They're just little aluminum blocks with holes drilled into them
  • Varine Varine:
    They are pretty much disposable. I have shitty nozzles though, and I don't think these were designed for how hot I've run them
  • Varine Varine:
    I tried to extract it but the thing is pretty stuck. Idk what else I can use this for
  • Varine Varine:
    I'll throw it into my scrap stuff box, I'm sure can be used for something
  • Varine Varine:
    I have spare parts for like, everything BUT that block lol. Oh well, I'll print this shit next week I guess. Hopefully it fits
  • Varine Varine:
    I see that, despite your insistence to the contrary, we are becoming a recipe website
  • Varine Varine:
    Which is unique I guess.
  • The Helper The Helper:
    Actually I was just playing with having some kind of mention of the food forum and recipes on the main page to test and see if it would engage some of those people to post something. It is just weird to get so much traffic and no engagement
  • The Helper The Helper:
    So what it really is me trying to implement some kind of better site navigation not change the whole theme of the site
  • Varine Varine:
    How can you tell the difference between real traffic and indexing or AI generation bots?
  • The Helper The Helper:
    The bots will show up as users online in the forum software but they do not show up in my stats tracking. I am sure there are bots in the stats but the way alot of the bots treat the site do not show up on the stats
  • Varine Varine:
    I want to build a filtration system for my 3d printer, and that shit is so much more complicated than I thought it would be
  • Varine Varine:
    Apparently ABS emits styrene particulates which can be like .2 micrometers, which idk if the VOC detectors I have can even catch that
  • Varine Varine:
    Anyway I need to get some of those sensors and two air pressure sensors installed before an after the filters, which I need to figure out how to calculate the necessary pressure for and I have yet to find anything that tells me how to actually do that, just the cfm ratings
  • Varine Varine:
    And then I have to set up an arduino board to read those sensors, which I also don't know very much about but I have a whole bunch of crash course things for that
  • Varine Varine:
    These sensors are also a lot more than I thought they would be. Like 5 to 10 each, idk why but I assumed they would be like 2 dollars
  • Varine Varine:
    Another issue I'm learning is that a lot of the air quality sensors don't work at very high ambient temperatures. I'm planning on heating this enclosure to like 60C or so, and that's the upper limit of their functionality
  • Varine Varine:
    Although I don't know if I need to actually actively heat it or just let the plate and hotend bring the ambient temp to whatever it will, but even then I need to figure out an exfiltration for hot air. I think I kind of know what to do but it's still fucking confusing
  • The Helper The Helper:
    Maybe you could find some of that information from AC tech - like how they detect freon and such
  • Varine Varine:
    That's mostly what I've been looking at
  • Varine Varine:
    I don't think I'm dealing with quite the same pressures though, at the very least its a significantly smaller system. For the time being I'm just going to put together a quick scrubby box though and hope it works good enough to not make my house toxic
  • Varine Varine:
    I mean I don't use this enough to pose any significant danger I don't think, but I would still rather not be throwing styrene all over the air

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top