Update 5/15/2012 – Well, I certainly hope we pulled last night’s attempt before anyone downloaded it and installed, it. If not, I do appologize for your empty addon directory. As has been said many times, backups are our friends. With any luck, the only install that was damaged was my own.
This build does not appear to have that problem. But still, be mindful and proceed with caution until you’re sure it won’t hurt anything.
If you have, like me, used The Undermine Journal for price research, you may have installed the addon that the author also makes available. There are two varieties; the generic one you will find on Curse and other similar sites1 and a custom one that you can download from TUJ itself.
The custom one can have up to four realms’ specific pricing data. The generic one uses an average of all realms. I think you can see the advantage of the former – near real-time data specific to the realm you’re logged in to at the time.
The downside is that it is a little tedious to go and get the realm-specific build and install it every day or whatever schedule you follow.
Before the Crib was wiped out, we had this automated. Thanks to no good backups, this automation tool was lost forever.
Well, we’ve reengineered it, and we’ll share it with you.
What you will need:
- Python 2.7 or later installed. Do not install version 3 of any sort. You can download Python here: http://www.python.org/download/releases/2.7.3/
- A text editor that won’t make a mess of things. While NotePad will work, Notepad++ is better. You can find it here: http://notepad-plus-plus.org/download/v6.1.2.html
- An account on The Undermine Journal. If you don’t have one, go here and do so. https://theunderminejournal.com/user.php It’s really nifty. You can use your Google or Facebook or Twitter account to authenticate. And who doesn’t have one of those?
- The technical acumen to create files, edit them, and move them around.
- The technical acumen to use a command line shell (‘cmd’ in Windows.)
Setting up TUJ
The first thing you should do is set up your account on The Undermine Journal. Once you have done so, you need to set up which realm(s) you wish to obtain realm-specific pricing data for. Go to this page (https://theunderminejournal.com/user.php) and scroll down to see something like this.
Control-click each realm of interest, up to four.
Now, the link to the right will have a custom URL that you can use to get your realm data.
Keep that web page open somewhere so you can go back and get that URL when you need it.
Setting up a workspace
This program is a slob and needs its own home. All of our work is done in d:\grimmlabs\project_name, but you will have your preferences as to where you put this. It should be a path that you can remember. For example, C:\TUJ. Do that by opening a shell and doing the following.
Once you have the workspace, CD to that directory in your shell.
Creating the program
You can either download this file to your PC (It’s a zip file, you’ll have to unpack it.), or, if you’re the suspicious type2, copy the following and paste it into a file called, for example, C:\TUJ\UpdateTUJ.py. (Clicky on the little magnifying glass to show the code. Hover over it to see a toolbar with a few interesting features.)
## UpdateTUJ.py ## (c) 2011-2012 by Jeff Grimmett ## Freely redistributable for all non-commericial uses ## including modification and improvement. ## ## Shine on you crazy diamond. ## # See http://wowblog.grimmlabs.com/article-number for the full # set of instructions involved to use this script. # Note: this can only be used ten times a day. After that, it # goes boom, but it won't do any damage when it does. # Here are some variables you will need to change. import os import os.path import shutil import urllib2 import zipfile # The URL to retrieve; will be unique for your account TUJURL = 'https://theunderminejournal.com/TheUndermineJournal.zip' # The location of your addon directory TargetPath = 'c:/program files/world of warcraft/interface/addons' # These are some variables that you don't need to mess with # # ... and if you do, you better do it right or things will go "crunch". # The name of the zip file, locally LocalFile = 'TheUndermineJournal.ZIP' # The final path of the addon FinalDestination = os.path.join(TargetPath, 'TheUndermineJournal') print "Starting ..." print "Opening %s" %TUJURL # Open the URL and local file u = urllib2.urlopen(TUJURL) f = open(LocalFile, 'wb') meta = u.info() file_size = int(meta.getheaders("Content-Length")) print "Downloading: %s Bytes: %s" % (LocalFile, file_size) file_size_dl = 0 block_sz = 8192 # Proceed to download and update the display as it progresses. while True: buffer = u.read(block_sz) if not buffer: # All done break file_size_dl += len(buffer) f.write(buffer) status = r"%10d [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size) status = status + chr(8)*(len(status)+1) print status, # Close local file f.close() # Make sure we have a place to unpack if not os.path.exists('unpack'): print "Creating unpacking space" os.mkdir('unpack') else: print "Cleaning up last session" shutil.rmtree('unpack', True) os.mkdir('unpack') # Now that the file is downloaded, we unpack it. print "Unpacking ...", z = zipfile.ZipFile(LocalFile) z.extractall('unpack') z.close() print "Done!" # Now that the directory is unpacked, we delete the old TUJ addon if os.path.exists(FinalDestination): print "Deleting old addon" print FinalDestination shutil.rmtree(FinalDestination, True) # Now that the old TUJ is gone, this one is put in its place. print "Installing updated version ...", shutil.copytree('unpack/TheUndermineJournal', FinalDestination) # All done! print "All done!"
Everything between the quotes is the custom URL for your custom addon. You will need to delete what is there3 between the quotes.
Go back to the Undermine Journal user page where your user account info is, and copy the URL for the link:
Paste that link in between the quotes, and save the document.
(2) Set up your addon folder’s location
By default, addons are assumed to live in c:\program files\world of warcraft\interface\addons. If your system follows that convention, then there is nothing else to do. If, on the other hand, you have WoW’s addons living elsewhere, you will need to edit the following line.
# The location of your addon directory TargetPath = 'c:/program files/world of warcraft/interface/addons'
Note that this is the top level of the addons directory, not for TUJ itself. The script will take care of that for you.
(3) Set up your environment
On Windows7, installation of the Python interpreter automatically registers the .py and .pyw extensions to the interpreter, so just running one from a shell will make it go. On older systems, such as XP, you will need to add those extensions to the EXTPATH environmental variable.
You can also just include Python’s interpreter in your command path via the PATH variable and run it directly:
image showing python UpdateTUJ.py
… or use the full path.
If you have the extension registered, then you can just drag an icon to the desktop once you know things are running smoothly. Up to you.
(4) … and that’s it!
If we’ve done our homework properly, you’re ready to give this thing a try.
Open a shell and give it a whirl!
If you can’t figure out what’s going wrong from the error code, just drop me a line via the email link above or a comment below and we’ll sort it out.
Some Final Thoughts
- This is in no way a bulletproof solution. The error handling is virtually nonexistent. I’m pretty sure it can’t do any real damage to your WoW install or OS, but if you have doubts, best to just move along.
- TUJ only allows access to this custom addon ten times a day per account. You may hit that wall during installation and testing. My suggestion is to get a copy by hand first, so you can use it while you tweak the script. Or just be patient, the next day will be here tomorrow.
- I intend to keep updating as I go along. First priority is error handling. Next is a nice installer to make life easier. Next is a windows-only version that will run natively, no need for nasty interpreters.
- This code should work on any platform that supports Python, including MacOS or whatever they call it today.
- I’m sure I’ve overlooked a zillion things. Software projects generally involve a bit of beta testing which exposes these things. This app has received none.