Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
GMS rank lookup script
#1
Hello!

Just posting this up in case it would be useful to someone other than me. Goggleemoticon

Usually, I don't want to take the time to load Nexon's web page just to check basic info about someone. So, I came up with this. It's a PowerShell script that parses the GMS rank listing for any characters you feed it. Unlisted or invalid names will show all dashes. If you want to grab the character's avatar, the -avatar option will download each one. Avatars will be stored as GIF files with each character's name.

I've tested on Windows 7, but it should work on any system with PowerShell 2.0 or higher.

Usage:
Code:
Get-Rank.ps1 [-avatar] name1 name2 ...

Script:
Code:
# Get-Rank.ps1
#
# Given a list of names, pass them through Nexon's rank listing to show
# job and level, or state that they aren't listed.

param(
    [switch]$avatar = $false # Dump avatar to file if true
)

$nxweb = new-object net.webclient

foreach ( $name in $args ) {
    $rankpage = $nxweb.DownloadString("http://maplestory.nexon.net/Rankings/OverallRanking.aspx?type=overall&s=l&pageIndex=1&key=" + $name + "&search=true&searchtype=name")
    # Find script block where the character is in the ranking table
    $regex = "(?si)<script type=`"text/javascript`">\s+if \(\'$name\' == \'$name\'(.*?)</tr>"
    $found = $rankpage -imatch $regex

    if ( $found ) {
        $chardata = $matches[0]
        
        # Now we have a chunk of HTML that we can parse for character stats.
        # We will build a hash table and make it into an object, so this script's
        #  output can be piped to Format-Table or Convertto-HTML or whatever.
        
        $a = $chardata -imatch "(?si)<td class=`"level-move`">\s+<div style=`"display:block`">\s+(\d{1,3})"
        $level = $matches[1]
        
        $a = $chardata -imatch "title=`"([\w\s]+)`""
        $job = $matches[1]
        
        $a = $chardata -imatch "</script>\s+<td class=`"ac`">(\d{1,})"
        $overallrank = $matches[1]
        
        if ( $avatar ) {
            $a = $chardata -imatch "(http://msavatar1.nexon.net/Character/\w+\.gif)"
            $avatarurl = $matches[1]
            if ( $avatarurl ) {
                $nxweb.DownloadFile( $avatarurl, "$pwd\$name.gif" )
            }
        }
        
        $a = $chardata -imatch "(?si)<a class=`"world\s([\w\s]+)`""
        $world = (Get-Culture).textinfo.totitlecase( $matches[1] )

        $CharProperties = @{
            Name = $name
            Level = $level
            Job = $job
            World = $world
            Overall = $overallrank
        }
    }
    else {
        $CharProperties = @{
            Name = $name
            Level = "-"
            Job = "-"
            World = "-"
            Overall = "-"
        }
    }
    
    new-object PSobject -property $CharProperties
}

Example:
Code:
PS C:\Users\JoeJimBob\Scripts> .\Get-Rank.ps1 Chevette OneTooMini doesntexist | format-table

Name                    Level                   Overall                 World                   Job
----                    -----                   -------                 -----                   ---
Chevette                127                     349689                  Khaini                  Magician
OneTooMini              55                      2360499                 Khaini                  Jett
doesntexist             -                       -                       -                       -

 Changelog

Enjoy! Any comments or feedback are welcome! Poast
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)