Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/python2
- import mechanize
- import cookielib
- import json
- import os
- import inspect
- import signal
- from time import *
- from sys import exit
- from urllib2 import HTTPError
- #########################################################################
- # Configuration Section
- # What stat to train
- attr = "Agi" # Agi / Str / Mar / CCo / Con / Sma / Tec
- # Time between relogs (keep the login cookie updated!)
- relog_freq = 8 * 12 # n hours * 12 pt/hour
- # Log in credentials
- myuser = 'your_user_name'
- mypass = 'your_password'
- #########################################################################
- def log(txt):
- global l
- txt = strftime("%d-%m-%Y %H:%M:%S ") + txt
- print txt
- l.write(txt + "\n")
- l.flush()
- def dumphtml(txt):
- f = open("log.html","w")
- f.write(str(txt))
- f.close()
- def login(br):
- log("Opening url...")
- html = ""
- while (html == ""):
- try:
- r = br.open('http://www.zombiepandemic.com')
- html = r.read()
- except HTTPError, e:
- log("Got error code %s on main screen" % str(e.code))
- fibowait()
- fibo_c = [ 0, 1 ]
- log("Logging in...")
- html = ""
- while (html == ""):
- try:
- br.select_form(nr=0)
- br.form['ctl00$TextBoxUsername']=myuser
- br.form['ctl00$TextBoxPassword']=mypass
- br.submit()
- html = br.response().read()
- except HTTPError, e:
- log("Got error code %s on logging in" % str(e.code))
- fibowait()
- fibo_c = [ 0, 1 ]
- dumphtml(html)
- if (html.find("Krilla")!=-1):
- log("Login successful.")
- elif (html.find("Invalid login information")!=-1):
- log("Login unsuccessful; aborting.")
- exit(1)
- else:
- log("Unknown Error. Logging response and exiting")
- exit(2)
- line = html[html.find("window.ZP.gamestate.activities.activityList"):]
- s_start = line.find("[") +1;
- s_end = line.find("]");
- data = line[s_start:s_end]
- if (data == ""):
- data = {'SecondsLeft':0}
- else:
- data = json.loads(data)
- return data
- def pidfile(pidfile):
- my_pid = str(os.getpid())
- if os.access(pidfile, os.F_OK):
- pf = open(pidfile, "r")
- pf.seek(0)
- old_pid = pf.readline()
- pf.close()
- if ((my_pid != old_pid) and (os.path.exists("/proc/%s" % old_pid))):
- print "Already running, with pid %s" % old_pid
- exit(0)
- else:
- os.remove(pidfile)
- pf = open(pidfile, "w")
- pf.write("%s" % my_pid)
- pf.close()
- def cleanup():
- global pidfile
- log("Saliendo.")
- os.remove(mypidfile)
- def fibowait():
- global fibo_c
- tmp = fibo_c[0]
- fibo_c[0] = fibo_c[1]
- fibo_c[1] = fibo_c[1] + tmp
- log("Retrying in %i seconds" % fibo_c[1])
- sleep(fibo_c[1])
- # Check if already an instance running
- own_name = inspect.getfile(inspect.currentframe())
- f_s = own_name.find("/")+1
- f_e = own_name.rfind(".")
- if (f_e <= f_s):
- f_e = ""
- mypidfile = "" + own_name[f_s:f_e] + ".pid"
- pidfile(mypidfile)
- # Register cleanup function on TERM signal
- signal.signal(signal.SIGTERM, cleanup)
- l = open("out.txt","w")
- # Browser
- br = mechanize.Browser()
- # Cookie Jar
- cj = cookielib.LWPCookieJar()
- br.set_cookiejar(cj)
- # Browser options
- br.set_handle_equiv(True)
- br.set_handle_gzip(False)
- br.set_handle_redirect(True)
- br.set_handle_referer(True)
- br.set_handle_robots(False)
- # Follows refresh 0 but not hangs on refresh > 0
- br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
- # Want debugging messages?
- #br.set_debug_http(True)
- #br.set_debug_redirects(True)
- #br.set_debug_responses(True)
- # User-Agent (this is cheating, ok?)
- br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
- hdr = { 'User-agent': 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1',
- 'Accept': 'application/json, text/javascript, */*; q=0.01',
- 'Referer': 'http://www.zombiepandemic.com/sitepages/Location.aspx',
- 'DNT': '1',
- 'X-Requested-With': 'XMLHttpRequest',
- 'Content-Type': 'application/json; charset=utf-8'}
- d = { "skillCode":attr,"points":"10" }
- train_data = json.dumps(d)
- url = 'http://www.zombiepandemic.com/SitePages/Services/ActionService.asmx/StartTraining'
- msg_array = []
- fibo_c = [ 0, 1 ]
- # Counter; set to login on 1st time
- c = relog_freq +1
- try:
- while (True): # Go on forever
- if (c >= relog_freq):
- data = login(br)
- c = 0
- if (data['SecondsLeft'] > 0):
- log("Sleeping for " + str(data['SecondsLeft']+1) + " seconds to finish training")
- sleep(data['SecondsLeft']+1)
- log("Sending training request...")
- req = mechanize.Request(url, train_data, hdr)
- html = ""
- while (html == ""):
- try:
- r = br.open(req)
- html = r.read()
- c = c + 1
- except HTTPError, e:
- log("Got error code " + str(e.code) + " on start training")
- fibowait()
- fibo_c = [ 0, 1 ]
- dumphtml(html)
- msg_array = json.loads(html)
- data = json.loads(msg_array["d"])["Activity"]
- log("Request sent for " + str(data['JobCode']) + ". Current points: " + str(data['CurrentPoints']) + " (counter = " + str(c) + ")")
- except KeyboardInterrupt:
- print "\nGot Ctrl-C"
- finally:
- cleanup()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement