Exemple #1
0
def fromXML(xml):
  game = Game()
  
  # exhibition games not supported
  if Util.XPathSelectOne(xml, "./@game_type") == "E":
    return
  
  game.home_team = TeamList.findById(Util.XPathSelectOne(xml,"./@home_team_id"))
  game.away_team = TeamList.findById(Util.XPathSelectOne(xml,"./@away_team_id"))
  
  game.event_id = Util.XPathSelectOne(xml,"game_media/media/@calendar_event_id")
  game.time = Util.XPathSelectOne(xml, "./@time") + ("AM" if Util.XPathSelectOne(xml, "./@ampm").upper() == "AM" else "PM") + " " + Util.XPathSelectOne(xml, "./@time_zone")
  
  game.status.update({
    "indicator": Util.XPathSelectOne(xml,"status/@ind"),
    "label": Util.XPathSelectOne(xml,"status/@status"),
    "reason": Util.XPathSelectOne(xml,"status/@reason"),
    "inning": Util.XPathSelectOne(xml,"status/@inning"),
    "half": ("top" if Util.XPathSelectOne(xml,"status/@top_inning") == "Y" else "bot")
  })
  
  on_base = Util.XPathSelectOne(xml, "runners_on_base/@status") or 0
  game.situation.update({
    # on base status is a bitfield.  count how many of the first 3 bits are set.
    "baserunners": sum([((int(on_base) & 7) >> bit) & 1 for bit in range(3)]),
    "outs": Util.XPathSelectOne(xml,"./@o")
  })
  
  for inning in xml.xpath('linescore/inning'):
    game.home_line["innings"] += (Util.XPathSelectOne(inning, "./@home") or "")
    game.away_line["innings"] += (Util.XPathSelectOne(inning, "./@away") or "")
  for stat in ["runs", "hits", "errors"]:
    game.home_line[stat] = Util.XPathSelectOne(xml,"linescore/" + stat[0] + "/@home")
    game.away_line[stat] = Util.XPathSelectOne(xml,"linescore/" + stat[0] + "/@away")
  
  for player, stats in [
    ["home_probable_pitcher", ["era", "wins", "losses"]],
    ["away_probable_pitcher", ["era", "wins", "losses"]],
    ["batter", ["h", "ab", "avg", "rbi", "hr"]],
    ["pitcher", ["ip", "er", "wins", "losses", "era"]],
    ["winning_pitcher", ["era", "wins", "losses"]],
    ["losing_pitcher", ["era", "wins", "losses"]],
    ["save_pitcher", ["era", "wins", "losses", "saves"]]
  ]:
    if Util.XPathSelectOne(xml, player + '/@id'):
      game.players[player] = {
        "name": Util.XPathSelectOne(xml, player + '/@first') + " " + Util.XPathSelectOne(xml, player + '/@last')
      }
      for stat in stats:
        game.players[player][stat] = Util.XPathSelectOne(xml, player + '/@' + stat)
  
  return game
Exemple #2
0
def fromXML(xml):
    game = Game()

    # exhibition games not supported
    if Util.XPathSelectOne(xml, "./@game_type") == "E":
        return

    game.home_team = TeamList.findById(
        Util.XPathSelectOne(xml, "./@home_team_id"))
    game.away_team = TeamList.findById(
        Util.XPathSelectOne(xml, "./@away_team_id"))

    game.event_id = Util.XPathSelectOne(xml,
                                        "game_media/media/@calendar_event_id")
    game.time = Util.XPathSelectOne(xml, "./@time") + (
        "AM" if Util.XPathSelectOne(xml, "./@ampm").upper() == "AM" else
        "PM") + " " + Util.XPathSelectOne(xml, "./@time_zone")

    game.status.update({
        "indicator":
        Util.XPathSelectOne(xml, "status/@ind"),
        "label":
        Util.XPathSelectOne(xml, "status/@status"),
        "reason":
        Util.XPathSelectOne(xml, "status/@reason"),
        "inning":
        Util.XPathSelectOne(xml, "status/@inning"),
        "half": ("top" if Util.XPathSelectOne(xml, "status/@top_inning") == "Y"
                 else "bot")
    })

    on_base = Util.XPathSelectOne(xml, "runners_on_base/@status") or 0
    game.situation.update({
        # on base status is a bitfield.  count how many of the first 3 bits are set.
        "baserunners":
        sum([((int(on_base) & 7) >> bit) & 1 for bit in range(3)]),
        "outs":
        Util.XPathSelectOne(xml, "./@o")
    })

    for inning in xml.xpath('linescore/inning'):
        game.home_line["innings"] += (Util.XPathSelectOne(inning, "./@home")
                                      or "")
        game.away_line["innings"] += (Util.XPathSelectOne(inning, "./@away")
                                      or "")
    for stat in ["runs", "hits", "errors"]:
        game.home_line[stat] = Util.XPathSelectOne(
            xml, "linescore/" + stat[0] + "/@home")
        game.away_line[stat] = Util.XPathSelectOne(
            xml, "linescore/" + stat[0] + "/@away")

    for player, stats in [["home_probable_pitcher", ["era", "wins", "losses"]],
                          ["away_probable_pitcher", ["era", "wins", "losses"]],
                          ["batter", ["h", "ab", "avg", "rbi", "hr"]],
                          ["pitcher", ["ip", "er", "wins", "losses", "era"]],
                          ["winning_pitcher", ["era", "wins", "losses"]],
                          ["losing_pitcher", ["era", "wins", "losses"]],
                          ["save_pitcher", ["era", "wins", "losses",
                                            "saves"]]]:
        if Util.XPathSelectOne(xml, player + '/@id'):
            game.players[player] = {
                "name":
                Util.XPathSelectOne(xml, player + '/@first') + " " +
                Util.XPathSelectOne(xml, player + '/@last')
            }
            for stat in stats:
                game.players[player][stat] = Util.XPathSelectOne(
                    xml, player + '/@' + stat)

    return game