Login

Ich habe mein Passwort vergessen!

Forumsregeln

Navigation


    Droplog erstellen

    Teilen
    avatar
    Marv
    Ehrenmitglied

    Anmeldedatum : 22.05.09
    Anzahl der Beiträge : 1852

    Droplog erstellen

    Beitrag von Marv am 09.03.11 23:04

    Hallo liebe Freunde des Droplogs,

    ich werd hier mal die wichtigen Dateien die man zum erstellen eines Droplogs braucht "veröffentlichen", um das ganze zum Laufen zu bringen, benötigt man entweder sehr viel Geduld, oder ein paar Vorkenntnisse in Python und HTML und trotzdem noch eine gute Portion Geduld. Wenn man die aber hat, sollte es kein Problem sein hiermit selber einen Droplog zu erstellen (hoffe ich). Natürlich müsst ihr auch Python installiert haben (Version 2.x, nicht 3.x, 3.x ist zwar die neuere aber weder mit dem Quellcode des Droplogs noch mit der GoogleAppEngine kompatibel).

    Und damit geht es direkt los: Das Pythonscript des Droplogs selber ist darauf ausgerichtet mit Google's AppEngine zu laufen. Dafür benötigt man einen Google-Account, und muss sich da auch das entsprechende Programm (Google App Engine SDK for Python) herunterladen, mit dem man dann wiederum solche Scripte hochladen kann.

    Wenn das Programm installiert ist, macht eine neue Applikation (STRG+N oder im Menü irgendwo), gebt einen Namen und ein Verzeichnis ein. In dieses Verzeichnis kopiert ihr dann folgende Dateien:

    main.py
    Code:
    # -*- coding: cp1252 -*-
    #Sicherheitscode: si2fha9238h
    import cgi

    from google.appengine.api import users
    from google.appengine.ext import webapp
    from google.appengine.ext.webapp.util import run_wsgi_app
    from google.appengine.ext import db

    import urllib2
    import datetime

    position = 0
    last_positions = [0]
    text=""

    all1 = []
    all1_orig = []
    removed_1 = []
    errors = 0

    maxdays = 10

    adding = ["High-Council","TD-Team","Technischer Admin","Member","Probemember"]

    abenteuerlogbuch = "http://services.runescape.com/m=adventurers-log/l=1/rssfeed?searchName="
    memberliste = "http://www.runehead.com/clans/ml.php?clan=darknezz"
    mh1 = "http://services.runescape.com/m=itemdb_rs/l=1/results.ws?query=%22"
    mh2 = "%22&price=all&members="
    bild1 = "http://www.3gods.org/users/1314/82/00/73/album/"
    bild2 = "10.png"
    gedatabase = "http://services.runescape.com/m=itemdb_rs/l=1/viewitem.ws?obj="

    bannerlink = "http://www.3gods.org/users/1314/82/00/73/album/c84elw10.png"
    bannerlink2 = "http://www.3gods.org/users/1314/82/00/73/album/ocqev811.png"
    showadds = False

    spliteffigies = False

    ###Hier Codes.txt einfuegen!###

    class Renew(webapp.RequestHandler):
        def get(self,write = True):
            global text
            reset()
            try:
                reset()
                f = urllib2.urlopen(memberliste)
                text = f.read()
                f.close()
            except:
                all1 = ['Spell_556', 'Lila_Steve', 'Neaera', 'Bruder_Jakob', 'Zitouna', 'Haha_Hero_P', 'Mac_3Gods', 'Soulalex1', 'Gallardo_16', 'Knedl_Knedl', 'Style_3Gods', 'Rage_3Gods', 'Lordvonjacko', 'Knusperk3ks', 'Ich_Wars_Ned', 'Marv_3Gods', 'Taschentuch9', 'Heinrichviii', 'Spider_3Gods', 'Bruder_0wn', 'Qwertz155', 'Wanabee_Tank', 'Noel_3Gods', 'Lila_Freddy', 'Rbn3c', 'Charly_Hark']
                all1_orig = ['Spell_556', 'Lila_Steve', 'Neaera', 'Bruder_Jakob', 'Zitouna', 'Haha_Hero_P', 'Mac_3Gods', 'Soulalex1', 'Gallardo_16', 'Knedl_Knedl', 'Style_3Gods', 'Rage_3Gods', 'Lordvonjacko', 'Knusperk3ks', 'Ich_Wars_Ned', 'Marv_3Gods', 'Taschentuch9', 'Heinrichviii', 'Spider_3Gods', 'Bruder_0wn', 'Qwertz155', 'Wanabee_Tank', 'Noel_3Gods', 'Lila_Freddy', 'Rbn3c', 'Charly_Hark']
                removed_1 = []
                errors = 0
                if write: self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:11\">"+'Fehler!!!<br>')
                if write: self.response.out.write(str(all1)+'<br>'+str(all1_orig)+'<br>'+str(removed_1)+'<br>'+str(errors)+'<br>')
                if write: self.response.out.write("</span></body></html>")
                return

            endpos = _goto_("<!-- AD BANNER ROW-->")
            reset(reset_text = False)
            goto("Clan Signature: <a href=")
            goto("'ranks'")

            ranks = []
           
            while len(ranks) < len(adding):
                goto("a href")
                if -1 in last_positions:
                    break
                farbe = between_goto("style='","'")
                if -1 in last_positions:
                    break
                r = between_goto("title='Display Rank: ","'")
                if -1 in last_positions:
                    break
                ranks += Rank(r,farbe),
                   
            reset(reset_text = False)
            goto("Total Members:")

            stri = between_goto("/b> ","</li>")
            total_members = int(stri)

            reset(reset_text = False)
            goto(" :: Memberlist")
            goto("<tr class='subheader'>")

            members = 0

            while members < total_members:
                goto("background-color:");
                farbe = between_goto("; ","'")
                goto("href='")
                memb = between_goto("'>","<")
                for r in ranks:
                    if r.farbe == farbe:
                        r.add(memb)
                members+=1

            adding_members = []
           
            for r in ranks:
                for m in r.members:
                    if r.name in adding:
                        adding_members += m.replace("3gods","3Gods"),

            for m in adding_members:
                m.replace("Heinrichviii","HeinrichVIII")

            all1 = adding_members[:]
            all1_orig = adding_members[:]
            removed_1 = []
            errors = 0
            self.response.out.write("<!-- "+text.replace("-->","")+"\n")
            for r in ranks:
                self.response.out.write("\n\n"+str(r.name)+"\n"+str(r.farbe)+"\n"+str(r.members)+"\n")
            self.response.out.write(" -->")
            if write: self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:11\">")
            if write: self.response.out.write('<h2>Erfolgreich!</h2><br>')
            if write: self.response.out.write(str(all1)+'<br>'+str(all1_orig)+'<br>'+str(removed_1)+'<br>'+str(errors)+'<br>')
            if write: self.response.out.write("</span></body></html>")

            q = db.GqlQuery("SELECT * FROM Save")
            erg = q.fetch(10)
            for e in erg:
                e.delete()

            save = Save()
            save.list1 = str(all1)
            save.list2 = str(removed_1)
            save.list3 = str(all1_orig)
            save.e = errors
            save.put()

    def replace_month(string):
        return string.replace("Jan", "01").replace("Feb", "02").replace("Mar", "03").replace("Apr", "04").replace("Jul", "07").replace("Jun","06").replace("May","05").replace("Aug","08").replace("Sep","09").replace("Oct","10").replace("Nov","11").replace("Dec","12")

    def goto(string):
        global last_positions, position, text
        last_positions += position,
        position = text.find(string,position)+len(string)
        return position

    def _goto_(string):
        global last_positions, position, text
        last_positions += position,
        position = text.find(string,position)+len(string)
        p = position
        position = last_positions[-1]
        return p

    def between_goto(string1,string2):
        global last_positions, position, text
        goto(string1)
        goto(string2)
        if (position == -1 or last_positions[-1] == -1):
            return ""
        return text[(last_positions[-1]):(position-len(string2))]

    class Item(db.Model):
        author = db.StringProperty()
        content = db.StringProperty(multiline=True)
        date = db.DateTimeProperty()

    class Skill2(db.Model):
        author = db.StringProperty()
        content = db.StringProperty(multiline=True)
        date = db.DateTimeProperty()
       
    class Skill9():
        author = db.StringProperty()
        content = db.StringProperty(multiline=True)
        date = db.DateTimeProperty()
       
    class Save(db.Model):
        list1 = db.TextProperty()
        list2 = db.TextProperty()
        list3 = db.TextProperty()
        e = db.IntegerProperty() 

    def reset(reset_text = True):
        position = 0
        last_positions = [0]
        if reset_text:
            text = ""
    class Dropsitems(webapp.RequestHandler):
        def get(self):
            self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:13\"><table border=\"0\" cellspacing=\"3\" cellpadding=\"1\">")
            liste = d_items.keys()
            liste.sort()
            for l in liste:
                self.response.out.write("<tr valign=\"middle\"><td align=\"right\">"+l+"</td><td align=\"left\">"+'<img src=\"'+bild1+d_items[l]+'\"'+' alt=\"'+l+'\" title=\"'+l+'\">'+"</td></tr>")
            self.response.out.write("</table></span></body></html>")

    class Drops(webapp.RequestHandler):
        def get(self):
            global spliteffigies

            self.response.out.write("""<head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"></head>""")
            self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:13\">")
            if showadds: self.response.out.write("<a href=\"http://www.3gods.org/\" target=\"_blank\"><img src=\""+bannerlink+"\" alt=\"Clan of the 3 Gods\" title=\"Clan of the 3 Gods\"></a>")

            query = db.GqlQuery('SELECT * FROM Item ORDER BY date DESC')

            items = query.fetch(100)
            maxdays = 14

            ausgaben = []
            tage = []
            dates = []
           
            for item in items:
                if not(item.date in dates) and ((str(item.content) != "eine uralte Skulptur") or not(spliteffigies)):
                    if (datetime.datetime.today() - item.date < datetime.timedelta(days = maxdays)):
                        dates += item.date,
                        d = str(item.date)
                        tag = 'am '+d[8:10]+'.'+d[5:7]
                        if (datetime.datetime.today() - item.date < datetime.timedelta(hours = 48)):
                            tag = 'gestern'
                        if (datetime.datetime.today() - item.date < datetime.timedelta(hours = 24)):
                            tag = 'heute'
                        ausgaben += [],
                        tage += tag,
                    else:
                        break
            nummer = 0
           
            for date in dates:
                spieler = []
                self.response.out.write('<div align="center">'+"<span style=\"font-family:Verdana; font-size:14; text-decoration:underline; font-style:bold\">"+tage[nummer]+"</span></div><div align=\"center\"><table border=\"0\" cellspacing=\"3\" cellpadding=\"1\">")
                for item in items:
                    if item.date == date and ((str(item.content) != "eine uralte Skulptur") or not(spliteffigies)):
                        heis = str(item.content).replace("ein Paar ","").replace("einen ","").replace("eine ","").replace("ein ","")
                        suchtag = heis [:]
                        suchtag.replace("ü","&uuml;").replace("ö","&ouml;").replace("ä","&auml;")
                        try:
                            bild_pfad = d_items[heis]
                            t1 = '<span style=\"font-family:Verdana; font-weight:bold; font-size:18\"> 999 </span>'
                            if str(item.content) != "eine uralte Skulptur": t1 += '<a href="'+gedatabase+d_ids[suchtag]+'" target="_blank">'
                            t1 += '<img src=\"'+bild1+bild_pfad+'\"'+' alt=\"'+heis+'\" title=\"'+heis+'\"  border=\"0\">'
                            if str(item.content) != "eine uralte Skulptur": t1 += '</a>'
                        except:
                            t1 = '<span style=\"font-family:Verdana; font-weight:bold; font-size:12\"> 999 '
                            t1 += heis+'</span>'
                        if item.author in spieler:
                            ausgaben[nummer][spieler.index(item.author)] += t1,
                        else:
                            spieler += item.author,
                            ausgaben[nummer] += [],
                            ausgaben[nummer][spieler.index(item.author)] += t1,
                notagain = []
                for s in spieler:
                    self.response.out.write('<tr valign=\"middle\"><td align=\"right\">'+"<span style=\"font-family:Verdana; font-size:11; font-style:italic\">"+s+':</span></td><td align=\"left\">')
                    for a in ausgaben[nummer][spieler.index(s)]:
                        zahl = ausgaben[nummer][spieler.index(s)].count(a)
                        if zahl == 1:
                            self.response.out.write(a.replace("999",""))
                        elif not (a in notagain):
                            self.response.out.write(a.replace("999",str(zahl)+'x '))
                            notagain += a,
                    self.response.out.write('</td></tr></div>')
                nummer += 1
                self.response.out.write('</div></table>')

            self.response.out.write("""
                <a href="/drops/all" target="_blank">Mehr Drops anzeigen</a></span>
                </body>
              </html>""")

    class Skill2s(webapp.RequestHandler):
        def get(self,limited = True):
                self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:11\">")
                if showadds: self.response.out.write("<a href=\"http://www.3gods.org/\" target=\"_blank\"><img src=\""+bannerlink2+"\" alt=\"Clan of the 3 Gods\" title=\"Clan of the 3 Gods\"></a>")

                query = db.GqlQuery("SELECT * FROM Skill2 ORDER BY date DESC LIMIT 100")

                s = query.fetch(200)
                maxdays = 3

                skills = s[:]
               
                ausgaben = []
                ausgaben2 = []
                tage = []
                dates = []
               
                for item in skills:
                    item.anzeige = True
                    item.langerskill = False
                    if not(item.date in dates):
                        if (datetime.datetime.today() - item.date < datetime.timedelta(days = maxdays)):
                            dates += item.date,
                            d = str(item.date)
                            tag = 'am '+d[8:10]+'.'+d[5:7]
                            if (datetime.datetime.today() - item.date < datetime.timedelta(hours = 48)):
                                tag = 'gestern'
                            if (datetime.datetime.today() - item.date < datetime.timedelta(hours = 24)):
                                tag = 'heute'
                            ausgaben += [],
                            ausgaben2 += [],
                            tage += tag,
                        else:
                            break
                nummer = 0

                for date in dates:
                    self.response.out.write('<div align="center">'+"<span style=\"font-family:Verdana; font-size:14; text-decoration:underline; font-style:bold\">"+tage[nummer]+"</span><br>"+"<table border=\"0\" cellspacing=\"4\" cellpadding=\"1\">"+'</div>')
                    spieler = []
                    lvls = []
                    for item in skills:
                        if item.date == date:
                            if not(str(item.content)[-2:] in lvls):
                                lvls += str(item.content)[-2:],
                            if item.author in spieler:
                                ausgaben[nummer][spieler.index(item.author)] += item.content,
                            else:
                                spieler += item.author,
                                ausgaben[nummer] += [],
                                ausgaben2[nummer] += [],
                                ausgaben[nummer][spieler.index(item.author)] += item.content,
                    for s in spieler:
                        notagain = []
                        for a in ausgaben[nummer][spieler.index(s)]:
                            temp = []
                            if not(a[:7] in notagain):
                                for a2 in ausgaben[nummer][spieler.index(s)]:
                                    if a[:7] == a2[:7]:
                                        temp += int(a2[-2:]),
                                if len(temp) > 1:
                                    temp.sort()
                                    ausgaben2[nummer][spieler.index(s)] += (a[:-2] + str(temp[0]) +'-'+ str(temp[-1])),
                                    notagain += a[:7],
                                else:
                                    ausgaben2[nummer][spieler.index(s)] += a,
                    lvls.sort()
                    lvls.reverse()
                    for l in lvls:
                        for s in spieler:
                            for a in ausgaben2[nummer][spieler.index(s)]:
                                if l == a[-2:]:
                                    t1 = "<tr valign=\"middle\"><td align=\"right\"><span style=\"font-family:Verdana; font-size:12; font-style:italic\">"+str(s)+'</span></td><td align="center">'
                                    t1 += '<img src="'+bild1+str(a).replace("ä","a")[:6].replace(" ","").lower()+bild2+'" alt="'
                                    t1 += str(a)+'\" title=\"'+str(a).split(" ")[0]+'\">'+'</td><td><span style=\"font-family:Verdana; font-weight:bold; font-size:16\">'
                                    t1 += str(a).split(" ")[-1]+'</span></td></tr>'
                                    self.response.out.write(t1)
                    self.response.out.write("</table>")
                    nummer += 1
                   
                self.response.out.write("""
                    <a href="/skills/all" target="_blank">Mehr Skills anzeigen</a></span>
                    </body>
                  </html>""")
           
    class Info(webapp.RequestHandler):
        def get(self):
            q = db.GqlQuery("SELECT * FROM Save")
            erg = q.fetch(1)

            all1 = eval(erg[0].list1)
            removed_1 = eval(erg[0].list2)
            all1_orig = eval(erg[0].list3)
            errors = int(erg[0].e)

            self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:11\">")
            self.response.out.write("<h2>Momentan erfasste Member:</h2><br>")

            all1_orig.sort()
            removed_1.sort()
           
            for m in all1_orig:
                if not(m in removed_1):
                    self.response.out.write(m+'<br>')
            self.response.out.write("<br><br><h2>Entfernte Member:</h2><br>")
            for r in removed_1:
                self.response.out.write(r+'<br>')
            self.response.out.write("</span></body></html>")
           
    class Info2(webapp.RequestHandler):
        def get(self):
            q = db.GqlQuery("SELECT * FROM Save")
            erg = q.fetch(1)

            all1 = eval(erg[0].list1)
            removed_1 = eval(erg[0].list2)
            all1_orig = eval(erg[0].list3)
            errors = int(erg[0].e)

            self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:11\">")
            if showadds: self.response.out.write("<a href=\"http://www.3gods.org/\" target=\"_blank\"><img src=\""+bannerlink+"\" alt=\"Clan of the 3 Gods\" title=\"Clan of the 3 Gods\"></a>")
            self.response.out.write("<h2>Momentan erfasste Member:</h2><br>")
            for m in all1_orig:
                if not(m in removed_1):
                    self.response.out.write(m+'<br>')
            self.response.out.write("<br><br><h2>Entfernte Member:</h2><br>")
            for r in removed_1:
                self.response.out.write(r+'<br>')
            self.response.out.write("<br><br>---------------------------------<br><br>Fehlerzyklus: "+str(errors))
            self.response.out.write("<h2>In diesem Zyklus noch zu untersuchende Member:</h2><br>")
            for m in all1:
                self.response.out.write(m+'<br>')
            self.response.out.write("</span></body></html>")
           
    class MainPage(webapp.RequestHandler):
        def get(self):
            self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:11\">")
            self.response.out.write("""
                </span>
                </body>
              </html>""")

    class Update(webapp.RequestHandler):
        def get(self):
            global text
           
            q = db.GqlQuery("SELECT * FROM Save")
            erg = q.fetch(1)

            try:
                all1 = eval(erg[0].list1)
                removed_1 = eval(erg[0].list2)
                all1_orig = eval(erg[0].list3)
                errors = int(erg[0].e)
            except:
                r = Renew()
                r.get(write = False)
                return
           
            self.response.out.write('<html><body>')

            remove = []
            take_now = all1[:2]
            self.response.out.write(str(take_now )+"<br>")

            if errors == 6:
                errors = 0
                removed_1 += take_now
                for r in take_now:
                    all1.remove(r)
           
            if len(take_now) == 0:
                all1 = all1_orig[:]
                errors = 0
                for r in removed_1:
                    all1.remove(r)

            tmp_errors = 0
           
            for m in take_now:
                text = ""
                try:
                    reset()
                    f = urllib2.urlopen(abenteuerlogbuch+m)
                    text += f.read()
                    f.close()
                    self.response.out.write("Keine Probleme: "+str(m)+"<br>")
                    remove += m,
                except:
                    self.response.out.write("Error: "+str(m)+"<br>")
                    text = ""
                    tmp_errors += 1
                   
                goto("image")

                if text != "":
                    q = db.GqlQuery("SELECT * FROM Item")
                    results = q.fetch(900)
                    self.response.out.write('<br>In Datenbank: '+str(len(results))+'<br>')
                    for result in results:
                        if result.author == m:
                            self.response.out.write(result.content+" "+m+" deleted<br>")
                            result.delete()
               
                for i in range (0,12):
                    x1 = between_goto("Gegenstand gefunden: ",".</title>")
                    x2 = between_goto("<pubDate>","</pubDate>")
                    if x1 == "" or x2 == "":
                        break
                    k = x2.replace(" ","-")
                    k = k[5:16]+' '+k[17:-4]
                    x2 = replace_month(k)
                    item = Item()
                    if len(x1)+len(m)+len(str()) > 50:
                        break
                    item.content = x1
                    item.author = m
                    item.date = datetime.datetime(int(x2[6:10]), int(x2[3:5]), int(x2[0:2]),0,0,0,0)
                    item.put()
                    self.response.out.write(str(x1)+" "+str(x2)+" gefunden von "+str(m)+" <br>")

                reset();goto("image")
               
                if text != "":
                    q = db.GqlQuery("SELECT * FROM Skill2")
                    results = q.fetch(900)
                    self.response.out.write('<br>In Datenbank: '+str(len(results))+'<br>')
                    for result in results:
                        if result.author == m:
                            self.response.out.write(result.content+" "+m+" deleted<br>")
                            result.delete()
                           
                notagain = []
               
                for i in range (0,12):
                    goto("aufgestiegen.</title>")
                    x1 = between_goto("Ich habe "," trainiert.")
                    x2 = between_goto("<pubDate>","</pubDate>")
                    if x1 == "" or x2 == "":
                        break
                    k = x2.replace(" ","-")
                    k = k[5:16]+' '+k[17:-4]
                    x2 = replace_month(k)
                    if (x1+x2) in notagain:
                        break
                    skill = Skill2()
                    if len(x1)+len(m)+len(str()) > 50:
                        break
                    skill.content = x1
                    skill.author = m
                    try:
                        skill.date = datetime.datetime(int(x2[6:10]), int(x2[3:5]), int(x2[0:2]),0,0,0,0)
                    except:
                        break
                    skill.put()
                    notagain += (x1+x2),
                    self.response.out.write("Skill2: "+str(x1)+" "+str(x2)+" gefunden von "+str(m)+" <br>")

            if len(take_now) == tmp_errors:
                errors += 1
            else:
                errors = 0
               
            self.response.out.write("<br>Updated!</body></html>")

            for r in remove:
                all1.remove(r)

            q = db.GqlQuery("SELECT * FROM Save")
            erg = q.fetch(10)
            for e in erg:
                e.delete()

            save = Save()
            save.list1 = str(all1)
            save.list2 = str(removed_1)
            save.list3 = str(all1_orig)
            save.e = errors
            save.put()
           
    class Renew_Datastore(webapp.RequestHandler):
        def get(self):
            q = db.GqlQuery("SELECT * FROM Skill2")
            results = q.fetch(1000)
            self.response.out.write(str(len(results))+" deleted!<br>")
            for result in results:                           
                result.delete()
            q = db.GqlQuery("SELECT * FROM Item")
            results = q.fetch(1000)
            self.response.out.write(str(len(results))+" deleted!")
            for result in results:                             
                result.delete()


    class Rank():
        def __init__(self,name,farbe):
            self.name = name
            self.farbe = farbe
            self.members = []

        def add(self,member):
            self.members += member,
    ###########################################################################################################       
    class Skill2s2(webapp.RequestHandler):
        def get(self):
            global spliteffigies
            limited = False

            self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:11\">")
            if showadds: self.response.out.write("<a href=\"http://www.3gods.org/\" target=\"_blank\"><img src=\""+bannerlink+"\" alt=\"Clan of the 3 Gods\" title=\"Clan of the 3 Gods\"></a>")

            query = db.GqlQuery("SELECT * FROM Skill2 ORDER BY date DESC LIMIT 100")

            s = query.fetch(400)
            maxdays = 120

            skills = s[:]
           
            ausgaben = []
            ausgaben2 = []
            tage = []
            dates = []
           
            for item in skills:
                item.anzeige = True
                item.langerskill = False
                if not(item.date in dates):
                    if (datetime.datetime.today() - item.date < datetime.timedelta(days = maxdays)):
                        dates += item.date,
                        d = str(item.date)
                        tag = 'am '+d[8:10]+'.'+d[5:7]
                        if (datetime.datetime.today() - item.date < datetime.timedelta(hours = 48)):
                            tag = 'gestern'
                        if (datetime.datetime.today() - item.date < datetime.timedelta(hours = 24)):
                            tag = 'heute'
                        ausgaben += [],
                        ausgaben2 += [],
                        tage += tag,
                    else:
                        break
            nummer = 0

            for date in dates:
                self.response.out.write('<div align="center">'+"<span style=\"font-family:Verdana; font-size:14; text-decoration:underline; font-style:bold\">"+tage[nummer]+"</span><br>"+"<table border=\"0\" cellspacing=\"4\" cellpadding=\"1\">"+'</div>')
                spieler = []
                lvls = []
                for item in skills:
                    if item.date == date:
                        if not(str(item.content)[-2:] in lvls):
                            lvls += str(item.content)[-2:],
                        if item.author in spieler:
                            ausgaben[nummer][spieler.index(item.author)] += item.content,
                        else:
                            spieler += item.author,
                            ausgaben[nummer] += [],
                            ausgaben2[nummer] += [],
                            ausgaben[nummer][spieler.index(item.author)] += item.content,
                for s in spieler:
                    notagain = []
                    for a in ausgaben[nummer][spieler.index(s)]:
                        temp = []
                        if not(a[:7] in notagain):
                            for a2 in ausgaben[nummer][spieler.index(s)]:
                                if a[:7] == a2[:7]:
                                    temp += int(a2[-2:]),
                            if len(temp) > 1:
                                temp.sort()
                                ausgaben2[nummer][spieler.index(s)] += (a[:-2] + str(temp[0]) +'-'+ str(temp[-1])),
                                notagain += a[:7],
                            else:
                                ausgaben2[nummer][spieler.index(s)] += a,
                lvls.sort()
                lvls.reverse()
                for l in lvls:
                    for s in spieler:
                        for a in ausgaben2[nummer][spieler.index(s)]:
                            if l == a[-2:]:
                                t1 = "<tr valign=\"middle\"><td align=\"right\"><span style=\"font-family:Verdana; font-size:12; font-style:italic\">"+str(s)+'</span></td><td align="center">'
                                t1 += '<img src="'+bild1+str(a).replace("ä","a")[:6].replace(" ","").lower()+bild2+'" alt="'
                                t1 += str(a)+'\" title=\"'+str(a).split(" ")[0]+'\">'+'</td><td><span style=\"font-family:Verdana; font-weight:bold; font-size:16\">'
                                t1 += str(a).split(" ")[-1]+'</span></td></tr>'
                                self.response.out.write(t1)
                self.response.out.write("</table>")
                nummer += 1
               
            self.response.out.write("""
                </span>
                </body>
              </html>""")
    ###########################################################################################################
    class Drops2(webapp.RequestHandler):
        def get(self):
            global spliteffigies
           
            self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:13\">")
            if showadds: self.response.out.write("<a href=\"http://www.3gods.org/\" target=\"_blank\"><img src=\""+bannerlink+"\" alt=\"Clan of the 3 Gods\" title=\"Clan of the 3 Gods\"></a>")

            query = db.GqlQuery('SELECT * FROM Item ORDER BY date DESC')

            items = query.fetch(100)
            maxdays = 120

            ausgaben = []
            tage = []
            dates = []
           
            for item in items:
                if not(item.date in dates) and ((str(item.content) != "eine uralte Skulptur") or not(spliteffigies)):
                    if (datetime.datetime.today() - item.date < datetime.timedelta(days = maxdays)):
                        dates += item.date,
                        d = str(item.date)
                        tag = 'am '+d[8:10]+'.'+d[5:7]
                        if (datetime.datetime.today() - item.date < datetime.timedelta(hours = 48)):
                            tag = 'gestern'
                        if (datetime.datetime.today() - item.date < datetime.timedelta(hours = 24)):
                            tag = 'heute'
                        ausgaben += [],
                        tage += tag,
                    else:
                        break
            nummer = 0

            for date in dates:
                spieler = []
                self.response.out.write('<div align="center">'+"<span style=\"font-family:Verdana; font-size:14; text-decoration:underline; font-style:bold\">"+tage[nummer]+"</span></div><div align=\"center\"><table border=\"0\" cellspacing=\"3\" cellpadding=\"1\">")
                for item in items:
                    if item.date == date and ((str(item.content) != "eine uralte Skulptur") or not(spliteffigies)):
                        heis = str(item.content).replace("ein Paar ","").replace("einen ","").replace("eine ","").replace("ein ","")
                        try:
                            bild_pfad = d_items[heis]
                            t1 = '<span style=\"font-family:Verdana; font-weight:bold; font-size:18\"> 999 </span>'+'<img src=\"'+bild1+bild_pfad+'\"'+' alt=\"'+heis+'\" title=\"'+heis+'\">'
                        except:
                            t1 = '<span style=\"font-family:Verdana; font-weight:bold; font-size:12\"> 999 '
                            t1 += heis+'</span>'
                        if item.author in spieler:
                            ausgaben[nummer][spieler.index(item.author)] += t1,
                        else:
                            spieler += item.author,
                            ausgaben[nummer] += [],
                            ausgaben[nummer][spieler.index(item.author)] += t1,
                notagain = []
                for s in spieler:
                    self.response.out.write('<tr valign=\"middle\"><td align=\"right\">'+"<span style=\"font-family:Verdana; font-size:11; font-style:italic\">"+s+':</span></td><td align=\"left\">')
                    for a in ausgaben[nummer][spieler.index(s)]:
                        zahl = ausgaben[nummer][spieler.index(s)].count(a)
                        if zahl == 1:
                            self.response.out.write(a.replace("999",""))
                        elif not (a in notagain):
                            self.response.out.write(a.replace("999",str(zahl)+'x '))
                            notagain += a,
                    self.response.out.write('</td></tr></div>')
                nummer += 1
                self.response.out.write('</div></table>')

            self.response.out.write("""
                </span>
                </body>
              </html>""")
    ######################################################################################################

    application = webapp.WSGIApplication(
                                        [('/', MainPage),
                                          ('/drops', Drops),
                                          ('/drops/items', Dropsitems),
                                          ('/skills', Skill2s),
                                          ('/drops/all', Drops2),
                                          ('/skills/all', Skill2s2),
                                          ('/update/si2fha9238h', Update),
                                          ('/info', Info),
                                          ('/info/si2fha9238h', Info2),
                                          ('/renew/si2fha9238h', Renew),
                                          ('/renew_datastore/si2fha9238h', Renew_Datastore)],
                                        debug=True)

    def main():
        run_wsgi_app(application)

    if __name__ == "__main__":
        main()
    Speichert diese Datei erstmal als main.py ab (bzw. ersetzt die leere Datei die scon vorhanden ist), danach müsst ihr aber noch den Sicherheitscode (der in der zweiten Zeile steht), den Link zur Runehead-Liste (hinter memberliste = ) und evtl. die HTML-Farbcodes ersetzen. Beim Sicherheitscode nutzt ihr am besten eine "Alle ersetzen" Funktion eines Texteditors und ersetzt die durch eine andere lange Zahlen- und Buchstabenfolge.

    Außerdem ersetzen muss etwas in dieser Zeile:
    adding = ["High-Council","TD-Team","Technischer Admin","Member","Probemember"]
    Hier müssen die Ränge eurer Memberliste eingetragen werden, die im Droplog erscheinen sollen, wie sie auf der RuneHead-Seite lauten. Also Wenn ihr z.B. keinen Rang habt der TD-Team oder High-Council heißt, aber z.B. einen Leader Rang und nicht wollt, dass eure Probemember in dem Droplog auftauchen dann wäre das eure neue Zeile:
    adding = ["Leader","Technischer Admin","Member"]

    Noch etwas zu ersetzen ist in Zeile 392: Hier kommt ein replace("ä","a") vor, dort das "ä" durch "&# 228" (ohne das Leerzeichen) ersetzen, danach sollte die Zeile folgendermaßen aussehn (wiederum ohne das Leerzeichen zwischen # und 2:
    Code:
                                    t1 += '<img src="'+bild1+str(a).replace("&# 228;","a")[:6].replace(" ","").lower()+bild2+'" alt="'

    Und noch eine letzte Erestzung ist notwendig, öffnet diese Seite, macht Rechtsklick und geh auf Seitenquelltext anzeigen. Dann alles markieren, kopieren und den Teil der da drin steht an die Stelle ###Hier Codes.txt einfuegen!### (in main.py) einfügen (ungefähr Zeile 40).

    Außerdem speichert ihr folgendes in cron.yaml mti einem Texteditor ab:
    Code:
    cron:
    - description: autoupdate
      url: /update/###Sicherheitscode###
      schedule: every 1 minutes
    - description: memberlisteupdate
      url: /renew/###Sicherheitscode###
      schedule: every day 02:00
    Dabei müsst ihr ###Sicherheitscode### durch euren Code ersetzen den ihr oben "erfunden" habt.

    Das wars eigentlich schon, jetzt müsst ihr nur euch nur noch bei Google App Engine (hier) mit eurem Google-Account anmelden, eine Applikation erstellen (dort benötigt ihr den Namen den ihr beim Projekt erstellen eingegeben habt, der muss unter Application Identifier: angegeben werden). Dann das ganz hochladen und und die Links mit z.B. einem Frame in euer Forum einbinden.

    Das hört sich alles nicht sehr einfach an, ist es auch nicht, wer es doch hinbekommt darf hier gerne ergänzen, vielleicht ergänze ich auch später nochmal mehr aber für heute reicht es. Ugly Auch Fragen sind hier natürlich erlaubt, wenn ihr etwas nicht hinbekommt.

    Viele Grüße,
    Marv


    Zuletzt von Marv am 14.07.11 11:17 bearbeitet; insgesamt 10-mal bearbeitet


    _________________________________________
    16.08.2010
    01.10.2010
    16.10.2010
    Erfolge und Ziele
    avatar
    mac

    Anmeldedatum : 09.03.11
    Anzahl der Beiträge : 4

    Re: Droplog erstellen

    Beitrag von mac am 10.03.11 5:10

    joa nice endlich ist es raus Banana

    aber wieder nächstes problem wollte den google ap python runterladen hat gut geklappt aber wenn ich es starte "error" -.-"
    avatar
    Steve

    Anmeldedatum : 28.01.10
    Anzahl der Beiträge : 654

    Re: Droplog erstellen

    Beitrag von Steve am 10.03.11 6:52

    Sieht nach SEHR SEHR SEHR SEHR SEHR viel Arbeit aus...
    Danke nochmal, Best Thing EVER <3
    avatar
    0wnage8
    Ehrenmitglied

    Anmeldedatum : 06.08.09
    Anzahl der Beiträge : 2095

    Re: Droplog erstellen

    Beitrag von 0wnage8 am 10.03.11 7:10

    Ugly
    avatar
    Gott Rage

    Anmeldedatum : 06.07.10
    Anzahl der Beiträge : 774

    Re: Droplog erstellen

    Beitrag von Gott Rage am 11.03.11 3:52

    Danke Marv Happy
    avatar
    Jak0b9

    Anmeldedatum : 22.03.11
    Anzahl der Beiträge : 8

    Re: Droplog erstellen

    Beitrag von Jak0b9 am 22.03.11 7:52

    Hi, ich habe alles nach dieser Anleitung befolgt und eine App erstellt... stellt sich mir nurnoch die Frage wie lade ich das hoch?

    So siehts bei mir aus:
    http://img6.imagebanana.com/img/zp6kkld8/inf.png

    Wie lade ich es nun hoch muss ich dazu irgendwo etwas einstellen?


    Wenn ich so auf deploy gehe muss ich ja meine email und google pw angeben wie auch beim google login, habe ich dies getan erscheint: datum datum Running command: "None"
    avatar
    Marv
    Ehrenmitglied

    Anmeldedatum : 22.05.09
    Anzahl der Beiträge : 1852

    Re: Droplog erstellen

    Beitrag von Marv am 23.03.11 4:05

    Hast du hier eine Applikation mit dem Namen clan-infinitum erstellt?


    _________________________________________
    16.08.2010
    01.10.2010
    16.10.2010
    Erfolge und Ziele
    avatar
    Jak0b9

    Anmeldedatum : 22.03.11
    Anzahl der Beiträge : 8

    Re: Droplog erstellen

    Beitrag von Jak0b9 am 23.03.11 5:45

    http://s7.directupload.net/images/110322/ng53zbxc.png Das mit dem Title ist doch egal oder? kann ich den namen davon ändern?

    Wär toll wenn du mich in MSN oder Skype adden könntest.
    avatar
    Marv
    Ehrenmitglied

    Anmeldedatum : 22.05.09
    Anzahl der Beiträge : 1852

    Re: Droplog erstellen

    Beitrag von Marv am 23.03.11 6:33

    Sieht eigentlich gut aus, der Titel ist egal, wichtig ist das was in der linken Spalte steht, das gleiche ist wie im App Engine Launcher steht, und das scheint ja der Fall zu sein. Keine Ahnung, so einen Fehler hatte ich noch nie.

    Also die "Deploy"-Funktion ist schon die richtige zum hochladen, vielleicht schaffst du es mit nach der Fehlermeldung googlen irgendwie?


    _________________________________________
    16.08.2010
    01.10.2010
    16.10.2010
    Erfolge und Ziele
    avatar
    Jak0b9

    Anmeldedatum : 22.03.11
    Anzahl der Beiträge : 8

    Re: Droplog erstellen

    Beitrag von Jak0b9 am 23.03.11 6:49

    Nvm jetzt gings uploaden hatte Python nicht installiert... Grins
    btw ists normal das am Anfang erstmal nichts angezeigt wird also nur "Mehr Skills anzeigen" bei .../skills?

    btw muss man eig wenn man die Ranks in der Ml ändert die Datei auch ändern weil da ja
    adding = ["High-Council","TD-Team","Technischer Admin","Member","Probemember"]
    steht.


    Edit http://www.clan-infinitum.appspot.com/info da kommen auch noch paar errors wies scheint...
    avatar
    Marv
    Ehrenmitglied

    Anmeldedatum : 22.05.09
    Anzahl der Beiträge : 1852

    Re: Droplog erstellen

    Beitrag von Marv am 23.03.11 11:51

    Ja die kommen mit der Zeit ab und zu, hab ich nie gefixt, aber mach du doch mal wenn du Lust hast. Ugly Das liegt daran dass er den Eintrag in der Datenbank manchmal nicht zurückschreibt, in dem steht welche Namen von der Memberliste schon geupdatet wurden und welche noch geupdatet werden müssen.

    Und ja, das füllt sich auch erst nach einem erfolgreichen Update, müsste also eigentlich morgen etwas drin stehen.


    _________________________________________
    16.08.2010
    01.10.2010
    16.10.2010
    Erfolge und Ziele
    avatar
    Jak0b9

    Anmeldedatum : 22.03.11
    Anzahl der Beiträge : 8

    Re: Droplog erstellen

    Beitrag von Jak0b9 am 23.03.11 17:41

    ich werd mal schauen auf jedenfall gehts jetzt schonmal Happy

    Aber was mir aus deinem post nicht klar wird?
    btw muss man eig wenn man die Ranks in der Ml ändert die Datei auch ändern weil da ja
    adding = ["High-Council","TD-Team","Technischer Admin","Member","Probemember"]
    steht.
    avatar
    Marv
    Ehrenmitglied

    Anmeldedatum : 22.05.09
    Anzahl der Beiträge : 1852

    Re: Droplog erstellen

    Beitrag von Marv am 24.03.11 4:13

    Ja, das hast du richtig erkannt, deshalb hab ich was wohl in meiner Antwort vergessen. Zwinker

    Also da müssen die Ränge eingetragen werden die an in der Memberliste hat, das hab ich oben glaub ich auch noch nicht geschrieben.

    Achja, hab noch was geändert, die hast du aber noch nicht, und zwar wenn ihr mehr oder weniger Ränge als 5 habt, musst du dementsprechend die 5 in der Zeile durch eure Anzahl der Ränge ersetzen:
    Code:
            while len(ranks) < 5:
    Einfach mal danach mit der Suchfunktion (STRG+F) suchen, die Zeile sollte es nur einmal geben.


    _________________________________________
    16.08.2010
    01.10.2010
    16.10.2010
    Erfolge und Ziele
    avatar
    Jak0b9

    Anmeldedatum : 22.03.11
    Anzahl der Beiträge : 8

    Re: Droplog erstellen

    Beitrag von Jak0b9 am 24.03.11 5:46

    So klappt nun schon gut, was mir noch aufgefallen ist das atm Höllenpeitsche und manch anderes nur als Text angezeigt werden und nicht als Icon obwohls im Quelltext stimmt (und manuell bildlink geht), naja ist wohl nur temporär...

    Btw gibts ein Zip von den ganzen Icons dass man die auch wo anders hosten kann, falls man mal in Zukunft was adden möchte?

    avatar
    Marv
    Ehrenmitglied

    Anmeldedatum : 22.05.09
    Anzahl der Beiträge : 1852

    Re: Droplog erstellen

    Beitrag von Marv am 24.03.11 6:29

    Die Bilder kannste alle unter /drops/items auf einen Blick sehen, und abspeichern und auch gern nach Belieben zippen. Zwinker

    Und mit der Höllenpeitsche das klappt momentan nicht, wegen irgendeiner Zeichencodierung des Quelltexts schätze ich, wie bei allen anderen Gegenständen mit ä, ö oder ü. Vielleicht musst die alle in der Pythondatei noch mal per Hand ersetzen oder so, keine Ahnung woran das liegt. Gleiches Spiel mit Stärke und Holzfällerei-Stufen


    _________________________________________
    16.08.2010
    01.10.2010
    16.10.2010
    Erfolge und Ziele
    avatar
    Milchprodukt

    Anmeldedatum : 15.03.11
    Anzahl der Beiträge : 23

    Re: Droplog erstellen

    Beitrag von Milchprodukt am 24.03.11 8:44

    Schöne Sache ist, wenn mans sich aufmerksam durchliest, recht einfach zu verstehn. Ich hab sowas ähnliches damals in meinem CSS Clan eingebaut. Aber halt nen "Kill Count". Der Code war noch bissle was länger weil die kills ja nirgends gespeichert werden und der Counter die kills direkt "Live" zählen muss. Das warn Dreck.. für nichts 4 Tage dannach hat sich mein Steam in Luft aufgelöst (hacked <,<) und ich hab den Scheiß, Scheiß sein lassen Grins
    avatar
    Jak0b9

    Anmeldedatum : 22.03.11
    Anzahl der Beiträge : 8

    Re: Droplog erstellen

    Beitrag von Jak0b9 am 24.03.11 17:23

    Hm ja komisch dass es mit äöü nicht umgehen kann...
    Kannst du es dir vllt mal mithilfe von dem anschauen? http://wiki.python.de/Von%20Umlauten,%20Unicode%20und%20Encodings

    Verstehe Python im Moment nicht so ganz.

    Komisch dass es bei den anderen Droplogs richtig angezeigt wird...
    avatar
    Marv
    Ehrenmitglied

    Anmeldedatum : 22.05.09
    Anzahl der Beiträge : 1852

    Re: Droplog erstellen

    Beitrag von Marv am 25.03.11 1:19

    Kann ich schlecht, weil ich ja nicht weiß, wie deine Dateien da aussehen.

    Und ich verrate dir auch nicht, dass unter http://infinitumdroplog.appspot.com/skills schon ein Droplog für Infinitum läuft (schon seit 159 Tagen). Ist das Forum kaputtgegangen oder warum braucht ihr einen neuen?


    _________________________________________
    16.08.2010
    01.10.2010
    16.10.2010
    Erfolge und Ziele
    avatar
    Mac [Chris]
    Ehrenmitglied

    Anmeldedatum : 24.12.09
    Anzahl der Beiträge : 2941

    Re: Droplog erstellen

    Beitrag von Mac [Chris] am 25.03.11 1:36

    http://infinitumdroplog.appspot.com/drops
    Und hier sind sogar die drops Ugly


    _________________________________________


    Hier könnte ihre Werbung stehen!
    avatar
    Jak0b9

    Anmeldedatum : 22.03.11
    Anzahl der Beiträge : 8

    Re: Droplog erstellen

    Beitrag von Jak0b9 am 25.03.11 1:37

    ja ich weiß aber falls wir in zukunft andere ränge einführen wollen, müssen wir es ja auch updaten können oder dich zu belästigen Tongue

    Vllt haste die inf version noch gespeichert und kannst mir schicken oderso?

    Ansonnsten kann ich auch gerne dir meinen aktuellen Code schicken, wenn du magst.
    avatar
    Marv
    Ehrenmitglied

    Anmeldedatum : 22.05.09
    Anzahl der Beiträge : 1852

    Re: Droplog erstellen

    Beitrag von Marv am 25.03.11 6:05

    Was soll ich dir schicken, ich hab das oben aus der Datei kopiert und hier eingefügt. Ugly Meine Datei sieht nicht anders aus als die, die ich hier gepostet habe. Aber viel Glück mit dem Link hier: http://www.speedshare.org/download.php?id=81E19F5611


    _________________________________________
    16.08.2010
    01.10.2010
    16.10.2010
    Erfolge und Ziele
    avatar
    Jak0b9

    Anmeldedatum : 22.03.11
    Anzahl der Beiträge : 8

    Re: Droplog erstellen

    Beitrag von Jak0b9 am 25.03.11 6:15

    Danke mit dem Link funkt nun alles wie es soll Happy

    Lag wohl daran dass du oben im Zitat bei dem d_items = äöü als Umlaut schreibst in dem Download link war es aber als Code


    Wird hier im Forum aber automatisch umgeschrieben, darum oben auch falsch.

    lg
    avatar
    Marv
    Ehrenmitglied

    Anmeldedatum : 22.05.09
    Anzahl der Beiträge : 1852

    Re: Droplog erstellen

    Beitrag von Marv am 25.03.11 22:35

    Ja, stimmt, der blöde Browser übersetzt das ja für uns. Traurig

    Aber gut dass du das mal versucht hast, jetzt konnte ich die "Anleitung" oben ein wenig ausbessern denke ich. Hoch


    _________________________________________
    16.08.2010
    01.10.2010
    16.10.2010
    Erfolge und Ziele
    avatar
    Nightolas

    Anmeldedatum : 27.11.09
    Anzahl der Beiträge : 679

    Re: Droplog erstellen

    Beitrag von Nightolas am 02.06.11 7:32

    ich glaub da is was schief gegangen oder? http://spirithawks.appspot.com

    un ich versteh net wie genau ich nu ne html draus mache... hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiilfeeeeeeeeeeeeeeeeeeee
    avatar
    mac

    Anmeldedatum : 09.03.11
    Anzahl der Beiträge : 4

    Re: Droplog erstellen

    Beitrag von mac am 13.07.11 9:13

    Hey 3gods

    Hey Marv Dein droplog ist nice wollte eins fürs U N forum machen aber nicht so erfahren damit wollte fragen ob das mit dem code hier richtig ist und falls fehler sind mir sagen wo oder vllt es verbessern kannst Happy

    Unsere Ml dazu
    http://www.runehead.com/clans/ml.php?clan=umbra_noctis

    Code:
        # -*- coding: cp1252 -*-
        #Sicherheitscode: (kommt später rein)
        import cgi

        from google.appengine.api import users
        from google.appengine.ext import webapp
        from google.appengine.ext.webapp.util import run_wsgi_app
        from google.appengine.ext import db

        import urllib2
        import datetime

        position = 0
        last_positions = [0]
        text=""

        all1 = []
        all1_orig = []
        removed_1 = []
        errors = 0

        maxdays = 10

        adding = ["Leader","Technischer Admin","Member"]

        abenteuerlogbuch = "http://services.runescape.com/m=adventurers-log/l=1/rssfeed?searchName="
        memberliste = "http://www.runehead.com/clans/ml.php?clan=umbra_noctis"
        mh1 = "http://services.runescape.com/m=itemdb_rs/l=1/results.ws?query=%22"
        mh2 = "%22&price=all&members="
        bild1 = "http://r13.imgfast.net/users/1314/82/00/73/album/"
        bild2 = "10.png"
        gedatabase = "http://services.runescape.com/m=itemdb_rs/l=1/viewitem.ws?obj="

        bannerlink = "http://r13.imgfast.net/users/1314/82/00/73/album/c84elw10.png"
        bannerlink2 = "http://r13.imgfast.net/users/1314/82/00/73/album/ocqev811.png"
        showadds = False

        spliteffigies = False

        d_items = {'Saradomin-Schwert': 'sarado10.gif', 'Stab des Lichts': 'licht-10.gif', 'Höllenpeitsche': 'hallen10.gif', 'Armadyl-Plattenrock': 'armady12.gif', 'Drachen-Kampfklauen': 'drache16.gif', 'Drachen-Stiefel': 'drache15.gif', 'Seelen-Schild': 'seelen10.gif', 'Dunkelbogen': 'dunkel10.gif', 'Klumpen Drachen-Rüstzeug': 'klumpe10.gif', 'Fokusmaske': 'fokusm10.gif', 'Splitter Drachen-Rüstzeug': 'splitt10.gif', 'uralte Skulptur': 'ancien10.png', 'Drachen-Halbhelm': 'drache11.gif', 'Drachen-Antlitz': 'drache10.gif', 'Hokusmaske': 'hokusm10.gif', 'Stück Drachen-Rüstzeug': 'stack_10.gif', 'Bandos-Plattenpanzer': 'bandos10.gif', 'Armadyl-Helm': 'armady10.gif', 'Bandos-Stiefel': 'bandos13.gif', 'Saradomin-Schwertgriff': 'sarado11.gif', 'Armadyl-Schwertgriff': 'armady13.gif', 'Armadyl-Plattenpanzer': 'armady11.gif', 'Zamorak-Speer': 'zamora11.gif', 'Schwarze Maske': 'schwar10.gif', 'Drachen-Plattenrock': 'drache13.gif', 'Drachen-Spitzhacke': 'drache14.gif', 'Blattklingenschwert': 'blattk10.gif', 'Zamorak-Schwertgriff': 'zamora10.gif', 'Granit-Hammer': 'granit10.gif', 'Bandos-Schwertgriff': 'bandos12.gif', 'Drachen-Kettenhemd': 'drache17.gif', 'Granit-Helm': 'granit11.gif', 'linke Schildhälfte': 'linke_10.gif', 'Bandos-Plattenschurz': 'bandos11.gif', 'Klingenstück 3': 'klinge12.gif','Klingenstück 2': 'klinge11.gif', 'Klingenstück 1': 'klinge10.gif','Ring des Sehers': 'ring_d12.gif', 'Ring des Kriegers': 'ring_d11.gif','Ring des Bogenschützen': 'ring_d10.gif', 'Drachen-Axt': 'drache19.gif','Drachen-Dolch': 'drache20.gif', 'Drachen-Speer': 'drache21.gif','Blutrausch-Ring': 'blutra10.gif', 'Arkanes Emblem': 'arkane10.gif','Göttliches Emblem': 'gattli10.gif', 'Elysisches Emblem': 'elysis10.gif','Spektrales Emblem': 'spektr10.gif', 'Drachen-Plattenbeinlinge': 'drache12.gif','Mystik-Robenoberteil': 'mystik10.png', 'Granit-Beinlinge': 'granit12.gif','Amulett des Fernkampfs': 'amulet10.gif', 'Magierfluch': 'seercu10.gif', 'Mystik-Robenunterteil': 'mystik11.png'}
    d_ids = {'Splitter Drachen-Rüstzeug': '14476', 'Saradomin-Schwert': '11730', 'Stab des Lichts': '15486', 'Höllenpeitsche': '4151', 'Drachen-Kampfklauen': '14484', 'Elysisches Emblem': '13750', 'Drachen-Stiefel': '11732', 'Mystik-Robenoberteil': '4091', 'Seelen-Schild': '13734', 'Dunkelbogen': '11235', 'Klumpen Drachen-Rüstzeug': '14472', 'Ring des Sehers': '6731', 'Bandos-Schwertgriff': '11704', 'Bandos-Plattenpanzer': '11724', 'Göttliches Emblem': '13748', 'Mystik-Robenunterteil': '4093', 'Drachen-Axt': '6739', 'Blutrausch-Ring': '6737', 'Drachen-Halbhelm': '1149', 'Stück Drachen-Rüstzeug': '14474', 'Drachen-Antlitz': '11286', 'Spektrales Emblem': '13752', 'Hokusmaske': '15488', 'Bandos-Plattenschurz': '11726', 'Ring des Kriegers': '6735', 'Arkanes Emblem': '13746', 'Bandos-Stiefel': '11728', 'Saradomin-Schwertgriff': '11706', 'Klingenstück 1': '11710', 'Klingenstück 3': '11714', 'Armadyl-Schwertgriff': '11702', 'Armadyl-Plattenpanzer': '11720', 'Zamorak-Speer': '11716', 'Armadyl-Plattenrock': '11722', 'Magierfluch': '6724', 'Amulett des Fernkampfs': '15126', 'Klingenstück 2': '11712', 'Drachen-Plattenrock': '4585', 'Drachen-Dolch': '1215', 'Drachen-Spitzhacke': '15259', 'Blattklingenschwert': '13290', 'Zamorak-Schwertgriff': '11708', 'Drachen-Speer': '1249', 'Granit-Hammer': '4153', 'Fokusmaske': '15490', 'Drachen-Kettenhemd': '3140', 'Granit-Helm': '10589', 'Granit-Beinlinge': '6809', 'linke Schildhälfte': '2366', 'Schwarze Maske': '8921', 'Armadyl-Helm': '11718', 'Ring des Bogenschützen': '6733', 'Drachen-Plattenbeinlinge': '4087'}

        class Renew(webapp.RequestHandler):
            def get(self,write = True):
                global text
                reset()
                try:
                    reset()
                    f = urllib2.urlopen(memberliste)
                    text = f.read()
                    f.close()
                except:
                    all1 = ['Spell_556', 'Lila_Steve', 'Neaera', 'Bruder_Jakob', 'Zitouna', 'Haha_Hero_P', 'Mac_3Gods', 'Soulalex1', 'Gallardo_16', 'Knedl_Knedl', 'Style_3Gods', 'Rage_3Gods', 'Lordvonjacko', 'Knusperk3ks', 'Ich_Wars_Ned', 'Marv_3Gods', 'Taschentuch9', 'Heinrichviii', 'Spider_3Gods', 'Bruder_0wn', 'Qwertz155', 'Wanabee_Tank', 'Noel_3Gods', 'Lila_Freddy', 'Rbn3c', 'Charly_Hark']
                    all1_orig = ['Spell_556', 'Lila_Steve', 'Neaera', 'Bruder_Jakob', 'Zitouna', 'Haha_Hero_P', 'Mac_3Gods', 'Soulalex1', 'Gallardo_16', 'Knedl_Knedl', 'Style_3Gods', 'Rage_3Gods', 'Lordvonjacko', 'Knusperk3ks', 'Ich_Wars_Ned', 'Marv_3Gods', 'Taschentuch9', 'Heinrichviii', 'Spider_3Gods', 'Bruder_0wn', 'Qwertz155', 'Wanabee_Tank', 'Noel_3Gods', 'Lila_Freddy', 'Rbn3c', 'Charly_Hark']
                    removed_1 = []
                    errors = 0
                    if write: self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:11\">"+'Fehler!!!<br>')
                    if write: self.response.out.write(str(all1)+'<br>'+str(all1_orig)+'<br>'+str(removed_1)+'<br>'+str(errors)+'<br>')
                    if write: self.response.out.write("</span></body></html>")
                    return

                endpos = _goto_("<!-- AD BANNER ROW-->")
                reset(reset_text = False)
                goto("Clan Signature: <a href=")
                goto("'ranks'")

                ranks = []
             
                while len(ranks) < len(adding):
                    goto("a href")
                    if -1 in last_positions:
                        break
                    farbe = between_goto("style='","'")
                    if -1 in last_positions:
                        break
                    r = between_goto("title='Display Rank: ","'")
                    if -1 in last_positions:
                        break
                    ranks += Rank(r,farbe),
                     
                reset(reset_text = False)
                goto("Total Members:")

                stri = between_goto("/b> ","</li>")
                total_members = int(stri)

                reset(reset_text = False)
                goto(" :: Memberlist")
                goto("<tr class='subheader'>")

                members = 0

                while members < total_members:
                    goto("background-color:");
                    farbe = between_goto("; ","'")
                    goto("href='")
                    memb = between_goto("'>","<")
                    for r in ranks:
                        if r.farbe == farbe:
                            r.add(memb)
                    members+=1

                adding_members = [Escorba,ItIerceded,Kinox to,Llb Pvmonk,Redbarron,Egypt 1992,Bennynumber2,Herakulus,Neumi2,Dat Marcel,Doxl,Luvvv3,Nietenkaiser,Oo Mac Mall,Vidya Sen,Bertsch,Felix1034,Bauherr,Cwanda,Lestat666,Chelast55,Der Deego,Emper0r95,Divad735,Pvm Jan,Ketty72,Wildyfeuer,Tarisha,Styler0190,Herox1995,Whitee Storm,Hasen Braten,Rimmi,Alptraum,Traderj0es,Ex1t3d,Tiestoofpvm,iKerth,Blutkuss666,Kuhfladen,Viva La Gaga]
             
                for r in ranks:
                    for m in r.members:
                        if r.name in adding:
                            adding_members += m.replace("3gods","3Gods"),

                for m in adding_members:
                    m.replace("Heinrichviii","HeinrichVIII")

                all1 = adding_members[:]
                all1_orig = adding_members[:]
                removed_1 = []
                errors = 0
                self.response.out.write("<!-- "+text.replace("-->","")+"\n")
                for r in ranks:
                    self.response.out.write("\n\n"+str(r.name)+"\n"+str(r.farbe)+"\n"+str(r.members)+"\n")
                self.response.out.write(" -->")
                if write: self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:11\">")
                if write: self.response.out.write('<h2>Erfolgreich!</h2><br>')
                if write: self.response.out.write(str(all1)+'<br>'+str(all1_orig)+'<br>'+str(removed_1)+'<br>'+str(errors)+'<br>')
                if write: self.response.out.write("</span></body></html>")

                q = db.GqlQuery("SELECT * FROM Save")
                erg = q.fetch(10)
                for e in erg:
                    e.delete()

                save = Save()
                save.list1 = str(all1)
                save.list2 = str(removed_1)
                save.list3 = str(all1_orig)
                save.e = errors
                save.put()

        def replace_month(string):
            return string.replace("Jan", "01").replace("Feb", "02").replace("Mar", "03").replace("Apr", "04").replace("Jul", "07").replace("Jun","06").replace("May","05").replace("Aug","08").replace("Sep","09").replace("Oct","10").replace("Nov","11").replace("Dec","12")

        def goto(string):
            global last_positions, position, text
            last_positions += position,
            position = text.find(string,position)+len(string)
            return position

        def _goto_(string):
            global last_positions, position, text
            last_positions += position,
            position = text.find(string,position)+len(string)
            p = position
            position = last_positions[-1]
            return p

        def between_goto(string1,string2):
            global last_positions, position, text
            goto(string1)
            goto(string2)
            if (position == -1 or last_positions[-1] == -1):
                return ""
            return text[(last_positions[-1]):(position-len(string2))]

        class Item(db.Model):
            author = db.StringProperty()
            content = db.StringProperty(multiline=True)
            date = db.DateTimeProperty()

        class Skill2(db.Model):
            author = db.StringProperty()
            content = db.StringProperty(multiline=True)
            date = db.DateTimeProperty()
         
        class Skill9():
            author = db.StringProperty()
            content = db.StringProperty(multiline=True)
            date = db.DateTimeProperty()
         
        class Save(db.Model):
            list1 = db.TextProperty()
            list2 = db.TextProperty()
            list3 = db.TextProperty()
            e = db.IntegerProperty()

        def reset(reset_text = True):
            position = 0
            last_positions = [0]
            if reset_text:
                text = ""
        class Dropsitems(webapp.RequestHandler):
            def get(self):
                self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:13\"><table border=\"0\" cellspacing=\"3\" cellpadding=\"1\">")
                liste = d_items.keys()
                liste.sort()
                for l in liste:
                    self.response.out.write("<tr valign=\"middle\"><td align=\"right\">"+l+"</td><td align=\"left\">"+'<img src=\"'+bild1+d_items[l]+'\"'+' alt=\"'+l+'\" title=\"'+l+'\">'+"</td></tr>")
                self.response.out.write("</table></span></body></html>")

        class Drops(webapp.RequestHandler):
            def get(self):
                global spliteffigies

                self.response.out.write("""<head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"></head>""")
                self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:13\">")
                if showadds: self.response.out.write("<a href=\"http://www.3gods.org/\" target=\"_blank\"><img src=\""+bannerlink+"\" alt=\"Clan of the 3 Gods\" title=\"Clan of the 3 Gods\"></a>")

                query = db.GqlQuery('SELECT * FROM Item ORDER BY date DESC')

                items = query.fetch(100)
                maxdays = 14

                ausgaben = []
                tage = []
                dates = []
             
                for item in items:
                    if not(item.date in dates) and ((str(item.content) != "eine uralte Skulptur") or not(spliteffigies)):
                        if (datetime.datetime.today() - item.date < datetime.timedelta(days = maxdays)):
                            dates += item.date,
                            d = str(item.date)
                            tag = 'am '+d[8:10]+'.'+d[5:7]
                            if (datetime.datetime.today() - item.date < datetime.timedelta(hours = 48)):
                                tag = 'gestern'
                            if (datetime.datetime.today() - item.date < datetime.timedelta(hours = 24)):
                                tag = 'heute'
                            ausgaben += [],
                            tage += tag,
                        else:
                            break
                nummer = 0
             
                for date in dates:
                    spieler = []
                    self.response.out.write('<div align="center">'+"<span style=\"font-family:Verdana; font-size:14; text-decoration:underline; font-style:bold\">"+tage[nummer]+"</span></div><div align=\"center\"><table border=\"0\" cellspacing=\"3\" cellpadding=\"1\">")
                    for item in items:
                        if item.date == date and ((str(item.content) != "eine uralte Skulptur") or not(spliteffigies)):
                            heis = str(item.content).replace("ein Paar ","").replace("einen ","").replace("eine ","").replace("ein ","")
                            suchtag = heis [:]
                            suchtag.replace("ü","&uuml;").replace("ö","&ouml;").replace("ä","&auml;")
                            try:
                                bild_pfad = d_items[heis]
                                t1 = '<span style=\"font-family:Verdana; font-weight:bold; font-size:18\"> 999 </span>'
                                if str(item.content) != "eine uralte Skulptur": t1 += '<a href="'+gedatabase+d_ids[suchtag]+'" target="_blank">'
                                t1 += '<img src=\"'+bild1+bild_pfad+'\"'+' alt=\"'+heis+'\" title=\"'+heis+'\"  border=\"0\">'
                                if str(item.content) != "eine uralte Skulptur": t1 += '</a>'
                            except:
                                t1 = '<span style=\"font-family:Verdana; font-weight:bold; font-size:12\"> 999 '
                                t1 += heis+'</span>'
                            if item.author in spieler:
                                ausgaben[nummer][spieler.index(item.author)] += t1,
                            else:
                                spieler += item.author,
                                ausgaben[nummer] += [],
                                ausgaben[nummer][spieler.index(item.author)] += t1,
                    notagain = []
                    for s in spieler:
                        self.response.out.write('<tr valign=\"middle\"><td align=\"right\">'+"<span style=\"font-family:Verdana; font-size:11; font-style:italic\">"+s+':</span></td><td align=\"left\">')
                        for a in ausgaben[nummer][spieler.index(s)]:
                            zahl = ausgaben[nummer][spieler.index(s)].count(a)
                            if zahl == 1:
                                self.response.out.write(a.replace("999",""))
                            elif not (a in notagain):
                                self.response.out.write(a.replace("999",str(zahl)+'x '))
                                notagain += a,
                        self.response.out.write('</td></tr></div>')
                    nummer += 1
                    self.response.out.write('</div></table>')

                self.response.out.write("""
                    <a href="/drops/all" target="_blank">Mehr Drops anzeigen</a></span>
                    </body>
                  </html>""")

        class Skill2s(webapp.RequestHandler):
            def get(self,limited = True):
                    self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:11\">")
                    if showadds: self.response.out.write("<a href=\"http://www.3gods.org/\" target=\"_blank\"><img src=\""+bannerlink2+"\" alt=\"Clan of the 3 Gods\" title=\"Clan of the 3 Gods\"></a>")

                    query = db.GqlQuery("SELECT * FROM Skill2 ORDER BY date DESC LIMIT 100")

                    s = query.fetch(200)
                    maxdays = 3

                    skills = s[:]
                 
                    ausgaben = []
                    ausgaben2 = []
                    tage = []
                    dates = []
                 
                    for item in skills:
                        item.anzeige = True
                        item.langerskill = False
                        if not(item.date in dates):
                            if (datetime.datetime.today() - item.date < datetime.timedelta(days = maxdays)):
                                dates += item.date,
                                d = str(item.date)
                                tag = 'am '+d[8:10]+'.'+d[5:7]
                                if (datetime.datetime.today() - item.date < datetime.timedelta(hours = 48)):
                                    tag = 'gestern'
                                if (datetime.datetime.today() - item.date < datetime.timedelta(hours = 24)):
                                    tag = 'heute'
                                ausgaben += [],
                                ausgaben2 += [],
                                tage += tag,
                            else:
                                break
                    nummer = 0

                    for date in dates:
                        self.response.out.write('<div align="center">'+"<span style=\"font-family:Verdana; font-size:14; text-decoration:underline; font-style:bold\">"+tage[nummer]+"</span><br>"+"<table border=\"0\" cellspacing=\"4\" cellpadding=\"1\">"+'</div>')
                        spieler = []
                        lvls = []
                        for item in skills:
                            if item.date == date:
                                if not(str(item.content)[-2:] in lvls):
                                    lvls += str(item.content)[-2:],
                                if item.author in spieler:
                                    ausgaben[nummer][spieler.index(item.author)] += item.content,
                                else:
                                    spieler += item.author,
                                    ausgaben[nummer] += [],
                                    ausgaben2[nummer] += [],
                                    ausgaben[nummer][spieler.index(item.author)] += item.content,
                        for s in spieler:
                            notagain = []
                            for a in ausgaben[nummer][spieler.index(s)]:
                                temp = []
                                if not(a[:7] in notagain):
                                    for a2 in ausgaben[nummer][spieler.index(s)]:
                                        if a[:7] == a2[:7]:
                                            temp += int(a2[-2:]),
                                    if len(temp) > 1:
                                        temp.sort()
                                        ausgaben2[nummer][spieler.index(s)] += (a[:-2] + str(temp[0]) +'-'+ str(temp[-1])),
                                        notagain += a[:7],
                                    else:
                                        ausgaben2[nummer][spieler.index(s)] += a,
                        lvls.sort()
                        lvls.reverse()
                        for l in lvls:
                            for s in spieler:
                                for a in ausgaben2[nummer][spieler.index(s)]:
                                    if l == a[-2:]:
                                        t1 = "<tr valign=\"middle\"><td align=\"right\"><span style=\"font-family:Verdana; font-size:12; font-style:italic\">"+str(s)+'</span></td><td align="center">'
                                        t1 += '<img src="'+bild1+str(a).replace("ä","a")[:6].replace(" ","").lower()+bild2+'" alt="'
                                        t1 += str(a)+'\" title=\"'+str(a).split(" ")[0]+'\">'+'</td><td><span style=\"font-family:Verdana; font-weight:bold; font-size:16\">'
                                        t1 += str(a).split(" ")[-1]+'</span></td></tr>'
                                        self.response.out.write(t1)
                        self.response.out.write("</table>")
                        nummer += 1
                     
                    self.response.out.write("""
                        <a href="/skills/all" target="_blank">Mehr Skills anzeigen</a></span>
                        </body>
                      </html>""")
             
        class Info(webapp.RequestHandler):
            def get(self):
                q = db.GqlQuery("SELECT * FROM Save")
                erg = q.fetch(1)

                all1 = eval(erg[0].list1)
                removed_1 = eval(erg[0].list2)
                all1_orig = eval(erg[0].list3)
                errors = int(erg[0].e)

                self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:11\">")
                self.response.out.write("<h2>Momentan erfasste Member:</h2><br>")

                all1_orig.sort()
                removed_1.sort()
             
                for m in all1_orig:
                    if not(m in removed_1):
                        self.response.out.write(m+'<br>')
                self.response.out.write("<br><br><h2>Entfernte Member:</h2><br>")
                for r in removed_1:
                    self.response.out.write(r+'<br>')
                self.response.out.write("</span></body></html>")
             
        class Info2(webapp.RequestHandler):
            def get(self):
                q = db.GqlQuery("SELECT * FROM Save")
                erg = q.fetch(1)

                all1 = eval(erg[0].list1)
                removed_1 = eval(erg[0].list2)
                all1_orig = eval(erg[0].list3)
                errors = int(erg[0].e)

                self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:11\">")
                if showadds: self.response.out.write("<a href=\"http://www.3gods.org/\" target=\"_blank\"><img src=\""+bannerlink+"\" alt=\"Clan of the 3 Gods\" title=\"Clan of the 3 Gods\"></a>")
                self.response.out.write("<h2>Momentan erfasste Member:</h2><br>")
                for m in all1_orig:
                    if not(m in removed_1):
                        self.response.out.write(m+'<br>')
                self.response.out.write("<br><br><h2>Entfernte Member:</h2><br>")
                for r in removed_1:
                    self.response.out.write(r+'<br>')
                self.response.out.write("<br><br>---------------------------------<br><br>Fehlerzyklus: "+str(errors))
                self.response.out.write("<h2>In diesem Zyklus noch zu untersuchende Member:</h2><br>")
                for m in all1:
                    self.response.out.write(m+'<br>')
                self.response.out.write("</span></body></html>")
             
        class MainPage(webapp.RequestHandler):
            def get(self):
                self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:11\">")
                self.response.out.write("""
                    </span>
                    </body>
                  </html>""")

        class Update(webapp.RequestHandler):
            def get(self):
                global text
             
                q = db.GqlQuery("SELECT * FROM Save")
                erg = q.fetch(1)

                try:
                    all1 = eval(erg[0].list1)
                    removed_1 = eval(erg[0].list2)
                    all1_orig = eval(erg[0].list3)
                    errors = int(erg[0].e)
                except:
                    r = Renew()
                    r.get(write = False)
                    return
             
                self.response.out.write('<html><body>')

                remove = []
                take_now = all1[:2]
                self.response.out.write(str(take_now )+"<br>")

                if errors == 6:
                    errors = 0
                    removed_1 += take_now
                    for r in take_now:
                        all1.remove(r)
             
                if len(take_now) == 0:
                    all1 = all1_orig[:]
                    errors = 0
                    for r in removed_1:
                        all1.remove(r)

                tmp_errors = 0
             
                for m in take_now:
                    text = ""
                    try:
                        reset()
                        f = urllib2.urlopen(abenteuerlogbuch+m)
                        text += f.read()
                        f.close()
                        self.response.out.write("Keine Probleme: "+str(m)+"<br>")
                        remove += m,
                    except:
                        self.response.out.write("Error: "+str(m)+"<br>")
                        text = ""
                        tmp_errors += 1
                     
                    goto("image")

                    if text != "":
                        q = db.GqlQuery("SELECT * FROM Item")
                        results = q.fetch(900)
                        self.response.out.write('<br>In Datenbank: '+str(len(results))+'<br>')
                        for result in results:
                            if result.author == m:
                                self.response.out.write(result.content+" "+m+" deleted<br>")
                                result.delete()
                 
                    for i in range (0,12):
                        x1 = between_goto("Gegenstand gefunden: ",".</title>")
                        x2 = between_goto("<pubDate>","</pubDate>")
                        if x1 == "" or x2 == "":
                            break
                        k = x2.replace(" ","-")
                        k = k[5:16]+' '+k[17:-4]
                        x2 = replace_month(k)
                        item = Item()
                        if len(x1)+len(m)+len(str()) > 50:
                            break
                        item.content = x1
                        item.author = m
                        item.date = datetime.datetime(int(x2[6:10]), int(x2[3:5]), int(x2[0:2]),0,0,0,0)
                        item.put()
                        self.response.out.write(str(x1)+" "+str(x2)+" gefunden von "+str(m)+" <br>")

                    reset();goto("image")
                 
                    if text != "":
                        q = db.GqlQuery("SELECT * FROM Skill2")
                        results = q.fetch(900)
                        self.response.out.write('<br>In Datenbank: '+str(len(results))+'<br>')
                        for result in results:
                            if result.author == m:
                                self.response.out.write(result.content+" "+m+" deleted<br>")
                                result.delete()
                             
                    notagain = []
                 
                    for i in range (0,12):
                        goto("aufgestiegen.</title>")
                        x1 = between_goto("Ich habe "," trainiert.")
                        x2 = between_goto("<pubDate>","</pubDate>")
                        if x1 == "" or x2 == "":
                            break
                        k = x2.replace(" ","-")
                        k = k[5:16]+' '+k[17:-4]
                        x2 = replace_month(k)
                        if (x1+x2) in notagain:
                            break
                        skill = Skill2()
                        if len(x1)+len(m)+len(str()) > 50:
                            break
                        skill.content = x1
                        skill.author = m
                        try:
                            skill.date = datetime.datetime(int(x2[6:10]), int(x2[3:5]), int(x2[0:2]),0,0,0,0)
                        except:
                            break
                        skill.put()
                        notagain += (x1+x2),
                        self.response.out.write("Skill2: "+str(x1)+" "+str(x2)+" gefunden von "+str(m)+" <br>")

                if len(take_now) == tmp_errors:
                    errors += 1
                else:
                    errors = 0
                 
                self.response.out.write("<br>Updated!</body></html>")

                for r in remove:
                    all1.remove(r)

                q = db.GqlQuery("SELECT * FROM Save")
                erg = q.fetch(10)
                for e in erg:
                    e.delete()

                save = Save()
                save.list1 = str(all1)
                save.list2 = str(removed_1)
                save.list3 = str(all1_orig)
                save.e = errors
                save.put()
             
        class Renew_Datastore(webapp.RequestHandler):
            def get(self):
                q = db.GqlQuery("SELECT * FROM Skill2")
                results = q.fetch(1000)
                self.response.out.write(str(len(results))+" deleted!<br>")
                for result in results:                         
                    result.delete()
                q = db.GqlQuery("SELECT * FROM Item")
                results = q.fetch(1000)
                self.response.out.write(str(len(results))+" deleted!")
                for result in results:                           
                    result.delete()


        class Rank():
            def __init__(self,name,farbe):
                self.name = name
                self.farbe = farbe
                self.members = []

            def add(self,member):
                self.members += member,
        ###########################################################################################################     
        class Skill2s2(webapp.RequestHandler):
            def get(self):
                global spliteffigies
                limited = False

                self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:11\">")
                if showadds: self.response.out.write("<a href=\"http://www.3gods.org/\" target=\"_blank\"><img src=\""+bannerlink+"\" alt=\"Clan of the 3 Gods\" title=\"Clan of the 3 Gods\"></a>")

                query = db.GqlQuery("SELECT * FROM Skill2 ORDER BY date DESC LIMIT 100")

                s = query.fetch(400)
                maxdays = 120

                skills = s[:]
             
                ausgaben = []
                ausgaben2 = []
                tage = []
                dates = []
             
                for item in skills:
                    item.anzeige = True
                    item.langerskill = False
                    if not(item.date in dates):
                        if (datetime.datetime.today() - item.date < datetime.timedelta(days = maxdays)):
                            dates += item.date,
                            d = str(item.date)
                            tag = 'am '+d[8:10]+'.'+d[5:7]
                            if (datetime.datetime.today() - item.date < datetime.timedelta(hours = 48)):
                                tag = 'gestern'
                            if (datetime.datetime.today() - item.date < datetime.timedelta(hours = 24)):
                                tag = 'heute'
                            ausgaben += [],
                            ausgaben2 += [],
                            tage += tag,
                        else:
                            break
                nummer = 0

                for date in dates:
                    self.response.out.write('<div align="center">'+"<span style=\"font-family:Verdana; font-size:14; text-decoration:underline; font-style:bold\">"+tage[nummer]+"</span><br>"+"<table border=\"0\" cellspacing=\"4\" cellpadding=\"1\">"+'</div>')
                    spieler = []
                    lvls = []
                    for item in skills:
                        if item.date == date:
                            if not(str(item.content)[-2:] in lvls):
                                lvls += str(item.content)[-2:],
                            if item.author in spieler:
                                ausgaben[nummer][spieler.index(item.author)] += item.content,
                            else:
                                spieler += item.author,
                                ausgaben[nummer] += [],
                                ausgaben2[nummer] += [],
                                ausgaben[nummer][spieler.index(item.author)] += item.content,
                    for s in spieler:
                        notagain = []
                        for a in ausgaben[nummer][spieler.index(s)]:
                            temp = []
                            if not(a[:7] in notagain):
                                for a2 in ausgaben[nummer][spieler.index(s)]:
                                    if a[:7] == a2[:7]:
                                        temp += int(a2[-2:]),
                                if len(temp) > 1:
                                    temp.sort()
                                    ausgaben2[nummer][spieler.index(s)] += (a[:-2] + str(temp[0]) +'-'+ str(temp[-1])),
                                    notagain += a[:7],
                                else:
                                    ausgaben2[nummer][spieler.index(s)] += a,
                    lvls.sort()
                    lvls.reverse()
                    for l in lvls:
                        for s in spieler:
                            for a in ausgaben2[nummer][spieler.index(s)]:
                                if l == a[-2:]:
                                    t1 = "<tr valign=\"middle\"><td align=\"right\"><span style=\"font-family:Verdana; font-size:12; font-style:italic\">"+str(s)+'</span></td><td align="center">'
                                    t1 += '<img src="'+bild1+str(a).replace("ä","a")[:6].replace(" ","").lower()+bild2+'" alt="'
                                    t1 += str(a)+'\" title=\"'+str(a).split(" ")[0]+'\">'+'</td><td><span style=\"font-family:Verdana; font-weight:bold; font-size:16\">'
                                    t1 += str(a).split(" ")[-1]+'</span></td></tr>'
                                    self.response.out.write(t1)
                    self.response.out.write("</table>")
                    nummer += 1
                 
                self.response.out.write("""
                    </span>
                    </body>
                  </html>""")
        ###########################################################################################################
        class Drops2(webapp.RequestHandler):
            def get(self):
                global spliteffigies
             
                self.response.out.write("<html><body>"+"<span style=\"font-family:Verdana; font-size:13\">")
                if showadds: self.response.out.write("<a href=\"http://www.3gods.org/\" target=\"_blank\"><img src=\""+bannerlink+"\" alt=\"Clan of the 3 Gods\" title=\"Clan of the 3 Gods\"></a>")

                query = db.GqlQuery('SELECT * FROM Item ORDER BY date DESC')

                items = query.fetch(100)
                maxdays = 120

                ausgaben = []
                tage = []
                dates = []
             
                for item in items:
                    if not(item.date in dates) and ((str(item.content) != "eine uralte Skulptur") or not(spliteffigies)):
                        if (datetime.datetime.today() - item.date < datetime.timedelta(days = maxdays)):
                            dates += item.date,
                            d = str(item.date)
                            tag = 'am '+d[8:10]+'.'+d[5:7]
                            if (datetime.datetime.today() - item.date < datetime.timedelta(hours = 48)):
                                tag = 'gestern'
                            if (datetime.datetime.today() - item.date < datetime.timedelta(hours = 24)):
                                tag = 'heute'
                            ausgaben += [],
                            tage += tag,
                        else:
                            break
                nummer = 0

                for date in dates:
                    spieler = []
                    self.response.out.write('<div align="center">'+"<span style=\"font-family:Verdana; font-size:14; text-decoration:underline; font-style:bold\">"+tage[nummer]+"</span></div><div align=\"center\"><table border=\"0\" cellspacing=\"3\" cellpadding=\"1\">")
                    for item in items:
                        if item.date == date and ((str(item.content) != "eine uralte Skulptur") or not(spliteffigies)):
                            heis = str(item.content).replace("ein Paar ","").replace("einen ","").replace("eine ","").replace("ein ","")
                            try:
                                bild_pfad = d_items[heis]
                                t1 = '<span style=\"font-family:Verdana; font-weight:bold; font-size:18\"> 999 </span>'+'<img src=\"'+bild1+bild_pfad+'\"'+' alt=\"'+heis+'\" title=\"'+heis+'\">'
                            except:
                                t1 = '<span style=\"font-family:Verdana; font-weight:bold; font-size:12\"> 999 '
                                t1 += heis+'</span>'
                            if item.author in spieler:
                                ausgaben[nummer][spieler.index(item.author)] += t1,
                            else:
                                spieler += item.author,
                                ausgaben[nummer] += [],
                                ausgaben[nummer][spieler.index(item.author)] += t1,
                    notagain = []
                    for s in spieler:
                        self.response.out.write('<tr valign=\"middle\"><td align=\"right\">'+"<span style=\"font-family:Verdana; font-size:11; font-style:italic\">"+s+':</span></td><td align=\"left\">')
                        for a in ausgaben[nummer][spieler.index(s)]:
                            zahl = ausgaben[nummer][spieler.index(s)].count(a)
                            if zahl == 1:
                                self.response.out.write(a.replace("999",""))
                            elif not (a in notagain):
                                self.response.out.write(a.replace("999",str(zahl)+'x '))
                                notagain += a,
                        self.response.out.write('</td></tr></div>')
                    nummer += 1
                    self.response.out.write('</div></table>')

                self.response.out.write("""
                    </span>
                    </body>
                  </html>""")
        ######################################################################################################

        application = webapp.WSGIApplication(
                                            [('/', MainPage),
                                              ('/drops', Drops),
                                              ('/drops/items', Dropsitems),
                                              ('/skills', Skill2s),
                                              ('/drops/all', Drops2),
                                              ('/skills/all', Skill2s2),
                                              ('/update/si2fha9238h', Update),
                                              ('/info', Info),
                                              ('/info/si2fha9238h', Info2),
                                              ('/renew/si2fha9238h', Renew),
                                              ('/renew_datastore/si2fha9238h', Renew_Datastore)],
                                            debug=True)

        def main():
            run_wsgi_app(application)

        if __name__ == "__main__":
            main()


    cron.yaml
    Code:
    cron:
    - description: autoupdate
      url: /update/(kommt später rein)*
      schedule: every 1 minutes
    - description: memberlisteupdate
      url: /renew/(kommt später rein)*
      schedule: every day 02:00

    Ich hoffe du kannst mir weiterhelfen Happy falls es fehler gibst kannste mir sagen wo oder wenn du so nett bist verbessern kannst hoffe auf eine antwort von dir Marv Grins



    Mfg
    Oo Mac Mall von UN Happy Marv add mich mal in skype (Mac_mall187)

    Gesponserte Inhalte

    Re: Droplog erstellen

    Beitrag von Gesponserte Inhalte


      Aktuelles Datum und Uhrzeit: 23.01.18 14:07