TalkPHP
 
 
Account Login
Latest Articles
» The basic usage of PHPTAL, a XML/XHTML template library for PHP
» Vulnerable methods and the areas they are commonly trusted in.
» Simple way to protect a form from bot
» The Basics On: How Session Stealing Works
» How to keep your forms from double posting data
Advertisement
Associates
Associates
techtuts Darkmindz
CSS Tutorials Tutorialsphere.com - Free Online Tutorials
Boston PHP SurfnLearn
Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old 08-24-2008, 10:00 PM   #1 (permalink)
The Contributor
 
mortisimus's Avatar
 
Join Date: Sep 2007
Location: United Kingdom
Posts: 41
Thanks: 4
mortisimus is on a distinguished road
Default 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 ($chCURLOPT_URL$url);
    
curl_setopt ($chCURLOPT_RETURNTRANSFER1);
    
curl_setopt ($chCURLOPT_CONNECTTIMEOUT15);
    
curl_setopt ($chCURLOPT_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(characterhellscreamNULLmortisimusNULL);
$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(characterhellscreamNULLmortisimusNULL);
$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.
Send a message via Skype™ to mortisimus
mortisimus is offline  
Reply With Quote
The Following 4 Users Say Thank You to mortisimus For This Useful Post:
Mithadriel (11-08-2008), sketchMedia (08-31-2008), Tanax (11-09-2008), Wildhoney (08-25-2008)
Old 08-25-2008, 03:12 PM   #2 (permalink)
The Gregarious
Advanced Programmer Top Contributor Good Samaritan 
 
sketchMedia's Avatar
 
Join Date: Oct 2007
Location: Manchester, UK
Posts: 532
Thanks: 26
sketchMedia is on a distinguished road
Default

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 ($chCURLOPT_USERAGENT,  armory::BROWSER); 
may aswell be:
PHP Code:
curl_setopt ($chCURLOPT_USERAGENT,  self::BROWSER); 
Just in case you wish to change the name of your class.
__________________
sketchMedia is offline  
Reply With Quote
The Following User Says Thank You to sketchMedia For This Useful Post:
Mithadriel (11-08-2008)
Old 08-26-2008, 01:03 PM   #3 (permalink)
The Contributor
 
mortisimus's Avatar
 
Join Date: Sep 2007
Location: United Kingdom
Posts: 41
Thanks: 4
mortisimus is on a distinguished road
Default

Thanks, updated it.
__________________
LONG time talkphp member. Short time poster :-)
Send a message via Skype™ to mortisimus
mortisimus is offline  
Reply With Quote
Old 10-05-2008, 05:24 PM   #4 (permalink)
The Gregarious
Upcoming Programmer Inquisitive 
 
Join Date: Sep 2007
Posts: 748
Thanks: 85
Tanax is on a distinguished road
Default

Looks cool :D
__________________
Tanax is offline  
Reply With Quote
Old 10-10-2008, 11:57 AM   #5 (permalink)
The Frequenter
 
ReSpawN's Avatar
 
Join Date: Nov 2007
Location: Netherlands
Posts: 445
Thanks: 49
ReSpawN is on a distinguished road
Default

Pretty good, but I don't play WoW. ;) Non the less, good share.
__________________
"Life is a bitch, take that bitch on a ride"
Send a message via MSN to ReSpawN
ReSpawN is offline  
Reply With Quote
Old 11-08-2008, 09:07 PM   #6 (permalink)
The Wanderer
 
Join Date: Nov 2008
Posts: 5
Thanks: 2
Mithadriel is on a distinguished road
Default

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.
Mithadriel is offline  
Reply With Quote
Old 11-08-2008, 09:32 PM   #7 (permalink)
The Wanderer
 
Join Date: Nov 2008
Posts: 5
Thanks: 2
Mithadriel is on a distinguished road
Default

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;
        
        } 
Mithadriel is offline  
Reply With Quote
The Following User Says Thank You to Mithadriel For This Useful Post:
mortisimus (11-09-2008)
Old 11-09-2008, 09:43 AM   #8 (permalink)
The Contributor
 
mortisimus's Avatar
 
Join Date: Sep 2007
Location: United Kingdom
Posts: 41
Thanks: 4
mortisimus is on a distinguished road
Default

Cheers
__________________
LONG time talkphp member. Short time poster :-)
Send a message via Skype™ to mortisimus
mortisimus is offline  
Reply With Quote
Old 11-21-2008, 08:44 PM   #9 (permalink)
The Visitor
 
Join Date: Nov 2008
Posts: 2
Thanks: 0
TheMuffinMan is on a distinguished road
Default

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!
TheMuffinMan is offline  
Reply With Quote
Old 11-21-2008, 09:12 PM   #10 (permalink)
The Visitor
 
Join Date: Nov 2008
Posts: 2
Thanks: 0
TheMuffinMan is on a distinguished road
Default

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']?
TheMuffinMan is offline  
Reply With Quote
Old 01-06-2009, 11:06 PM   #11 (permalink)
The Visitor
 
Join Date: Jan 2009
Posts: 1
Thanks: 0
Kalle200000 is on a distinguished road
Default

It doesnt work for me.

Quote:
Fatal error: Call to undefined function curl_init() in C:\wamp\www\wow\index.php on line 32
Kalle200000 is offline  
Reply With Quote
Old 01-06-2009, 11:50 PM   #12 (permalink)
La Vida es Sueño
Advanced Programmer Top Contributor 
 
Wildhoney's Avatar
 
Join Date: Sep 2007
Location: Oldham
Posts: 1,654
Thanks: 73
Wildhoney is on a distinguished road
Default

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.
Send a message via AIM to Wildhoney Send a message via MSN to Wildhoney Send a message via Yahoo to Wildhoney
Wildhoney is offline  
Reply With Quote
Old Yesterday, 07:16 PM   #13 (permalink)
The Gregarious
Advanced Programmer Top Contributor Good Samaritan 
 
sketchMedia's Avatar
 
Join Date: Oct 2007
Location: Manchester, UK
Posts: 532
Thanks: 26
sketchMedia is on a distinguished road
Default

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); 
__________________
sketchMedia is offline  
Reply With Quote
Old Yesterday, 08:22 PM   #14 (permalink)
The Visitor
 
Join Date: Jan 2009
Posts: 2
Thanks: 0
Dark Severance is on a distinguished road
Default

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.
Dark Severance is offline  
Reply With Quote
Old Yesterday, 09:12 PM   #15 (permalink)
The Gregarious
Advanced Programmer Top Contributor Good Samaritan 
 
sketchMedia's Avatar
 
Join Date: Oct 2007
Location: Manchester, UK
Posts: 532
Thanks: 26
sketchMedia is on a distinguished road
Default

have a look at this:
http://fin.instinct.org/lua/
__________________
sketchMedia is offline  
Reply With Quote
Reply



Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


All times are GMT. The time now is 12:57 PM.