Saltor

Untitled

May 1st, 2014
490
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.46 KB | None | 0 0
  1. import json
  2. import urllib
  3. import re
  4. from datetime import timedelta
  5. import pprint
  6.  
  7. API_URL = "http://api.speedrunslive.com/"
  8.  
  9. def loadJsonFromUrl(url):
  10.     jsonFile = urllib.urlopen(url)
  11.     jsonDict = json.loads(jsonFile.read())
  12.     return jsonDict
  13.  
  14. def isBingoUrl(url):
  15.     pattern = re.compile(".*speedrunslive.com/tools/oot-bingo/\?seed=[0-9]+")
  16.     return pattern.match(url)
  17.  
  18. def getStatsUrl(player):
  19.     return API_URL + "stat?player=" + player
  20.  
  21. def getNumberRaces(player):
  22.     statsJson = loadJsonFromUrl(getStatsUrl(player))
  23.     return statsJson["stats"]["totalRaces"]
  24.  
  25. def getResultsUrl(player):
  26.     numRaces = getNumberRaces(player)
  27.     return API_URL + "pastraces?player=" + player + "&pageSize=" + str(numRaces)
  28.  
  29. def getPastRaces(player):
  30.     resultsJson = loadJsonFromUrl(getResultsUrl(player))
  31.     return resultsJson["pastraces"]
  32.  
  33. def getPastBingoRaces(player):
  34.     pastRaces = getPastRaces(player)
  35.     bingoRaces = []
  36.     for race in pastRaces:
  37.         if isBingoUrl(race["goal"]):
  38.             bingoRaces.append(race)
  39.     return bingoRaces
  40.  
  41. def getPastBingoResultsJson(player):
  42.     bingoRaces = getPastBingoRaces(player)
  43.     bingoResults = []
  44.     for race in bingoRaces:
  45.         for result in race["results"]:
  46.             if result["player"].lower() == player.lower():
  47.                 bingoResults.append(result)
  48.     return bingoResults
  49.  
  50. def getPastBingoResults(player):
  51.     resultJsons = getPastBingoResultsJson(player)
  52.     return [Result(resultJson) for resultJson in resultJsons]
  53.  
  54. def getAverageTime(times):
  55.     if(len(times) > 0):
  56.         return sum(times, timedelta(0)) / len(times)
  57.     else:
  58.         return 0
  59.  
  60. class Result:
  61.     def __init__(self, resultJson):
  62.         self.raceid = resultJson["race"]
  63.         self.time = timedelta(seconds=resultJson["time"])
  64.         self.message = resultJson["message"]
  65.  
  66.     def __str__(self):
  67.         return str(self.time)
  68.  
  69.     def __cmp__(self, result):
  70.         return compare(self.result, result)
  71.  
  72.     def isForfeit(self):
  73.         return self.time <= timedelta(0)
  74.  
  75.     def apiUrl(self):
  76.         return API_URL + "pastraces?id=" + str(self.raceid)
  77.  
  78.     def raceUrl(self):
  79.         return "http://www.speedrunslive.com/races/result/#!/" + str(self.raceid)
  80.  
  81. class Racer:
  82.     def __init__(self, username):
  83.         self.username = username.strip()
  84.         self.results = getPastBingoResults(username)
  85.  
  86.     def validResults(self):
  87.         return [result for result in self.results if not result.isForfeit()]
  88.  
  89.     def validTimes(self):
  90.         return [result.time for result in self.validResults()]
  91.  
  92.     def forfeitResults(self):
  93.         return [result for result in self.results if result.isForfeit()]
  94.  
  95.     def sortedResults(self):
  96.         return sorted(results)
  97.  
  98.  
  99.  
  100. """
  101. usernames = open("usernames")
  102. usernames = ["mrbubbleskp"]
  103. for username in usernames:
  104.    username = username.strip()
  105.    print "running user " + username
  106.    bingoTimes = getPastBingoTimes(username)
  107.    validTimes = removeForfeits(bingoTimes)
  108.    forfeits = numForfeits(bingoTimes)
  109.    print "number valid bingos: " + str(len(validTimes))
  110.    print "number forfeits: " + str(forfeits)
  111.    print "average (recent 15): " + str(getAverageTime(validTimes[0:15]))
  112.    print "average (recent 10): " + str(getAverageTime(validTimes[0:10]))
  113.    print "average (recent 5): " + str(getAverageTime(validTimes[0:5]))
  114.    print "last 5 times: "
  115.    for time in validTimes[0:5]:
  116.        print str(time)
  117.    print ""
  118. """
Advertisement
Add Comment
Please, Sign In to add comment