 |
Account Login
|
 |
 |
Latest Articles
|
 |
 |
Advertisement
|
 |
 |
Associates
|
 |
 |
Associates
|
 |
|
 |
 |
|
 |
08-24-2008, 10:00 PM
|
#1 (permalink)
|
|
The Contributor
Join Date: Sep 2007
Location: United Kingdom
Posts: 41
Thanks: 4
|
World of Warcraft Armory xml Grabber with cURL
Ok, I ran across this a little while ago and since I spent a lot of time looking for this, I thought I would share this with all you guys here that want it.
PHP Code:
class armory {
const BROWSER="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.2) Gecko/20070319 Firefox/2.0.0.3";
public $query; public $server; public $guild; public $guildie; public $page;
public function __construct ( $query, $server, $guild, $guildie, $page ) { $this->query = $query; $this->server = $server; $this->guild = $guild; $this->guildie = $guildie; $this->page = $page; } // end of __construct()
public function pull_xml() {
// change the first part of the $url to the armory link that you need if( $this->query === 'roster' ){ $url = 'http://eu.wowarmory.com/guild-info.xml?r=' . urlencode($this->server) . '&n=' . urlencode($this->guild) . '&p=' . $this->page; }elseif( $this->query === 'character' ){ $url = 'http://eu.wowarmory.com/character-sheet.xml?r=' . urlencode($this->server) . '&n=' . $this->guildie; }
$ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 15); curl_setopt ($ch, CURLOPT_USERAGENT, self::BROWSER); $url_string = curl_exec($ch); curl_close($ch); return simplexml_load_string($url_string); } // end of pull_xml()
} // end class
And then to use it:
PHP Code:
Syntax: $armory = new armory( [character or roster] , realm , [guild name or NULL] , character name , [page number (guilds only) or NULL];
Example: $armory = new armory(character, hellscream, NULL, mortisimus, NULL); $xml = $armory->pull_xml();
Then you could var_dump($xml) to see all the options you can pull from the armory.
Another example (to get the name):
PHP Code:
$armory = new armory(character, hellscream, NULL, mortisimus, NULL); $xml = $armory->pull_xml(); echo $xml->characterInfo->character['name'];
Which will get the value of the name in the character tag, contained in the characterInfo tag in the xml file from the armory or in short, the characters name
All simple stuff but it helped me out.
The World of Warcraft Armory - EU
The World of Warcraft Armory - US
__________________
LONG time talkphp member. Short time poster :-)
Last edited by mortisimus : 11-09-2008 at 09:43 AM.
|
|
|
|
The Following 4 Users Say Thank You to mortisimus For This Useful Post:
|
|
08-25-2008, 03:12 PM
|
#2 (permalink)
|
|
The Gregarious
Join Date: Oct 2007
Location: Manchester, UK
Posts: 532
Thanks: 26
|
Thanks, I wrote something similar not long ago for a guild website i was developing. In my case I used armory to populate the guild roster in the DB.
One thing i did notice about your code:
PHP Code:
$url_string = curl_exec($ch); return simplexml_load_string($url_string); curl_close($ch);
The curl_close is defined after the return, thus it is never fired and resources never freed.
This is the correct code:
PHP Code:
$url_string = curl_exec($ch); curl_close($ch);
return simplexml_load_string($url_string);
Also
PHP Code:
curl_setopt ($ch, CURLOPT_USERAGENT, armory::BROWSER);
may aswell be:
PHP Code:
curl_setopt ($ch, CURLOPT_USERAGENT, self::BROWSER);
Just in case you wish to change the name of your class.
__________________
|
|
|
|
|
The Following User Says Thank You to sketchMedia For This Useful Post:
|
|
08-26-2008, 01:03 PM
|
#3 (permalink)
|
|
The Contributor
Join Date: Sep 2007
Location: United Kingdom
Posts: 41
Thanks: 4
|
Thanks, updated it.
__________________
LONG time talkphp member. Short time poster :-)
|
|
|
10-05-2008, 05:24 PM
|
#4 (permalink)
|
|
The Gregarious
Join Date: Sep 2007
Posts: 748
Thanks: 85
|
Looks cool :D
__________________
|
|
|
|
10-10-2008, 11:57 AM
|
#5 (permalink)
|
|
The Frequenter
Join Date: Nov 2007
Location: Netherlands
Posts: 445
Thanks: 49
|
Pretty good, but I don't play WoW. ;) Non the less, good share.
__________________
"Life is a bitch, take that bitch on a ride"
|
|
|
11-08-2008, 09:07 PM
|
#6 (permalink)
|
|
The Wanderer
Join Date: Nov 2008
Posts: 5
Thanks: 2
|
Great contribution, really simple to follow and takes a whole lot of headache out of querying the armory!
Managed to get information on characters with no problems but hit a snag when trying to query guild info. Noticed a wee typo on the example above:
PHP Code:
// change the first part of the $url to the armory link that you need if( $this->query === 'roster' ){ $url = 'http://eu.wowarmory.com.com/guild-info.xml?r=' . $this->server . '&n=' . $this->guild . '&p=' . $this->page;
Remove the spurious .com and everything works as expected :)
p.s excuse the thread necromancy ... figured this was worth it though.
|
|
|
|
11-08-2008, 09:32 PM
|
#7 (permalink)
|
|
The Wanderer
Join Date: Nov 2008
Posts: 5
Thanks: 2
|
Just also noticed, for guilds or server names with spaces the above code breaks. This very slightly modified version should be fine as it converts the whitespace to '+' which is how blizz formats it.
PHP Code:
public function pull_xml() {
// change the first part of the $url to the armory link that you need if( $this->query === 'roster' ){ $url = 'http://eu.wowarmory.com/guild-info.xml?r=' . urlencode($this->server) . '&n=' . urlencode($this->guild) . '&p=' . $this->page; }elseif( $this->query === 'character' ){ $url = 'http://eu.wowarmory.com/character-sheet.xml?r=' . urlencode($this->server) . '&n=' . $this->guildie; }
|
|
|
|
|
The Following User Says Thank You to Mithadriel For This Useful Post:
|
|
11-09-2008, 09:43 AM
|
#8 (permalink)
|
|
The Contributor
Join Date: Sep 2007
Location: United Kingdom
Posts: 41
Thanks: 4
|
Cheers 
__________________
LONG time talkphp member. Short time poster :-)
|
|
|
11-21-2008, 08:44 PM
|
#9 (permalink)
|
|
The Visitor
Join Date: Nov 2008
Posts: 2
Thanks: 0
|
Ok quick question for you PHP folks. :)
I have managed to get this "working" for a guild roster.
I get to this point...
PHP Code:
$armory = new armory('roster', 'Dawnbringer', 'Fates Defiance', 'Bberrymuffin', NULL);
$xml = $armory->pull_xml();
echo $xml->guildInfo->guild->members->character['name'];
Now I have the XML, and the "character" tag repeats for every member in the guild.
My question is, how do you look through all of the character elements of the members element to get the information on each character?
My PHP skills aren't the best in the world, sorry if this is a dumb question!
Thanks in advance for any help!
|
|
|
|
11-21-2008, 09:12 PM
|
#10 (permalink)
|
|
The Visitor
Join Date: Nov 2008
Posts: 2
Thanks: 0
|
Ok I figured it out (should have googled first haha!)
PHP Code:
foreach ($xml->guildInfo->guild->members->character as $char) {
echo $char['name'] . "<br>";
}
Anyone know how I can go about sorting this array of arrays for the ['name']?
|
|
|
|
01-06-2009, 11:06 PM
|
#11 (permalink)
|
|
The Visitor
Join Date: Jan 2009
Posts: 1
Thanks: 0
|
It doesnt work for me.
Quote:
|
Fatal error: Call to undefined function curl_init() in C:\wamp\www\wow\index.php on line 32
|
|
|
|
|
01-06-2009, 11:50 PM
|
#12 (permalink)
|
|
La Vida es Sueño
Join Date: Sep 2007
Location: Oldham
Posts: 1,654
Thanks: 73
|
Welcome to the community, Kalle! In order for it to work, you will need to have the cURL module enabled on your server.
To do so, open the following file: C:\wamp\Apache2\bin\php.ini and uncomment the line extension=php_curl.dll (Remove the semi-colon from the start of the line). Don't forget to restart WAMP after doing so.
__________________
The man who comes back through the Door in the Wall will never be quite the same as the man who went out.
|
|
|
Yesterday, 07:16 PM
|
#13 (permalink)
|
|
The Gregarious
Join Date: Oct 2007
Location: Manchester, UK
Posts: 532
Thanks: 26
|
An alternative to using curl would be:
PHP Code:
/* $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 15); curl_setopt ($ch, CURLOPT_USERAGENT, self::BROWSER);
$url_string = curl_exec($ch); curl_close($ch);*/ $opts = array( 'http'=>array( 'method'=>"GET", 'header'=>"User-Agent: ".self::BROWSER." \r\n" ) ); $url_string = file_get_contents($url,false,stream_context_create($opts)); return simplexml_load_string($url_string);
__________________
|
|
|
|
Yesterday, 08:22 PM
|
#14 (permalink)
|
|
The Visitor
Join Date: Jan 2009
Posts: 2
Thanks: 0
|
This is great. I'm slowly working with it to get what I needed but I'm having a problem.
I love the roster and able to pull information from that to create a guild roster. The issue I'm having is I also want to parse in the Profession information. However that is on the separate character pages themselves. How can I grab both roster and all the character pages from that one guild roster so I can then display them how I want.
You can see what I've sort of been experimenting with here:
http://wow.guildregister.com/sortableTable/roster.php
Or even better due to Armory not updating as much. How could I get a .lua file converted over to XML or some format so I can work with it, similar to what you've done with the Armory page. That would work best since that includes officer notes, guild notes, professions, names, etc.
Example of .lua file is here:
http://wow.guildregister.com/sortabl...erProfiler.lua
Last edited by Dark Severance : Yesterday at 09:06 PM.
|
|
|
|
Yesterday, 09:12 PM
|
#15 (permalink)
|
|
The Gregarious
Join Date: Oct 2007
Location: Manchester, UK
Posts: 532
Thanks: 26
|
__________________
|
|
|
|
|
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
|
|
|
| Thread Tools |
Search this Thread |
|
|
|
| Display Modes |
Linear Mode
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
|