jacob614

TPT Save backup

Jul 19th, 2015
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.30 KB | None | 0 0
  1. import urllib, urllib2
  2. import re
  3. import sys
  4. import json
  5.  
  6. def FatalError(message):
  7.     print(message)
  8.     exit(1)
  9.  
  10. def GetPage(url, cookies = None, headers = None, removeTags = False):
  11.     if cookies:
  12.         req = urllib2.Request(url, urllib.urlencode(headers) if headers else None, {'Cookie':cookies})
  13.     else:
  14.         req = urllib2.Request(url)
  15.     page = urllib2.urlopen(req, timeout=10).read()
  16.     if removeTags:
  17.         return re.sub("<.*?>", "", page)
  18.     return page
  19.  
  20. def GetSessionInfo():
  21.     try:
  22.         powderpref = open("powder.pref", "r")
  23.         prefs = json.loads(powderpref.read())
  24.         powderpref.close()
  25.         return "UserRemember=Yes; UserID={0}; UserKey={1}".format(prefs["User"]["ID"],prefs["User"]["SessionID"])
  26.     except:
  27.         return None
  28.  
  29. def GetUsername():
  30.     try:
  31.         powderpref = open("powder.pref", "r")
  32.         prefs = json.loads(powderpref.read())
  33.         powderpref.close()
  34.         return prefs["User"]["Username"]
  35.     except:
  36.         return None
  37.  
  38. def GetMaxPage(page):
  39.     pagelinks = []
  40.     pagelinks.extend(re.findall("/User/Saves.html\?ID=[0-9]*&amp;PageNum=([0-9]*)", page))
  41.     if pagelinks:
  42.         return int(max(pagelinks))
  43.     else:
  44.         return 0
  45.  
  46. if __name__ == "__main__":
  47.     username = None
  48.     start = 0
  49.     end = -1
  50.     for arg in sys.argv[1:]:
  51.         (argname, argvalue) = arg.split("=")
  52.         if argname == "--username":
  53.             username = argvalue
  54.         elif argname == "--pages":
  55.             (start,end) = map(int, argvalue.split(","))
  56.         else:
  57.             FatalError("Valid arguments: --username=<name>, --pages=<start>,<end>")
  58.     if not username:
  59.         username = GetUsername()
  60.         if not username:
  61.             FatalError("Could not get username from powder.pref, use the --username argument")
  62.     print(username)
  63.     if start < 0 or end < 0:
  64.         link = "http://powdertoy.co.uk/User/Saves.html?Name=%s" % username
  65.         page = GetPage(link, GetSessionInfo())
  66.         if page:
  67.             end = GetMaxPage(page)
  68.         else:
  69.             FatalError("Could not get number of pages to fetch saves from, use the --pages argument")
  70.     print(start,end)
  71.  
  72.     matches = []
  73.     for i in range(start, end):
  74.         link = "http://powdertoy.co.uk/User/Saves.html?Name=%s&PageNum=%s" % (username, i)
  75.         page = GetPage(link, GetSessionInfo())
  76.         matches.extend(re.findall("http://static.powdertoy.co.uk/([0-9]*)_small.png", page))
  77.     print(matches)
  78.     for i in matches:
  79.         save = GetPage("http://static.powdertoy.co.uk/%s.cps" % i)
  80.         f = open(i+".cps", "w")
  81.         f.write(save)
  82.         f.close()
Advertisement
Add Comment
Please, Sign In to add comment