From The Mana World
Line 1: Line 1:
'''Finished:'''
'''Finished:'''
* [[Talk:Monster reference]] script updated 2007-08-26
* [[Talk:Monster reference]] script updated 2007-08-26
* [[Talk:Item_reference]] script update 2007-09-02


'''Working on:'''
'''Working on:'''
* [[Talk:Item_reference]] script, working copy follows...
* Nothing, at the moment
 
<pre>
#!/usr/local/bin/python
#Licensed under GNU General Public License
# run as:
# python tmw-wiki-itemdb.py \
#        /usr/home/dex/src/themanaworld/server-data/trunk/db/item_db.txt \
#        /usr/home/dex/src/themanaworld/tmw/trunk/data/items.xml > out.txt
# TODO:
# - Fix table columns and contents
# - Item bonuses... this is going to suck...
# - Tidy up imageshack stuff
 
import sys, os, popen2;
import xml.parsers.expat
 
debug=0
checkimagesonwiki=0
#wikiuser="Hype0"
#wikipassword="password"
image_path="/usr/home/dex/src/themanaworld/tmw/trunk/data/graphics/items"
 
health_titles = ["Image","Name","ID","HP Bonus","SP Bonus","Bonus (other)",
                "Price<BR />BUY/Sell","Weight","Description"]
weapon_titles = [" Image","Name","ID","Damage<BR />(Range)",
                "Price<BR />","BUY/Sell","Weight","Description"]
armor_titles = ["Image", "Name", "ID", "Defense",
              "Price<BR />BUY/Sell", "Weight","Description"]
other_titles = ["Image","Name","ID","Price<BR />BUY/Sell",
                "Weight","Description "]
 
 
imageurls = [
# The index represents the imageID from the items.xml of the client.
    "",  #    0
    "http://img296.imageshack.us/img296/2363/013nw.png",      #    1
    "http://img167.imageshack.us/img167/6766/025ia.png",      #    2
    "http://img179.imageshack.us/img179/9046/031oj.png",      #    3
    "http://img301.imageshack.us/img301/6505/041gt.png",      #    4
    "http://img207.imageshack.us/img207/2556/059or.png",      #    5
    "http://img229.imageshack.us/img229/2586/066zf.png",      #    6
    "http://img236.imageshack.us/img236/2425/077ed.png",      #    7
    "http://img154.imageshack.us/img154/8776/088cu.png",      #    8
    "http://img292.imageshack.us/img292/765/096cx.png",        #    9
    "http://img296.imageshack.us/img296/4291/103ku.png",      #  10
    "http://img265.imageshack.us/img265/4149/119ml.png",      #  11
    "http://img296.imageshack.us/img296/5246/125wt.png",      #  12
    "http://img248.imageshack.us/img248/6633/132dg.png",      #  13
    "http://img254.imageshack.us/img254/6427/149pm.png",      #  14
    "http://img279.imageshack.us/img279/2362/155sr.png",      #  15
    "http://img116.imageshack.us/img116/4408/167sb.png",      #  16
    "http://img139.imageshack.us/img139/6189/173ut.png",      #  17
    "http://img223.imageshack.us/img223/1794/187xp.png",      #  18
    "http://img229.imageshack.us/img229/1659/195yc.png",      #  19
    "http://img239.imageshack.us/img239/622/205at.png",        #  20
    "http://img153.imageshack.us/img153/1839/219lz.png",      #  21
    "http://img296.imageshack.us/img296/2636/228yi.png",      #  22
    "http://img248.imageshack.us/img248/53/239uu.png",        #  23
    "http://img254.imageshack.us/img254/4431/242qj.png",      #  24
    "http://img279.imageshack.us/img279/1489/254er.png",      #  25
    "http://img116.imageshack.us/img116/9810/269ig.png",      #  26
    "http://img139.imageshack.us/img139/5177/270mi.png",      #  27
    "http://img223.imageshack.us/img223/8136/281bl.png",      #  28
    "http://img229.imageshack.us/img229/6661/297cx.png",      #  29
    "http://img239.imageshack.us/img239/5787/304xp.png",      #  30
    "http://img301.imageshack.us/img301/1121/311an.png",      #  31
    "http://img52.imageshack.us/img52/7388/324fk.png",        #  32
    "http://img141.imageshack.us/img141/9527/336nu.png",      #  33
    "http://img100.imageshack.us/img100/7990/349zk.png",      #  34
    "http://img87.imageshack.us/img87/3489/355nw.png",        #  35
    "http://img151.imageshack.us/img151/5561/365gf.png",      #  36
    "http://img91.imageshack.us/img91/955/370ql.png",          #  37
    "http://img157.imageshack.us/img157/3830/387ay.png",      #  38
    "http://img32.imageshack.us/img32/2695/391hf.png",        #  39
    "http://img112.imageshack.us/img112/9297/400la.png",      #  40
    "http://img301.imageshack.us/img301/5387/412uz.png",      #  41
    "http://img52.imageshack.us/img52/3072/423xc.png",        #  42
    "http://img187.imageshack.us/img187/2963/434dc.png",      #  43
    "http://img125.imageshack.us/img125/4331/442fm.png",      #  44
    "http://img260.imageshack.us/img260/6627/456rj.png",      #  45
    "http://img211.imageshack.us/img211/9089/469fy.png",      #  46
    "http://img219.imageshack.us/img219/1188/479yz.png",      #  47
    "http://img232.imageshack.us/img232/3517/489oa.png",      #  48
    "http://img291.imageshack.us/img291/8643/491eg.png",      #  49
    "http://img157.imageshack.us/img157/1425/502hg.png",      #  50
    "http://img293.imageshack.us/img293/4524/514dn.png",      #  51
    "http://img42.imageshack.us/img42/7271/523hc.png",        #  52
    "http://img187.imageshack.us/img187/5241/535fk.png",      #  53
    "http://img125.imageshack.us/img125/8093/543yr.png",      #  54
    "http://img260.imageshack.us/img260/1315/554bt.png",      #  55
    "http://img211.imageshack.us/img211/9687/564wu.png",      #  56
    "http://img219.imageshack.us/img219/6842/571wz.png",      #  57
    "http://img232.imageshack.us/img232/9236/582ue.png",      #  58
    "http://img291.imageshack.us/img291/435/598ni.png",        #  59
    "http://img157.imageshack.us/img157/1323/605pt.png",      #  60
    "http://img293.imageshack.us/img293/1371/618fu.png",      #  61
    "http://img42.imageshack.us/img42/69/625mj.png",          #  62
    "http://img187.imageshack.us/img187/6240/637ju.png",      #  63
    "http://img275.imageshack.us/img275/9440/648zq.png",      #  64
    "http://img169.imageshack.us/img169/8508/655is.png",      #  65
    "http://img195.imageshack.us/img195/9153/660zq.png",      #  66
    "http://img288.imageshack.us/img288/8669/673xe.png",      #  67
    "http://img242.imageshack.us/img242/3228/688wv.png",      #  68
    "http://img214.imageshack.us/img214/8675/693wb.png",      #  69
    "http://img98.imageshack.us/img98/774/703wa.png",          #  70
    "http://img157.imageshack.us/img157/7590/717em.png",      #  71
    "http://img299.imageshack.us/img299/4237/721eu.png",      #  72
    "http://img246.imageshack.us/img246/8151/731cd.png"        #  73
]
 
imagesused = {}
 
class whatever: pass
 
log = []
 
 
# parseitems(file)
## Returns list with items from eathena item_db file.
 
def saveint(string, altval = 0):
    a = 0
    try:
        a = int(string)
    except:
        a = altval
    return a
       
def parsescript(s):
    # Assumes that there's only one call of each method, otherwise it would need to know
    # how to combine those function calls. In practice, the latter call would prevail.
    script = {}
    scriptentry = ""
    parentry = ""
    mode = 0
    for a in s:
        if mode == 0: # looking for method
            if a.isalpha():
                mode = 1
                scriptentry += a
            elif a == '}': mode = 9
        elif mode == 1: # reading method name
            if a in " ;}":
                if a == " ": mode = 2
                elif a == ";": mode = 1
                elif a == "}": mode = 9
                parentry = ""
                script[scriptentry] = []
            else: scriptentry += a
        elif mode == 2: #looking for param
            if a == " ": pass
            elif a == ";":
                mode = 0
                scriptentry = ""
            else:
                mode = 3
                parentry = a
        elif mode == 3: #reading param
            if (a == " ") or (a == ",") or (a == ";"):
                script[scriptentry].append(parentry)
                parentry = ""
                if (a == ';'):
                    mode = 0
                    scriptentry = ""
                else: mode = 2
            else:
                parentry += a
        elif mode == 9: #finished
            pass
 
    # Convert all possible parameters to integers
    for i in script.keys():
        for j in range(len(script[i])):
            try:
                script[i][j] = int(script[i][j])
            except:
                #print script[i][j]
                pass
    return script
   
 
def parseitems(file):
    objects = []
    for line in file:
        s = line[0:line.find('//')].strip().replace('\t','')
        if s:
            #Replace commas inbetween {} with |, so we can use split
            mode = 0
            sout = ""
            for a in s:
                if mode == 0: #Out of {}
                    if a == '{': mode = 1
                    sout += a
                elif mode == 1: #Inside {}
                    if a == ',': sout += '|'
                    else:
                        sout += a
                        if a == '}': mode = 0
 
            values = sout.split(',')
            if line[0] == '#':
                if debug:
                    log.append("FOUND COMMENT LINE: %s" % str(values))
                continue
            if (len(values) != 19):
                log.append("item_db: Warning, item-line with ID %s has %d values instead of 19" % (values[0], len(values)))
                if debug:
                    log.append("  line was %s" % str(values))
                while (len(values) < 19):
                    values.append('')
                while (len(values) > 19):
                    values.pop()
            o = whatever()
            o.id        = int(values[0])
            o.name      = values[1]
            o.jname    = values[2]
            o.type      = saveint(values[3])
            o.price    = saveint(values[4])
            o.sell      = saveint(values[5])
            o.weight    = saveint(values[6])
            o.atk      = saveint(values[7])
            o.defense  = saveint(values[8])
            o.range    = saveint(values[9])
            o.slot      = saveint(values[10],-1)
            o.job      = saveint(values[11],-1)
            o.gender    = saveint(values[12],-1)
            o.loc      = saveint(values[13],-1)
            o.wlv      = saveint(values[14])
            o.elv      = saveint(values[15])
            o.view      = saveint(values[16],-1)
            o.usescript = parsescript(values[17].replace('|',','))
            o.equipscript = parsescript(values[18].replace('|',','))
 
 
            objects.append(o)
 
    return objects
 
 
# parsexmlitems(file)
## Creates a dictionary containing the values of a client items.xml
## Yeah, there are XML parsers in the standard python libraries, but they're too object
## oriented and thus don't fit the style of this program.
def parsexmlitems(file):
    items = {}
    pre = "<item "
    term = "/>"
    attrs = ["id", "image", "art", "name", "description", "type", "weight", "slot"]
    intattrs = ["id", "art", "type", "weight", "slot"]
    s = file.read()
    index = 0
    debug = 0
    while s[index:].find(pre) >= 0:
        index += s[index:].find(pre) + len(pre)
        curitem = {}
        termstart = index + s[index:].find(term) + len(term)
 
        for attr in attrs:
            found = s[index:].find(attr+'="')
            if found >= 0:
                start = index + found + len(attr+'="')
                end= start + s[start:].find('"')
            else:
                start = termstart
 
            if (start < termstart):
                curitem[attr] = s[start:end]
 
        for a in intattrs:
            try:
                if curitem.has_key(a): curitem[a] = int(curitem[a])
            except:
                log.append("Item-ID %s: Cannot convert integer attribute %s to an integer. Value: '%s'" % (curitem["id"], a, curitem[a]))
 
        items[curitem['id']] = curitem
 
 
    return items
       
 
# addclientinformation(items, citems)
## Entends the item data with the data collected from the client items.xml. Adding imageurls,
## client-name and -description
 
def addclientinformation(items,citems):
    global imageurls
    global imagesused
    for i in items:
        if citems.has_key(i.id):
            i.imagename=citems[i.id]["image"]
            url=i.imagename[0].upper() + i.imagename[1:]
            i.imgurl = "[[Image:"+ url + "]]"
            imagesused[ citems[i.id]["image"]] = 1
            i.description = citems[i.id]["description"]
            i.clientname = citems[i.id]["name"]
        else:
            i.imgurl = ''
            i.description = ''
            i.clientname = ''
 
 
 
# gettypedir (items)
## Returns sorted lists of items by itemtype
def gettypedir(items):
    items.sort(lambda x,y: (x.price+x.sell) - (y.price+y.sell))
 
    typedir = whatever()
    typedir.healthy = []
    typedir.inspiring = []
    typedir.weapons = []
    typedir.combos = []
    typedir.armor = []
    typedir.other = []
    for item in items:
        if (item.imgurl.strip() or item.clientname.strip()):
            #if item.id == 537: log.append('"%s", "%s"' % (item.imgurl, item.name)
            if (item.atk > 0):
                if item.defense == 0: typedir.weapons.append(item)
                else: typedir.combos.append(item)
            elif (item.defense > 0): typedir.armor.append(item)
            elif item.usescript.has_key("itemheal"):
                if item.usescript["itemheal"][0] > item.usescript["itemheal"][1]:
                    typedir.healthy.append(item)
                else:
                    typedir.inspiring.append(item)
            else: typedir.other.append(item)
 
    typedir.weapons.sort(lambda x,y: x.atk - y.atk)
    typedir.armor.sort(lambda x,y: x.defense - y.defense)
    typedir.combos.sort(lambda x,y: (x.defense+x.atk) - (y.defense+y.atk))
 
    typedir.healthy.sort(lambda x,y: int(x.usescript["itemheal"][0]) - int(y.usescript["itemheal"][0]))
    typedir.inspiring.sort(lambda x,y: int(x.usescript["itemheal"][1]) - int(y.usescript["itemheal"][1]))
    #typedir.other.sort(lambda x,y: (x.price+x.sell) - (y.price+y.sell))
 
    return typedir
   
 
           
# printlog()
## Prints the global variable log to stdout
def printlog():
    global log
    if len(log) > 0:
        sys.stdout.write('\n---------------------------------------\n')
    for line in log:
        sys.stdout.write(line+'\n')
 
 
# print<>items(items, title)
## Creates the table in wikicode, depending on what kind of item is being printed
 
def getmoneystring(buy, sell):
    return '| align="right" | %d GP<br>%d gp\n' % (buy,sell)
def getidstring(id):
    return '| align="center" | [%d]\n' % id
   
def printhealitems(items,title):
    sys.stdout.write('==%s==\n' % title)
    sys.stdout.write('{| border="1" cellspacing="0" cellpadding="5" width="100%" align="center"\n')
    for title in health_titles:
        sys.stdout.write('! style="background:#efdead;" | %s\n' % title)
       
    #sys.stdout.write('! style="background:#efdead;" | Image\n')
    #sys.stdout.write('! style="background:#efdead;" | Name\n')
    #sys.stdout.write('! style="background:#efdead;" | ID\n')
    #sys.stdout.write('! style="background:#efdead;" | HP Bonus\n')
    #sys.stdout.write('! style="background:#efdead;" | SP Bonus\n')
    #sys.stdout.write('! style="background:#efdead;" | Price<br>BUY/Sell\n')
    #sys.stdout.write('! style="background:#efdead;" | Description\n')
#health_titles = ["Image","Name","ID","HP Bonus","SP Bonus","Bonus (other)",
#                "Price<BR />BUY/Sell","Weight","Description"]
    for i in items:
        sys.stdout.write('|-\n')
        sys.stdout.write('| align="center" | %s\n' % i.imgurl)
        #sys.stdout.write('| %s\n' % i.jname.replace('_',' '))
        sys.stdout.write('| %s\n' % i.clientname)
        sys.stdout.write( getidstring(i.id) )
        sys.stdout.write('| align="center" | %d\n' % i.usescript["itemheal"][0])
        sys.stdout.write('| align="center" | %d\n' % i.usescript["itemheal"][1])
        sys.stdout.write( getmoneystring(i.price,i.sell) )
        sys.stdout.write('| align="center!" | %d\n' % i.weight)
        sys.stdout.write('| %s\n' % i.description)
    sys.stdout.write('|}\n\n')
           
 
def printweaponitems(items, title):
    sys.stdout.write('==%s==\n' % title)
    sys.stdout.write('{| border="1" cellspacing="0" cellpadding="5" width="100%" align="center"\n')
    for title in weapon_titles:
        sys.stdout.write('! style="background:#efdead;" | %s\n' % title)
 
    #sys.stdout.write('! style="background:#efdead;" | Image\n')
    #sys.stdout.write('! style="background:#efdead;" | Name\n')
    #sys.stdout.write('! style="background:#efdead;" | ID\n')
    #sys.stdout.write('! style="background:#efdead;" | Damage<br>(Range)\n')
    #sys.stdout.write('! style="background:#efdead;" | Price<br>BUY/Sell\n')
    # weight
    #sys.stdout.write('! style="background:#efdead;" | Description\n')
    for i in items:
        sys.stdout.write('|-\n')
        sys.stdout.write('| align="center" | %s\n' % i.imgurl)
        #sys.stdout.write('| %s\n' % i.jname.replace('_',' '))
        sys.stdout.write('| %s\n' % i.clientname)
        sys.stdout.write( getidstring(i.id) )
        sys.stdout.write('| align="center" | %d (%d)\n' % (i.atk,i.range))
        sys.stdout.write( getmoneystring(i.price,i.sell) )
        sys.stdout.write('| %s\n' % i.description)
    sys.stdout.write('|}\n\n')
   
def printarmoritems(items, title):
    sys.stdout.write('==%s==\n' % title)
    sys.stdout.write('{| border="1" cellspacing="0" cellpadding="5" width="100%" align="center"\n')
    sys.stdout.write('! style="background:#efdead;" | Image\n')
    sys.stdout.write('! style="background:#efdead;" | Name\n')
    sys.stdout.write('! style="background:#efdead;" | ID\n')
    sys.stdout.write('! style="background:#efdead;" | Defense\n')
    sys.stdout.write('! style="background:#efdead;" | Price<br>BUY/Sell\n')
    sys.stdout.write('! style="background:#efdead;" | Description\n')
    for i in items:
        sys.stdout.write('|-\n')
        sys.stdout.write('| align="center" | %s\n' % i.imgurl)
        #sys.stdout.write('| %s\n' % i.jname.replace('_',' '))
        sys.stdout.write('| %s\n' % i.clientname)
        sys.stdout.write( getidstring(i.id) )
        sys.stdout.write('| align="center" | %d\n' % i.defense)
        sys.stdout.write( getmoneystring(i.price,i.sell) )
        sys.stdout.write('| %s\n' % i.description)
    sys.stdout.write('|}\n\n')
 
def printcomboitems(items, title):
    sys.stdout.write('==%s==\n' % title)
    sys.stdout.write('{| border="1" cellspacing="0" cellpadding="5" width="100%" align="center"\n')
    sys.stdout.write('! style="background:#efdead;" | Image\n')
    sys.stdout.write('! style="background:#efdead;" | Name\n')
    sys.stdout.write('! style="background:#efdead;" | ID\n')
    sys.stdout.write('! style="background:#efdead;" | Damage<br>(Range)\n')
    sys.stdout.write('! style="background:#efdead;" | Defense\n')
    sys.stdout.write('! style="background:#efdead;" | Price<br>BUY/Sell\n')
    sys.stdout.write('! style="background:#efdead;" | Description\n')
    for i in items:
        sys.stdout.write('|-\n')
        sys.stdout.write('| align="center" | %s\n' % i.imgurl)
        #sys.stdout.write('| %s\n' % i.jname.replace('_',' '))
        sys.stdout.write('| %s\n' % i.clientname)
        sys.stdout.write( getidstring(i.id) )
        sys.stdout.write('| align="center" | %d (%d)\n' % (i.atk,i.range))
        sys.stdout.write('| align="center" | %d\n' % i.defense)
        sys.stdout.write( getmoneystring(i.price,i.sell) )
        sys.stdout.write('| %s\n' % i.description)
    sys.stdout.write('|}\n\n')
 
def getpropertystring(item):
    s = ""
    s += "Weight: %d, " % item.weight
    s += "Slot: %d, " % item.slot
    s += "Job: %d, " % item.job
    s += "Gender: %d, " % item.gender
    s += "Loc: %d, " % item.loc
    s += "wLV: %d, " % item.wlv
    s += "eLV: %d, " % item.wlv
    s += "View: %d " % item.view
    return s
 
 
def printotheritems(items, title):
    sys.stdout.write('==%s==\n' % title)
    sys.stdout.write('{| border="1" cellspacing="0" cellpadding="5" width="100%" align="center"\n')
    sys.stdout.write('! style="background:#efdead;" | Image\n')
    sys.stdout.write('! style="background:#efdead;" | Name\n')
    sys.stdout.write('! style="background:#efdead;" | ID\n')
    #sys.stdout.write('! style="background:#efdead;" | Type\n')
    #sys.stdout.write('! style="background:#efdead;" | Properties\n')
    sys.stdout.write('! style="background:#efdead;" | Price<br>BUY/Sell\n')
    sys.stdout.write('! style="background:#efdead;" | Description\n')
    for i in items:
        sys.stdout.write('|-\n')
        sys.stdout.write('| align="center" | %s\n' % i.imgurl)
        #sys.stdout.write('| %s\n' % i.jname.replace('_',' '))
        sys.stdout.write('| %s\n' % i.clientname)
        sys.stdout.write( getidstring(i.id) )
        #sys.stdout.write('| align="center" | %d\n' % i.type)
        #sys.stdout.write('| align="center" | %s\n' % getpropertystring(i))
        sys.stdout.write( getmoneystring(i.price,i.sell) )
        sys.stdout.write('| %s\n' % i.description)
    sys.stdout.write('|}\n\n')
 
 
 
def printunuseditems(title):
    global imageurls
    global imagesused
    ids = []
    for i in range(1,len(imageurls)):
        if not imagesused.has_key(i):
            ids.append(i)
    if len(ids):
        sys.stdout.write('==%s==\n' % title)
        sys.stdout.write('{| border="1" cellspacing="0" cellpadding="5" width="100%" align="center"\n')
        sys.stdout.write('| ')
        for i in ids:
            sys.stdout.write(imageurls[i] + ' ')
        sys.stdout.write('\n|}\n\n')
 
   
 
#####################################################################
#  MAIN
#####################################################################
 
try:
    if (len(sys.argv) == 1):
        item_db = "item_db.txt"
        item_xml = "items.xml"
    elif (len(sys.argv) == 3):
        item_db = sys.argv[1]
        item_xml = sys.argv[2]
    else:
        item_db = ''
        item_xml = ''
        sys.stdout.write("Wrong number of arguments\n")
 
    if item_db and (not os.path.isfile(item_db)):
        sys.stdout.write("File does not exist: %s\n" % item_db)
        item_db = ''
    if item_xml and (not os.path.isfile(item_xml)):
        sys.stdout.write("File does not exist: %s\n" % item_db)
        item_db = ''
   
    if not (item_db and item_xml):
        sys.stdout.write("\nUSAGE:\n")
        sys.stdout.write("dbtowiki without any arguments will use item_db.txt and items.xml in the current directory.\n")
        sys.stdout.write("to specify custom files, call: dbtowiki <item_db> <item_xml>\n")
        exit(-1);
    else:
        log.append("Item-list [item_db] = %s" % item_db)
        log.append("Item-list [item_xml] = %s" % item_xml)
        f = open(item_db)
        items = parseitems(f);
        f = open(item_xml)
        citems = parsexmlitems(f);
 
        addclientinformation(items, citems)
 
        typedir = gettypedir(items)
        if len(typedir.healthy) > 0: printhealitems(typedir.healthy, "Health")
        if len(typedir.inspiring) > 0: printhealitems(typedir.inspiring, "Mana")
        if len(typedir.weapons) > 0: printweaponitems(typedir.weapons, "Weapons")
        if len(typedir.armor) > 0: printarmoritems(typedir.armor, "Armor")
        if len(typedir.combos) > 0: printcomboitems(typedir.combos, "Combos")
        if len(typedir.other) > 0: printotheritems(typedir.other, "Other")
 
        if checkimagesonwiki:
            sys.stdout.write("Checking for images on wiki: \n")
            images = []
            for item in typedir.healthy:
                images.append( (item.imagename, item.description))
            for item in typedir.inspiring:
                images.append( (item.imagename, item.description))
            for item in typedir.weapons:
                images.append( (item.imagename, item.description))
            for item in typedir.armor:
                images.append( (item.imagename, item.description))
            for item in typedir.combos:
                images.append( (item.imagename, item.description))
            for item in typedir.other:
                images.append( (item.imagename, item.description))
 
            need_to_upload=[]
 
            for imagename, description in images:
                fixedimagename = imagename[0].upper() + imagename[1:]
                curlstring='curl "http://wiki.themanaworld.org/index.php/' \
                    'Image:%s"' % fixedimagename
                if debug:
                    sys.stdout.write("CHECKING URL: %s\n" % curlstring)
                p=popen2.Popen4(curlstring)
                # this could hang if there is a lot of output!
                returncode = p.wait() # wait for the process to finish
                if debug:
                    sys.stdout.write("Process finished with %d\n" % returncode)
                page = p.fromchild.read()
               
                if debug >= 3:
                    sys.stdout.write("Read: %s\n" % page)
 
                if page.find("No file by this name exists") != -1:
                    need_to_upload.append((imagename, description))
                    if debug:
                        sys.stdout.write("NEED TO UPLOAD: %s\n" %
                                        str(need_to_upload[-1]))
           
           
 
            if len(need_to_upload):
                curlstring = 'curl -d "wpName=%s&wpPassword=%s&wpLoginattempt=Log+in" -c cookie-jar "http://wiki.themanaworld.org/index.php?title=Special:Userlogin&action=submitlogin&type=login"'% (wikiuser, wikipassword)
 
                sys.stdout.write("Logging in as %s, your password can be seen "
                                "in `ps ax`, also this is using http://... "
                                "so be warned!\n" % wikiuser)
                p=popen2.Popen4(curlstring)
                # this could hang if there is a lot of output!
                returncode = p.wait() # wait for the process to finish
                data = p.fromchild.read()
                if debug >= 1:
                    sys.stdout.write("Read: %s\n" % data)
 
                if data.find("Login error") != -1:
                    sys.stdout.write("Login failed\n")
 
                if debug:
                    sys.stdout.write("Process finished with %d\n" % returncode)
 
                sys.stdout.write("Now it is time to upload: %s" %
                                str(need_to_upload))
 
                for imagename, description in need_to_upload:
                    if debug:
                        sys.stdout.write("Uploading image: %s\n" % imagename)
 
                    curlstring='curl -b cookie-jar -F "wpUploadFile=@%s/%s" -F "filename=%s" -F "wpDestFile=%s" -F "wpUploadDescription=%s" -F "wpUpload=Upload file" "http://wiki.themanaworld.org/index.php?title=Special:Upload"' % (image_path, imagename, imagename, imagename, description)
                    p=popen2.Popen4(curlstring)
                    # this could hang if there is a lot of output!
                    returncode = p.wait() # wait for the process to finish
                    data = p.fromchild.read()
                    if debug >= 1:
                        sys.stdout.write("Read: %s\n" % data)
 
                    if debug:
                        sys.stdout.write("Process finished with %d\n" %
                                        returncode)
 
                    sys.stdout.write("Uploaded: %s, %s\n" % (imagename,
                                                            description))
                   
 
        printunuseditems("Still unknown")
 
        sys.stdout.write("\n\n")
 
finally:
    printlog()
 
</pre>

Revision as of 18:40, 3 September 2007

Finished:

Working on:

  • Nothing, at the moment