Beispiel #1
0
def desaHashtags(fol):
    """
    Funció que desa tots els hashtags en un fitxer específic pels hashtags

    :param fol: El nom del directori on s'ha de guardar els hashtags
    """
    hashtags = []
    for h in i.getHashtags().values():
        hashtags.append(h.id)

    ReadWriteFiles.writeToFile(fol, ReadWriteFiles.NomFitHashtags, hashtags)
Beispiel #2
0
def desaUsuaris(fol):
    """
    Funció que desa tots els usuaris en un fitxer específic pels usuaris

    :param fol: El nom del directori on s'ha de guardar els usuaris
    """
    usuaris = []
    for user in i.getUsuaris().values():
        usuaris.append(user.desa())

    ReadWriteFiles.writeToFile(fol, ReadWriteFiles.NomFitUsuaris, usuaris)
Beispiel #3
0
def desaPosts(fol):
    """
    Funció que desa tots els posts en un fitxer específic pels posts

    :param fol: El nom del directori on s'ha de guardar els posts
    """
    posts = []
    for post in i.getPosts().values():
        posts.append(post.desa())

    ReadWriteFiles.writeToFile(fol, ReadWriteFiles.NomFitPosts, posts)
Beispiel #4
0
def getVhdl():
    """
    S'encarrega de crear un directori amb els fitxers necessàris a dins. Si ja hi és fa les conversions Partitura-ROM-VHDL
    """
    fol= ReadWriteFiles.createUseFolder()
    if(not fol[1]):
        return
    fol = fol[0]
    rom = PartituraToROM.linesToROM(fol)
    ReadWriteFiles.writeToFile(fol, ReadWriteFiles.ROM, rom)

    vhdl = ROMtoVHDL.getCodeFromFolder(fol)
    ReadWriteFiles.writeToFile(fol, ReadWriteFiles.VHDL, vhdl)
Beispiel #5
0
def recuperaPosts(fol, hashtags):
    """
    Funció que s'utilitza per recuperar els posts a partir del directori / fitxer on hi són guardats.

    :param fol: El nom del directori on hi haurà el fitxer de Posts per poder-ne extreure la informació
    :param hashtags: Diccionari de :class:`Hashtags.Hashtag` existents en la xarxa social
    :return: False si no s'ha pogut fer correctament i llista de posts si sí que s'ha pogut realitzar la recuperació correctament
    """
    posts = []
    try:
        for post in ReadWriteFiles.readlines(fol, ReadWriteFiles.NomFitPosts):
            p = Post()
            if (not p.recupera(post, hashtags)):
                raise Exceptions.PostError()
            else:
                posts.append(p)

    except Exceptions.PostError:
        print "El post no s'ha pogut convertir correctament"
        return False
    except Exception as e:
        print e
        return False

    return posts
Beispiel #6
0
def recupera():
    """
    Funció que es crida per recuperar totes les dades a partir d'un directori. Si hi ha cap problema recuperant les dades
    es demanarà que es crei una nova :class:`iTICApp.iTICApp` o es trii un altre fitxer.
    """
    if (not MainLib.askYorNQuestion(
            "Vol recuperar les dades d'una altra sessió? ")):
        global i
        i = iTICApp()
        return
    try:
        fol = ReadWriteFiles.askFolder()
        hashtags = dict((value.id, value) for value in recuperaHashtags(fol))
        posts = dict(
            (value.id, value) for value in recuperaPosts(fol, hashtags))
        usuaris = recuperaUsuaris(fol, posts)

        if (usuaris == False or posts == False or hashtags == False):
            recuperaFallida()
            return
    except:
        recuperaFallida()
        return
    print "Dades importades correctament"
    i = iTICApp(usuaris=usuaris, posts=posts, hashtags=hashtags)
Beispiel #7
0
def desa():
    """
    Funció que s'encarrega de guardar totes les dades de la iTICApp en el directori i fitxers corresponents
    """
    fol = ReadWriteFiles.createUseFolder()
    desaPosts(fol)
    desaHashtags(fol)
    desaUsuaris(fol)
def readFile(folder):
    """
    Llegeix el fitxer dins del directori

    :param folder: Directori on hi ha el fitxer ROM
    :return: El txt amb tot el text
    """
    l = ReadWriteFiles.readlines(folder, ReadWriteFiles.ORIGINAL)
    return [line.split() for line in l] if l != False else exit()
def readFile(folder):
    """
    Llegeix el fitxer dins del directori

    :param folder: Directori on hi ha el fitxer ROM
    :return: El txt amb tot el text
    """
    l = ReadWriteFiles.readlines(folder, ReadWriteFiles.ROM)
    return l if l != False else exit()
Beispiel #10
0
def recuperaHashtags(fol):
    """
    Funció per recuperar els hashtags a partir del directori on hi ha el fitxer que guarda la informació d'aquests

    :param fol: El nom del directori on hi haurà el fitxer de Posts per poder-ne extreure la informació
    :return: False si no s'ha pogut fer la conversió correctament i una llista de Hashtags si s'ha pogut fer correctament
    """
    hash = []
    try:
        for h in ReadWriteFiles.readlines(fol, ReadWriteFiles.NomFitHashtags):
            hash.append(Hashtag(h))
    except Exception as e:
        print "Error, no s'ha pogut recuperar els hashtags correctament: ", e.message
        return False
    return hash
Beispiel #11
0
def playerid_to_playerName(playerid):

    playerIDDict = ReadWriteFiles.readPlayerIDMap()

    if(playerid in playerIDDict):
        return playerIDDict[playerid]
    else:
        #print(str(playerid))
        playerPage = requests.get("http://espn.go.com/nba/player/_/id/" + str(playerid))
        playerTree = html.fromstring(playerPage.content)
        #print(playerid)
        
        try:
            [playerName] = playerTree.xpath("//div[@class='mod-content']/*/h1/text() | //div[@class='mod-content']/h1/text()")
        except (IndexError):
            print("Player " + playerid + " causes error")


        playerIDDict[playerid] = playerName
        playerIDDict[playerName] = playerid

        ReadWriteFiles.writePlayerIDDict(playerIDDict)

        return playerName
Beispiel #12
0
def convertRotowireList(rotoWireList,urlList):

    playerIDDict = ReadWriteFiles.readPlayerIDMap()

    #print("\noriginal list")
    #print(rotoWireList)

    returnedList = []

    for i in range(0,len(rotoWireList)):
        rotoname = rotoWireList[i]

        #takes care of cases where name matches
        #and when first and last name both match -> regardless of Jr. suffix, middle name
        if(rotoname in playerIDDict.keys() or (HumanName(rotoname).first + " " + HumanName(rotoname).last) in playerIDDict.keys()):
            returnedList.append(rotoname)
        else:
            if(rotoname[1] == "."):
                tempLst = []
                for playerName in playerIDDict.keys():
                    if(HumanName(playerName).first == HumanName(rotoname).first and playerName[0] == rotoname[0]):
                        tempLst.append(playerName)
                if len(tempLst) == 1:
                    returnedList.append(tempLst[0])
                else:
                    (html.fromstring(requests.get(urlList[i]).content)).xpath("//h1[position()=1]/text()")[0]

            else:
                for playerName in playerIDDict.keys():
                    if(HumanName(playerName).first == HumanName(rotoname).first and HumanName(playerName).last == HumanName(rotoname).last):
                        returnedList.append(playerName)


    
    # convertedList = [x if (x in playerIDDict.keys()) else [k for (k,v) in playerIDDict.items() if (x[1] == "." and x.split(" ")[1] in k and x[0] == k[0]) or x in k] for x in rotoWireList]

    # print(returnedList)
    # convertedList = [x[0] if not type(x[0]) == list else x[0][0] if len(x[0])==0 else (html.fromstring(requests.get(x[1]).content)).xpath("//h1[position()=1]/text()")[0] for x in zip(convertedList,urlList)]

    #[(html.fromstring(requests.get(x).content)).xpath("//h1[position()=1]/text()")[0] for x in starterFullURLList]

    #print("\nconverted list")
    #print(convertedList)
    return returnedList
Beispiel #13
0
def recuperaUsuaris(fol, posts):
    """
    Funció que s'utilitza per recuperar els usuaris a partir del directori / fitxer on hi són guardats.

    :param fol: El nom del directori on hi haurà el fitxer de Posts per poder-ne extreure la informació
    :param posts: Diccionari de :class:`Posts.Post` existents en la xarxa social
    :return: False si no s'ha pogut fer correctament i diccionari d'usuaris si sí que s'ha pogut realitzar la recuperació correctament
    """
    usuaris = {}
    try:
        for user in ReadWriteFiles.readlines(fol,
                                             ReadWriteFiles.NomFitUsuaris):
            u = User()
            if (not u.recupera(user, posts)):
                raise Exceptions.UserError()
            else:
                usuaris[u.nick] = u

    except Exceptions.UserError:
        print "L'usuari no s'ha pogut convertir correctament"
        return False
    except Exception as e:
        print e
        return False

    try:
        for usuari in usuaris.values():
            followersInstance = []
            for follower in usuari.followers:
                if (follower == ""):
                    continue
                if (follower not in usuaris):
                    raise Exceptions.NoUserException(follower)
                else:
                    followersInstance.append(usuaris[follower])
            usuari.followers = followersInstance
    except Exceptions.NoUserException as e:
        print "No hi ha cap usuari anomenat", e.message, "en la xarxa social"
        return False
    except Exception as e:
        print "Excepció al posar followers: ", e.message
        return False

    try:
        for usuari in usuaris.values():
            followingInstance = []
            for following in usuari.following:
                if (following == ""):
                    continue
                if (following not in usuaris):
                    raise Exceptions.NoUserException(following)
                else:
                    followingInstance.append(usuaris[following])
            usuari.following = followingInstance
    except Exceptions.NoUserException as e:
        print "No hi ha cap usuari anomenat", e.message, "en la xarxa social"
        return False
    except Exception as e:
        print "Excepció al posar following: ", e.message
        return False

    return usuaris
Beispiel #14
0
def createPlayerMap(gameids,currentMap):

    #use defaultdict to map playerids to game stats
    playerMap = defaultdict(OrderedDict)
    #playerMap = OrderedDict()

    print(sorted(gameids,key=lambda x: x[1]))

    #will keep track of playerids of injured players on both teams
    injuredIDMap = ReadWriteFiles.readInjuredIDMap()
    
    for gameid in sorted(gameids,key=lambda x: x[1]):
        gameid = gameid[0]
        #print(gameid)
        gameBoxScoreURL = "http://espn.go.com/nba/boxscore?gameId=" + gameid
        boxScorePage = requests.get(gameBoxScoreURL)
        boxScoreTree = html.fromstring(boxScorePage.content)

        gameInfoURL = "http://espn.go.com/nba/game?gameId=" + gameid
        gameInfoPage = requests.get(gameInfoURL)
        gameInfoTree = html.fromstring(gameInfoPage.content)

        #first get game data not specific to each player (time,date,score,team numbers etc)
        gameDataList = []
        #print(gameid)

        try:
            #game_time_info = boxScoreTree.xpath("//div[@class='game-time-location']/p/text()")[0] OLD ESPN
            game_time_info = gameInfoTree.xpath("//div[@class='game-date-time']/span/@data-date")[0]
            OTfinalStatus = gameInfoTree.xpath("//div[@class='game-status']/span/text()")[0]
            if("OT" in OTfinalStatus):

                [_,ot] = OTfinalStatus.split("/")
                if (ot == "OT"):
                    overtime = 1
                else:
                    overtime = int(ot[0])
            else:
                overtime = 0
            #print(OTfinalStatus)
            #print(game_time_info)

            #[awayName,awayScore] = boxScoreTree.xpath("//div[@class='team away']/div/h3/*/text()") OLD ESPN
            #[homeName,homeScore] = boxScoreTree.xpath("//div[@class='team home']/div/h3/*/text()") OLD ESPN

            awayName = boxScoreTree.xpath("//div[@class='team away']/div[@class='content']/div[@class='team-container']/div[@class='team-info']/a/span[@class='short-name']/text()")[0]
            homeName = boxScoreTree.xpath("//div[@class='team home']/div[@class='content']/div[@class='team-container']/div[@class='team-info']/a/span[@class='short-name']/text()")[0]

            awayScore = boxScoreTree.xpath("//div[@class='team away']/div[@class='content']/div[@class='score-container']/div/text()")[0]
            homeScore = boxScoreTree.xpath("//div[@class='team home']/div[@class='content']/div[@class='score-container']/div/text()")[0]

            #scoreDifference = int(awayScore) - int(homeScore)


            #print(scoreDifference)
            #print(awayName)
            #print(homeName)


            #keep track of which players were on the away team and which were on the home team
            #[awayTeam] = boxScoreTree.xpath("//table/thead[position()=1]/tr[@class='team-color-strip']/th/text()")
            awayTeamNum = Util.team_dict[awayName]
            #awayPlayeridList = boxScoreTree.xpath("//table/tbody[position()=1 or position()=2]/tr[contains(@class,'player-46')]/@class") OLD ESPN
            #awayPlayeridList = [x.split("player-46-")[1] for x in awayPlayeridList]
            
            #print(boxScoreTree.xpath("//tr/td/a/@href"))
            #print(boxScoreTree.xpath("//div[@class='col column-one gamepackage-away-wrap']/*"))
            #print(boxScoreTree.xpath("//div[@class='col column-one gamepackage-away-wrap']/div[@class='sub-module']/*"))
            #print(boxScoreTree.xpath("//div[@class='col column-one gamepackage-away-wrap']/div[@class='sub-module']/div/table/tbody/tr/td/a/@href"))
            awayPlayerURLList = boxScoreTree.xpath("//div[@class='col column-one gamepackage-away-wrap']/div[@class='sub-module']/div/table/tbody/tr/td/a/@href")
            awayPlayeridList = [x.split("_/id/")[1] for x in awayPlayerURLList]
            awayStarteridList = awayPlayeridList[0:5]
            awayBenchidList = awayPlayeridList[5:]
            #print(awayPlayeridList)



           # [homeTeam] = boxScoreTree.xpath("//table/thead[position()=4]/tr[@class='team-color-strip']/th/text()")
            homeTeamNum = Util.team_dict[homeName]
            #homePlayeridList = boxScoreTree.xpath("//table/tbody[position()=4 or position()=5]/tr[contains(@class,'player-46')]/@class")
            #homePlayeridList = [x.split("player-46-")[1] for x in homePlayeridList]

            homePlayerURLList = boxScoreTree.xpath("//div[@class='col column-two gamepackage-home-wrap']/div[@class='sub-module']/div/table/tbody/tr/td/a/@href")
            homePlayeridList = [x.split("_/id/")[1] for x in homePlayerURLList]
            homeStarteridList = homePlayeridList[0:5]
            homeBenchidList = homePlayeridList[5:]
            #print(homePlayeridList)





            awayInjuredIDList = []
            #gets player stats for away players and appends that to the game stats
            for playerid in awayStarteridList:
                xPathStatsString = "//tr[td/a/@href='http://espn.go.com/nba/player/_/id/" + playerid + "']/*/text()"
                xPathPositionString = "//tr[td/a/@href='http://espn.go.com/nba/player/_/id/" + playerid + "']/td/*/text()"
                #print(xPathPositionString)

                gameStatsList = []
                # stores own team's number and also the opposing team's number
                # 0 for away team then 1 for being a starter and then away score (own score) then home score (other score)
                
                gameStatsList += Util.data_date_convert(game_time_info) + [awayTeamNum, homeTeamNum] + [0, 1, int(awayScore),int(homeScore), overtime]      
 
                playerStatsList = [boxScoreTree.xpath(xPathPositionString)[1]] + boxScoreTree.xpath(xPathStatsString)
                
                #print(playerStatsList)

                if("DNP" not in playerStatsList[1] or "COACH'S DECISION" in playerStatsList[1] or len(playerStatsList) != 2):         
                    playerStatsList = Util.playerStatsConvert(playerStatsList)
                   # print(playerStatsList)
                   # playerMap[playerid].append(gameid)
                   # print(gameStatsList+playerStatsList)
        
                    playerMap[playerid][gameid]=(gameStatsList+playerStatsList)
                    #playerMap[playerid] = OrderedDict({gameid:(gameStatsList+playerStatsList)})

                else:
                    awayInjuredIDList.append(playerid)
                    print(playerid + " is injured, so stats from game will not count")



            #gets player stats for away players and appends that to the game stats
            for playerid in awayBenchidList:
                xPathStatsString = "//tr[td/a/@href='http://espn.go.com/nba/player/_/id/" + playerid + "']/*/text()"
                xPathPositionString = "//tr[td/a/@href='http://espn.go.com/nba/player/_/id/" + playerid + "']/td/*/text()"
                #print(xPathPositionString)

                gameStatsList = []
                # stores own team's number and also the opposing team's number
                # 0 for away team then 0 for coming off the benchand then away score (own score) then home score (other score)
                
                gameStatsList += Util.data_date_convert(game_time_info) + [awayTeamNum, homeTeamNum] + [0, 0,int(awayScore),int(homeScore), overtime]      
 
                playerStatsList = [boxScoreTree.xpath(xPathPositionString)[1]] + boxScoreTree.xpath(xPathStatsString)
                
                #print(playerStatsList)

                if("DNP" not in playerStatsList[1] or "COACH'S DECISION" in playerStatsList[1]):         
                    playerStatsList = Util.playerStatsConvert(playerStatsList)
                   # print(playerStatsList)
                   # playerMap[playerid].append(gameid)
                   # print(gameStatsList+playerStatsList)
        
                    playerMap[playerid][gameid]=(gameStatsList+playerStatsList)
                    #playerMap[playerid] = OrderedDict({gameid:(gameStatsList+playerStatsList)})

                else:
                    awayInjuredIDList.append(playerid)
                    print(playerid + " is injured, so stats from game will not count")
        



            homeInjuredIDList = []
            #gets player stats for home players and appends that to the game stats
            for playerid in homeStarteridList:
                xPathStatsString = "//tr[td/a/@href='http://espn.go.com/nba/player/_/id/" + playerid + "']/*/text()"
               

                xPathPositionString = "//tr[td/a/@href='http://espn.go.com/nba/player/_/id/" + playerid + "']/td/*/text()"
                #print(xPathPositionString)

                gameStatsList = []
        
                # stores own team's number and also the opposing team's number
                # 1 for home team, 1 for starter and score difference is calc away score - home score
                #
                gameStatsList += Util.data_date_convert(game_time_info) + [homeTeamNum, awayTeamNum] + [1, 1, int(homeScore), int(awayScore), overtime]

                playerStatsList = [boxScoreTree.xpath(xPathPositionString)[1]] + boxScoreTree.xpath(xPathStatsString)

                if("DNP" not in playerStatsList[1] or "COACH'S DECISION" in playerStatsList[1]):

                
                    playerStatsList = Util.playerStatsConvert(playerStatsList)
                   # print(playerStatsList)
                   # playerMap[playerid].append(gameid)

                    playerMap[playerid][gameid]=(gameStatsList+playerStatsList)
                    #playerMap[playerid] = OrderedDict({gameid:(gameStatsList+playerStatsList)})
                else:
                    homeInjuredIDList.append(playerid)
                    print(playerid + " is injured, so stats from game will not count")


                    #gets player stats for home players and appends that to the game stats
            for playerid in homeBenchidList:
                xPathStatsString = "//tr[td/a/@href='http://espn.go.com/nba/player/_/id/" + playerid + "']/*/text()"
               

                xPathPositionString = "//tr[td/a/@href='http://espn.go.com/nba/player/_/id/" + playerid + "']/td/*/text()"
                #print(xPathPositionString)

                gameStatsList = []
        
                # stores own team's number and also the opposing team's number
                # 1 for home team, 0 for bench and score difference is calc away score - home score
                # 
                gameStatsList += Util.data_date_convert(game_time_info) + [homeTeamNum, awayTeamNum] + [1, 0, int(homeScore), int(awayScore), overtime]

                playerStatsList = [boxScoreTree.xpath(xPathPositionString)[1]] + boxScoreTree.xpath(xPathStatsString)

                if("DNP" not in playerStatsList[1] or "COACH'S DECISION" in playerStatsList[1]):

                
                    playerStatsList = Util.playerStatsConvert(playerStatsList)
                   # print(playerStatsList)
                   # playerMap[playerid].append(gameid)

                    playerMap[playerid][gameid]=(gameStatsList+playerStatsList)
                    #playerMap[playerid] = OrderedDict({gameid:(gameStatsList+playerStatsList)})
                else:
                    homeInjuredIDList.append(playerid)
                    print(playerid + " is injured, so stats from game will not count")

            injuredIDMap[gameid] = (awayInjuredIDList,homeInjuredIDList)

        except (IndexError):
            print("Game " + gameid + " does not exist")
            #raise IndexError
    print(playerMap)

    #need to UNION currentMap(defaultdict in file) and playerMap(recent games)
    for playerid,orderedDict in playerMap.items():

        for gameid,statList in orderedDict.items():
            #TODO: look to make this more efficient
            #if(not gameid in currentMap[playerid] or not playerid in currentMap):
            if(not playerid in currentMap):
                currentMap[playerid] = OrderedDict()
            #print(type(gameid))
            currentMap[playerid][gameid] = statList



    return (currentMap,injuredIDMap)
Beispiel #15
0
def playername_to_id(playername):
    playerIDDict = ReadWriteFiles.readPlayerIDMap()
    return playerIDDict[playername]
import datetime
import os
import json
import numpy as np
import csv


import Optimize
import ML
import Util
import ReadWriteFiles
import Scraper


# print("Reading previously stored player-stats map")
(lastModifiedDate,currentMap) = ReadWriteFiles.readPlayerStatsFile()
isUpdated = (lastModifiedDate == datetime.date.today())

print("Getting data about players playing today")
today_playerMap = Scraper.create_todays_playerMap()
projStarters = Scraper.getProjStarters()

today_playerMap = Util.addStarting(today_playerMap,projStarters)
print(json.dumps(today_playerMap))


(lastModifiedDate,currentMap) = ReadWriteFiles.readPlayerStatsFile()

injuredTodayMap = Scraper.getInjuredPlayers()
injuredIDMap = ReadWriteFiles.readInjuredIDMap()