Hab die Anweisungen/Anleitung genau befolgt und das ist das Ergebnis: http://umbranoc.appspot.com/
main.py
app.yaml
cron.yaml
Zuerst kam ein Error 500 mit dem Hinweis:
<type 'exceptions.SyntaxError'>: invalid syntax (main.py, line 67)
Hab das <br> rausgelöscht.
Jetzt kommt dieser Error:
Wär nett, wenn du mir helfen könntest.
Danke
main.py
- Code:
# -*- coding: cp1252 -*-
#Sicherheitscode: xxx
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","Hoher Rat","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'}<br>
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 = []
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("ü","ü").replace("ö","ö").replace("ä","ä")
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/xxx', Update),
('/info', Info),
('/info/xxx', Info2),
('/renew/xxx', Renew),
('/renew_datastore/xxx', Renew_Datastore)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
app.yaml
- Code:
application: umbranoc
version: 1
runtime: python
api_version: 1
handlers:
- url: .*
script: main.py
cron.yaml
- Code:
cron:
- description: autoupdate
url: /update/xxx
schedule: every 1 minutes
- description: memberlisteupdate
url: /renew/xxx
schedule: every day 02:00
Zuerst kam ein Error 500 mit dem Hinweis:
<type 'exceptions.SyntaxError'>: invalid syntax (main.py, line 67)
Hab das <br> rausgelöscht.
Jetzt kommt dieser Error:
- Code:
'Renew' object has no attribute 'response'
Traceback (most recent call last):
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 700, in __call__
handler.get(*groups)
File "/base/data/home/apps/s~umbranoc/1.351799734361996238/main.py", line 475, in get
r.get(write = False)
File "/base/data/home/apps/s~umbranoc/1.351799734361996238/main.py", line 164, in get
self.response.out.write("<!-- "+text.replace("-->","")+"\n")
AttributeError: 'Renew' object has no attribute 'response'
Wär nett, wenn du mir helfen könntest.
Danke