From 9ac9a080b5ef846fb75a17200bfaeb0d17862ada Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 27 Jul 2022 10:34:23 +0200 Subject: [PATCH] Update for 2022 --- TournamentStats/AppDelegate.swift | 16 +- .../UI/reports/InfographyView.swift | 28 +- TournamentStats/UI/reports/InfographyView.xib | 202 ++++++++------- TournamentStats/core/Formatters.swift | 7 + TournamentStats/realm/Model.swift | 9 +- TournamentStats/report/Queries.swift | 50 +++- TournamentStats/report/ReportGenerator.swift | 6 + .../report/structures/CumulatedResults.swift | 41 ++- .../structures/TournamentRepresentable.swift | 19 +- .../report/structures/TournamentWinner.swift | 9 +- TournamentStats/scrapper/Downloader.swift | 239 ++++++++++-------- TournamentStats/utils/Game.swift | 4 +- 12 files changed, 341 insertions(+), 289 deletions(-) diff --git a/TournamentStats/AppDelegate.swift b/TournamentStats/AppDelegate.swift index 48b5586..c4c90e4 100644 --- a/TournamentStats/AppDelegate.swift +++ b/TournamentStats/AppDelegate.swift @@ -17,13 +17,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDele func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - for fontFamilyName in UIFont.familyNames { - print("family: \(fontFamilyName)\n") - - for fontName in UIFont.fontNames(forFamilyName: fontFamilyName) { - print("font: \(fontName)") - } - } +// for fontFamilyName in UIFont.familyNames { +// print("family: \(fontFamilyName)\n") +// +// for fontName in UIFont.fontNames(forFamilyName: fontFamilyName) { +// print("font: \(fontName)") +// } +// } // UI stuff let splitViewController = window!.rootViewController as! UISplitViewController @@ -43,7 +43,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDele // try! realm.write { // realm.deleteAll() // } - +// // Downloader.downloadWSOPResults() let generator = ReportGenerator() diff --git a/TournamentStats/UI/reports/InfographyView.swift b/TournamentStats/UI/reports/InfographyView.swift index 03de646..b82201f 100644 --- a/TournamentStats/UI/reports/InfographyView.swift +++ b/TournamentStats/UI/reports/InfographyView.swift @@ -57,6 +57,9 @@ class InfographyView: UIView { @IBOutlet weak var mostTableView: TableView! @IBOutlet weak var mostTableView2: TableView! + @IBOutlet weak var most10kCashTableView: TableView! + @IBOutlet weak var biggest10kWinnersTableView: TableView! + @IBOutlet weak var hStack2a: UIStackView! @IBOutlet weak var label21: UILabel! @IBOutlet weak var label22: UILabel! @@ -79,15 +82,12 @@ class InfographyView: UIView { @IBOutlet weak var hStack4a: UIStackView! @IBOutlet weak var label41: UILabel! - @IBOutlet weak var label42: UILabel! @IBOutlet weak var hStack4b: UIStackView! @IBOutlet weak var container41: UIView! - @IBOutlet weak var container42: UIView! @IBOutlet weak var hStack5a: UIStackView! @IBOutlet weak var label51: UILabel! - @IBOutlet weak var labelTableSize: Label! @IBOutlet weak var hStack5b: UIStackView! @IBOutlet weak var collectionView51: UICollectionView! @@ -109,7 +109,7 @@ class InfographyView: UIView { return } - self.infographyTitle.text = "2021 World Series of Poker" + self.infographyTitle.text = "2022 World Series of Poker" self.infographyTitle.textColor = Fonts.color self.infographyTitle.font = Fonts.mainTitle @@ -125,6 +125,12 @@ class InfographyView: UIView { self.mostTableView2.setHeader(header: "Most final tables") self.mostTableView2.setData(data: generator.finalTables, maxRows: 10) + self.most10kCashTableView.setHeader(header: "Most cashes for 10k+ buy-ins") + self.most10kCashTableView.setData(data: generator.mostCashesIn10KPlus, maxRows: 5) + + self.biggest10kWinnersTableView.setHeader(header: "Biggest winners for 10k+ buy-in") + self.biggest10kWinnersTableView.setData(data: generator.biggest10KPlusWinners, maxRows: 5) + ///// self.tableView11.setData(data: generator.biggestWinners) @@ -158,11 +164,12 @@ class InfographyView: UIView { self.tableView31.setData(data: generator.tourniesByPrizepool, maxRows: 5) self.tableView32.setHeader(header: "Events by entries") self.tableView32.setData(data: generator.tourniesByEntries, maxRows: 5) + self.tableView33.setHeader(header: "10k championship winners") + self.tableView33.setData(data: generator.championshipWinners, maxRows: Int.max) ///// self.label41.text = "USA vs. World bracelets" - self.label42.text = "Games distribution" let USABraceletsDistribBarChart = BarChart(frame: barChartFrame) USABraceletsDistribBarChart.data = generator.USAvsWorldWins.barChartData @@ -173,8 +180,6 @@ class InfographyView: UIView { let holdemDistributionBarChart = BarChart(frame: barChartFrame) holdemDistributionBarChart.data = generator.gamesDistribution.barChartData holdemDistributionBarChart.setXAxisLabels(generator.gamesDistribution.labels) - self.container42.addSubview(holdemDistributionBarChart) - self.container42.addMaxConstraints(view: holdemDistributionBarChart) self.label51.text = "Average event" let ds: TournamentStats? = generator.averageEvent.first @@ -182,11 +187,10 @@ class InfographyView: UIView { self.collectionView51.dataSource = ds self.collectionView51.delegate = ds - self.labelTableSize.text = "No-Limit Hold'em table sizes" - let tableSizeDistributionBarChart = BarChart(frame: barChartFrame) - tableSizeDistributionBarChart.data = generator.tableSizeDistribution.barChartData - tableSizeDistributionBarChart.setXAxisLabels(generator.tableSizeDistribution.labels) - self.containerTableSize.addSubview(tableSizeDistributionBarChart) +// let tableSizeDistributionBarChart = BarChart(frame: barChartFrame) +// tableSizeDistributionBarChart.data = generator.tableSizeDistribution.barChartData +// tableSizeDistributionBarChart.setXAxisLabels(generator.tableSizeDistribution.labels) +// self.containerTableSize.addSubview(tableSizeDistributionBarChart) } } diff --git a/TournamentStats/UI/reports/InfographyView.xib b/TournamentStats/UI/reports/InfographyView.xib index 4173669..9705f52 100644 --- a/TournamentStats/UI/reports/InfographyView.xib +++ b/TournamentStats/UI/reports/InfographyView.xib @@ -1,9 +1,9 @@ - + - + @@ -12,23 +12,49 @@ - + - + - + - + @@ -36,7 +62,7 @@ - + @@ -63,7 +89,7 @@ - + @@ -71,31 +97,31 @@ - + - + - + - + - - - + + + - + - + @@ -111,15 +137,39 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -163,7 +213,7 @@ - + @@ -171,7 +221,7 @@ - + @@ -183,7 +233,7 @@ - + @@ -191,7 +241,7 @@ - + @@ -202,8 +252,28 @@ + + + + + + + + + + + + + + + + + + + + - + @@ -211,7 +281,7 @@ - + @@ -231,52 +301,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + @@ -301,52 +327,37 @@ - + - - - - + - - - - - + @@ -354,6 +365,7 @@ + diff --git a/TournamentStats/core/Formatters.swift b/TournamentStats/core/Formatters.swift index bc14c32..92c01a4 100644 --- a/TournamentStats/core/Formatters.swift +++ b/TournamentStats/core/Formatters.swift @@ -91,6 +91,13 @@ class Formatter { return formatter } + static var longDate: DateFormatter { + let formatter = DateFormatter() + formatter.dateStyle = .full + formatter.timeStyle = .none + return formatter + } + static var fileDate: DateFormatter { let formatter = DateFormatter() formatter.dateFormat = "yyyy_MM_dd" diff --git a/TournamentStats/realm/Model.swift b/TournamentStats/realm/Model.swift index e8b57e7..e005a0b 100644 --- a/TournamentStats/realm/Model.swift +++ b/TournamentStats/realm/Model.swift @@ -19,6 +19,8 @@ class Festival : Object, Named { class Tournament : Object, Named { + private let mainEventNumber = 70 + @objc dynamic var date: Date = Date() @objc dynamic var number: Int = 0 @objc dynamic var buyin: Int = 0 @@ -31,9 +33,10 @@ class Tournament : Object, Named { static var defaultColumns: [Columns] = [.rank, .player, .earnings, .poy, .city, .state, .country] + // NOT USED WITH SCRAPPING var rows: [Columns] { switch self.number { - case 1, 10, 32, 39, 47, 53, 57, 81, 87: return [.rank, .player, .earnings, .city, .state, .country] + case 1, 47, 59, 61, 81, 87: return [.rank, .player, .earnings, .city, .state, .country] default: return Tournament.defaultColumns } } @@ -43,6 +46,10 @@ class Tournament : Object, Named { // return "\(self.buyin.currencyFormatted) \(self.name) (#\(self.number))" } + var isMainEvent: Bool { + return self.number == mainEventNumber + } + } class Player : Object, Named { diff --git a/TournamentStats/report/Queries.swift b/TournamentStats/report/Queries.swift index 1c08ef2..cf955bd 100644 --- a/TournamentStats/report/Queries.swift +++ b/TournamentStats/report/Queries.swift @@ -39,6 +39,20 @@ class Queries { }) } + static func biggestWinnersAt10k(realm: Realm) -> [CumulatedResults] { + + let players = realm.objects(Player.self) + var crArray: [CumulatedResults] = [] + + for player in players { + crArray.append(CumulatedResults(player: player, options: [.moreThan10KNotMainEvent])) + } + + return crArray.sorted(by: { (cr1, cr2) -> Bool in + return cr1.total > cr2.total + }) + } + static func averageCash(realm: Realm, minCount: Int) -> BestAverageCash { let players = realm.objects(Player.self).filter(NSPredicate(format: "results.@count >= %i", minCount)) @@ -54,7 +68,7 @@ class Queries { return BestAverageCash(minimumCashes: minCount, results: results) } - static func mostCashes(realm: Realm, notable: Bool = false) -> [CumulatedResults] { + static func mostCashes(realm: Realm, notable: Bool = false, moreThan10k: Bool = false) -> [CumulatedResults] { var players = realm.objects(Player.self) if (notable) { @@ -63,7 +77,13 @@ class Queries { var crArray: [CumulatedResults] = [] for player in players { - crArray.append(CumulatedResults(player: player, options: [.countSorted])) + + var options: [CumulatedResults.Options] = [.countSorted] + if moreThan10k { + options.append(.moreThan10KNotMainEvent) + } + + crArray.append(CumulatedResults(player: player, options: options)) } return crArray.sorted(by: { (cr1, cr2) -> Bool in @@ -90,15 +110,16 @@ class Queries { }) } - static func allWinnersSortedByEvent(realm: Realm, date: Date? = nil) -> [TournamentWinner] { + static func allWinnersSortedByEvent(realm: Realm, date: Date? = nil, championship: Bool = false) -> [TournamentWinner] { let winners: Results if let day = date { winners = realm.objects(Result.self).filter("rank == 1 && ANY tournaments.date IN %@", [day]) + } else if championship { + winners = realm.objects(Result.self).filter("rank == 1 && ANY tournaments.name CONTAINS 'Championship' && ANY tournaments.buyin == 10000") } else { winners = realm.objects(Result.self).filter("rank == 1") } -// winners = realm.objects(Result.self).filter("rank == 1") var tws: [TournamentWinner] = [] @@ -107,8 +128,14 @@ class Queries { tws.append(tw) } - tws.sort { (tw1, tw2) -> Bool in - tw1.tournament.number < tw2.tournament.number + if championship { + tws.sort { (tw1, tw2) -> Bool in + tw1.result.earnings > tw2.result.earnings + } + } else { + tws.sort { (tw1, tw2) -> Bool in + tw1.tournament.number < tw2.tournament.number + } } return tws @@ -281,20 +308,17 @@ class Queries { let tournaments: Results = realm.objects(Tournament.self) - let noLimitHoldem = DistributionCounter(name: Game.holdem.label) - let potLimitOmaha = DistributionCounter(name: Game.omaha.label) + let holdem = DistributionCounter(name: Game.holdem.label) +// let potLimitOmaha = DistributionCounter(name: Game.omaha.label) let not = DistributionCounter(name: "Others") - let games: [DistributionCounter] = [noLimitHoldem, potLimitOmaha, not] + let games: [DistributionCounter] = [holdem, not] tournaments.forEach { tournament in if tournament.name.contains(Game.holdem.rawValue) { - noLimitHoldem.increment() - } else if tournament.name.contains(Game.omaha.rawValue) { - potLimitOmaha.increment() + holdem.increment() } else { not.increment() } - } return games } diff --git a/TournamentStats/report/ReportGenerator.swift b/TournamentStats/report/ReportGenerator.swift index d32413d..3dbd66b 100644 --- a/TournamentStats/report/ReportGenerator.swift +++ b/TournamentStats/report/ReportGenerator.swift @@ -55,8 +55,10 @@ class ReportGenerator { var festivalStats: FestivalStats = FestivalStats() var biggestWinners: [CumulatedResults] = [] + var biggest10KPlusWinners: [CumulatedResults] = [] var mostWins: [CumulatedWins] = [] var mostCashes: [CumulatedResults] = [] + var mostCashesIn10KPlus: [CumulatedResults] = [] var tournamentWinners: [TournamentWinner] = [] var tourniesByEntries: [TournamentRepresentable] = [] var tourniesByPrizepool: [TournamentRepresentable] = [] @@ -73,6 +75,7 @@ class ReportGenerator { var rankings1: PlayerNotableFinishesDataSource = PlayerNotableFinishesDataSource(notableFinishes: []) var finalTables: [CumulatedResults] = [] var tableSizeDistribution: [DistributionCounter] = [] + var championshipWinners: [TournamentWinner] = [] func generateReports() { @@ -82,9 +85,12 @@ class ReportGenerator { self.festivalStats = Queries.festivalStats(realm: realm) self.biggestWinners = Queries.biggestWinners(realm: realm) + self.biggest10KPlusWinners = Queries.biggestWinnersAt10k(realm: realm) self.mostWins = Queries.mostWins(realm: realm) self.mostCashes = Queries.mostCashes(realm: realm) + self.mostCashesIn10KPlus = Queries.mostCashes(realm: realm, moreThan10k: true) self.tournamentWinners = Queries.allWinnersSortedByEvent(realm: realm) + self.championshipWinners = Queries.allWinnersSortedByEvent(realm: realm, championship: true) self.tourniesByEntries = Queries.sortedEvents(realm: realm, fieldName: "entries", ascending: false) self.tourniesByPrizepool = Queries.sortedEvents(realm: realm, fieldName: "prizepool", ascending: false) self.winsByCountry = Queries.winsByCountry(realm: realm) diff --git a/TournamentStats/report/structures/CumulatedResults.swift b/TournamentStats/report/structures/CumulatedResults.swift index 675f070..f6eb89c 100644 --- a/TournamentStats/report/structures/CumulatedResults.swift +++ b/TournamentStats/report/structures/CumulatedResults.swift @@ -21,11 +21,11 @@ class CumulatedResults : HTMLRepresentable, ColumnRepresentable { case average case countSorted case finalTables + case moreThan10KNotMainEvent } let player: Player var options: [Options] = [] - // var average: Bool = false var finalTables: Bool = false var total: Double = 0.0 @@ -46,10 +46,23 @@ class CumulatedResults : HTMLRepresentable, ColumnRepresentable { init(player: Player, options: [Options] = []) { self.player = player self.options = options - // self.average = average for result in player.results { - self.add(result: result) + + guard let tournament = result.tournaments.first else { + continue + } + + let tournamentBuyin: Int = tournament.buyin + + if self.options.contains(.moreThan10KNotMainEvent) { + if tournamentBuyin >= 10000 && !tournament.isMainEvent { + self.add(result: result) + } + } else { + self.add(result: result) + } + } if self.options.contains(.average) { self.total = self.total / Double(self.numberOfCashes) @@ -57,7 +70,7 @@ class CumulatedResults : HTMLRepresentable, ColumnRepresentable { } private func add(result: Result) { - if result.tournaments.first?.number == 67 && result.rank < 10 { + if result.tournaments.first?.isMainEvent == true && result.rank < 10 { self.mainEventFinalist = true } @@ -99,24 +112,4 @@ class CumulatedResults : HTMLRepresentable, ColumnRepresentable { } } - // func htmlHeaders() -> String { - // var strings: [String] = [] - // strings.append("Name") - //// strings.append("Places (Year)") - // strings.append("Total Earnings") - // strings.append("Cashes") - // let all = strings.joined(separator: "") - // return "\(all)" - // } - // - // func html() -> String { - // var strings: [String] = [] - // strings.append(self.player.formattedName) - //// strings.append(self.results.map { "\($0.rank.rankFormatted) (\($0.tournaments.first?.date.year ?? ""))" }.joined(separator: ", ")) - // strings.append(self.total.currencyFormatted) - // strings.append("\(self.numberOfCashes)") - // let all = strings.joined(separator: "") - // return "\(all)" - // } - } diff --git a/TournamentStats/report/structures/TournamentRepresentable.swift b/TournamentStats/report/structures/TournamentRepresentable.swift index a3aa02d..e7579ec 100644 --- a/TournamentStats/report/structures/TournamentRepresentable.swift +++ b/TournamentStats/report/structures/TournamentRepresentable.swift @@ -13,7 +13,7 @@ struct TournamentRepresentable : HTMLRepresentable { var tournament: Tournament func columnDescriptors() -> [ColumnDescriptor] { - return [ColumnDescriptor(header: "#", number: true, widthWeight: 0.2), + return [ ColumnDescriptor(header: "Buy-in", number: true, widthWeight: 0.4), ColumnDescriptor(header: "Event", number: false, widthWeight: 2.6), ColumnDescriptor(header: "Prizepool", number: true, widthWeight: 1.0), @@ -22,7 +22,6 @@ struct TournamentRepresentable : HTMLRepresentable { func cellValues() -> [String] { return [ - "\(tournament.number)", tournament.buyin.currencyFormatted, tournament.name, tournament.prizepool.currencyFormatted, @@ -32,8 +31,6 @@ struct TournamentRepresentable : HTMLRepresentable { func htmlHeaders() -> String { var strings: [String] = [] -// strings.append("Date") - strings.append("#") strings.append("Buy-in") strings.append("Event") strings.append("Prizepool") @@ -41,17 +38,5 @@ struct TournamentRepresentable : HTMLRepresentable { let all = strings.joined(separator: "") return "\(all)" } - -// func html() -> String { -// var strings: [String] = [] -//// strings.append(tournament.date.year) -// strings.append("\(tournament.number)") -// strings.append(tournament.buyin.currencyFormatted) -// strings.append(tournament.name) -// strings.append(tournament.prizepool.currencyFormatted) -// strings.append("\(tournament.entries)") -// let all = strings.joined(separator: "") -// return "\(all)" -// } - + } diff --git a/TournamentStats/report/structures/TournamentWinner.swift b/TournamentStats/report/structures/TournamentWinner.swift index 10cc8fc..7df542b 100644 --- a/TournamentStats/report/structures/TournamentWinner.swift +++ b/TournamentStats/report/structures/TournamentWinner.swift @@ -14,15 +14,15 @@ struct TournamentWinner : HTMLRepresentable { var result: Result func columnDescriptors() -> [ColumnDescriptor] { - return [ColumnDescriptor(header: "#", number: true, widthWeight: 0.2), - ColumnDescriptor(header: "Buy-in", number: true, widthWeight: 1.0), - ColumnDescriptor(header: "Event", number: false, widthWeight: 1.0), + return [ + ColumnDescriptor(header: "Buy-in", number: true, widthWeight: 0.5), + ColumnDescriptor(header: "Event", number: false, widthWeight: 3.0), ColumnDescriptor(header: "Player", number: false, widthWeight: 1.0), ColumnDescriptor(header: "Prize", number: true, widthWeight: 1.0)] } func cellValues() -> [String] { - return ["\(tournament.number)", + return [ tournament.buyin.currencyFormatted, tournament.name, result.player?.formattedName ?? "", @@ -32,7 +32,6 @@ struct TournamentWinner : HTMLRepresentable { func htmlHeaders() -> String { var header = "" - header.append("#") header.append("Buy-in") header.append("Event") header.append("Player") diff --git a/TournamentStats/scrapper/Downloader.swift b/TournamentStats/scrapper/Downloader.swift index 816af7f..cf1b7cd 100644 --- a/TournamentStats/scrapper/Downloader.swift +++ b/TournamentStats/scrapper/Downloader.swift @@ -18,111 +18,115 @@ class Downloader { static func downloadWSOPResults() { - let infos: [TS] = [ - TS(id: "19728", date: "02/10/2021"), - TS(id: "19729", date: "03/10/2021"), - TS(id: "19730", date: "02/10/2021"), - TS(id: "19732", date: "04/10/2021"), - TS(id: "19733", date: "05/10/2021"), - TS(id: "19731", date: "06/10/2021"), - TS(id: "19734", date: "06/10/2021"), - TS(id: "19926", date: "06/10/2021"), - TS(id: "19927", date: "06/10/2021"), - TS(id: "19737", date: "06/10/2021"), - TS(id: "19735", date: "07/10/2021"), - TS(id: "19736", date: "08/10/2021"), - TS(id: "19738", date: "08/10/2021"), - TS(id: "19739", date: "08/10/2021"), - TS(id: "19740", date: "09/10/2021"), - TS(id: "19741", date: "09/10/2021"), - TS(id: "19928", date: "10/10/2021"), - TS(id: "19742", date: "11/10/2021"), - TS(id: "19743", date: "11/10/2021"), - TS(id: "19745", date: "12/10/2021"), - TS(id: "19747", date: "12/10/2021"), - TS(id: "19748", date: "12/10/2021"), - TS(id: "19749", date: "13/10/2021"), - TS(id: "19744", date: "14/10/2021"), - TS(id: "19751", date: "14/10/2021"), - TS(id: "19752", date: "14/10/2021"), - TS(id: "19750", date: "15/10/2021"), - TS(id: "19754", date: "15/10/2021"), - TS(id: "19753", date: "16/10/2021"), - TS(id: "19755", date: "16/10/2021"), - TS(id: "19756", date: "17/10/2021"), - TS(id: "19757", date: "17/10/2021"), - TS(id: "19759", date: "17/10/2021"), - TS(id: "19929", date: "17/10/2021"), - TS(id: "19761", date: "19/10/2021"), - TS(id: "19762", date: "19/10/2021"), - TS(id: "19758", date: "20/10/2021"), - TS(id: "19763", date: "20/10/2021"), - TS(id: "19764", date: "20/10/2021"), - TS(id: "19765", date: "21/10/2021"), - TS(id: "19766", date: "21/10/2021"), - TS(id: "19767", date: "22/10/2021"), - TS(id: "19768", date: "23/10/2021"), - TS(id: "19769", date: "24/10/2021"), - TS(id: "19770", date: "24/10/2021"), - TS(id: "19771", date: "24/10/2021"), - TS(id: "19930", date: "24/10/2021"), - TS(id: "19832", date: "25/10/2021"), - TS(id: "19774", date: "26/10/2021"), - TS(id: "19772", date: "27/10/2021"), - TS(id: "19773", date: "27/10/2021"), - TS(id: "19775", date: "27/10/2021"), - TS(id: "19776", date: "28/10/2021"), - TS(id: "19778", date: "28/10/2021"), - TS(id: "19779", date: "28/10/2021"), - TS(id: "19780", date: "28/10/2021"), - TS(id: "19782", date: "31/10/2021"), - TS(id: "19784", date: "31/10/2021"), - TS(id: "19931", date: "31/10/2021"), - TS(id: "19781", date: "01/11/2021"), - TS(id: "19786", date: "01/11/2021"), - TS(id: "19785", date: "02/11/2021"), - TS(id: "19788", date: "02/11/2021"), - TS(id: "19789", date: "03/11/2021"), - TS(id: "19790", date: "03/11/2021"), - TS(id: "19792", date: "04/11/2021"), - TS(id: "19793", date: "04/11/2021"), - TS(id: "19795", date: "04/11/2021"), - TS(id: "19794", date: "05/11/2021"), - TS(id: "19791", date: "06/11/2021"), - TS(id: "19796", date: "06/11/2021"), - TS(id: "19797", date: "06/11/2021"), - TS(id: "19805", date: "13/11/2021"), - TS(id: "19802", date: "14/11/2021"), - TS(id: "19807", date: "14/11/2021"), - TS(id: "19809", date: "15/11/2021"), - TS(id: "19811", date: "15/11/2021"), - TS(id: "19933", date: "16/11/2021"), - TS(id: "19934", date: "16/11/2021"), - TS(id: "19808", date: "17/11/2021"), - TS(id: "19813", date: "17/11/2021"), - TS(id: "19815", date: "17/11/2021"), - TS(id: "19798", date: "18/11/2021"), - TS(id: "19814", date: "18/11/2021"), - TS(id: "19816", date: "18/11/2021"), - TS(id: "19817", date: "20/11/2021"), - TS(id: "19818", date: "20/11/2021"), - TS(id: "19819", date: "20/11/2021"), - TS(id: "19820", date: "20/11/2021"), - TS(id: "19821", date: "21/11/2021"), - TS(id: "19822", date: "21/11/2021"), - TS(id: "19823", date: "21/11/2021"), - TS(id: "19827", date: "21/11/2021"), - TS(id: "19828", date: "22/11/2021"), - TS(id: "19829", date: "22/11/2021"), - TS(id: "19936", date: "22/11/2021"), - TS(id: "19935", date: "22/11/2021"), - TS(id: "19830", date: "22/11/2021"), + let ids = ["20342", "20387", "20301", "20607", "20327", "20599", "20305", "20358", "20320", "20313", "20339", "20598", "20329", "20383", "20350", "20328", "20334", "20368", "20375", "20374", "20325", "20370", "20343", "20344", "20600", "20323", "20309", "20379", "20384", "20337", "20373", "20605", "20318", "20601", "20340", "20330", "20314", "20352", "20603", "20304", "20324", "20386", "20315", "20341", "20322", "20604", "20354", "20382", "20363", "20377", "20359", "20366", "20331", "20336", "20376", "20606", "20345", "20346", "20385", "20311", "20312", "20303", "20308", "20326", "20378", "20356", "20602", "20371", "20369", "20357", "20361", "20608", "20319", "20347", "20306", "20310", "20609", "20367", "20351", "20349", "20321", "20348", "20355", "20333", "20360", "20389", "20372", "20338", "20353", "20364", "20317", "20335", "20307", "20332", "20610", "20316", "20381", "20388", "20302", "20380", "20362", "20365"] - ] + + +// let infos: [TS] = [ +// TS(id: "19728", date: "02/10/2021"), +// TS(id: "19729", date: "03/10/2021"), +// TS(id: "19730", date: "02/10/2021"), +// TS(id: "19732", date: "04/10/2021"), +// TS(id: "19733", date: "05/10/2021"), +// TS(id: "19731", date: "06/10/2021"), +// TS(id: "19734", date: "06/10/2021"), +// TS(id: "19926", date: "06/10/2021"), +// TS(id: "19927", date: "06/10/2021"), +// TS(id: "19737", date: "06/10/2021"), +// TS(id: "19735", date: "07/10/2021"), +// TS(id: "19736", date: "08/10/2021"), +// TS(id: "19738", date: "08/10/2021"), +// TS(id: "19739", date: "08/10/2021"), +// TS(id: "19740", date: "09/10/2021"), +// TS(id: "19741", date: "09/10/2021"), +// TS(id: "19928", date: "10/10/2021"), +// TS(id: "19742", date: "11/10/2021"), +// TS(id: "19743", date: "11/10/2021"), +// TS(id: "19745", date: "12/10/2021"), +// TS(id: "19747", date: "12/10/2021"), +// TS(id: "19748", date: "12/10/2021"), +// TS(id: "19749", date: "13/10/2021"), +// TS(id: "19744", date: "14/10/2021"), +// TS(id: "19751", date: "14/10/2021"), +// TS(id: "19752", date: "14/10/2021"), +// TS(id: "19750", date: "15/10/2021"), +// TS(id: "19754", date: "15/10/2021"), +// TS(id: "19753", date: "16/10/2021"), +// TS(id: "19755", date: "16/10/2021"), +// TS(id: "19756", date: "17/10/2021"), +// TS(id: "19757", date: "17/10/2021"), +// TS(id: "19759", date: "17/10/2021"), +// TS(id: "19929", date: "17/10/2021"), +// TS(id: "19761", date: "19/10/2021"), +// TS(id: "19762", date: "19/10/2021"), +// TS(id: "19758", date: "20/10/2021"), +// TS(id: "19763", date: "20/10/2021"), +// TS(id: "19764", date: "20/10/2021"), +// TS(id: "19765", date: "21/10/2021"), +// TS(id: "19766", date: "21/10/2021"), +// TS(id: "19767", date: "22/10/2021"), +// TS(id: "19768", date: "23/10/2021"), +// TS(id: "19769", date: "24/10/2021"), +// TS(id: "19770", date: "24/10/2021"), +// TS(id: "19771", date: "24/10/2021"), +// TS(id: "19930", date: "24/10/2021"), +// TS(id: "19832", date: "25/10/2021"), +// TS(id: "19774", date: "26/10/2021"), +// TS(id: "19772", date: "27/10/2021"), +// TS(id: "19773", date: "27/10/2021"), +// TS(id: "19775", date: "27/10/2021"), +// TS(id: "19776", date: "28/10/2021"), +// TS(id: "19778", date: "28/10/2021"), +// TS(id: "19779", date: "28/10/2021"), +// TS(id: "19780", date: "28/10/2021"), +// TS(id: "19782", date: "31/10/2021"), +// TS(id: "19784", date: "31/10/2021"), +// TS(id: "19931", date: "31/10/2021"), +// TS(id: "19781", date: "01/11/2021"), +// TS(id: "19786", date: "01/11/2021"), +// TS(id: "19785", date: "02/11/2021"), +// TS(id: "19788", date: "02/11/2021"), +// TS(id: "19789", date: "03/11/2021"), +// TS(id: "19790", date: "03/11/2021"), +// TS(id: "19792", date: "04/11/2021"), +// TS(id: "19793", date: "04/11/2021"), +// TS(id: "19795", date: "04/11/2021"), +// TS(id: "19794", date: "05/11/2021"), +// TS(id: "19791", date: "06/11/2021"), +// TS(id: "19796", date: "06/11/2021"), +// TS(id: "19797", date: "06/11/2021"), +// TS(id: "19805", date: "13/11/2021"), +// TS(id: "19802", date: "14/11/2021"), +// TS(id: "19807", date: "14/11/2021"), +// TS(id: "19809", date: "15/11/2021"), +// TS(id: "19811", date: "15/11/2021"), +// TS(id: "19933", date: "16/11/2021"), +// TS(id: "19934", date: "16/11/2021"), +// TS(id: "19808", date: "17/11/2021"), +// TS(id: "19813", date: "17/11/2021"), +// TS(id: "19815", date: "17/11/2021"), +// TS(id: "19798", date: "18/11/2021"), +// TS(id: "19814", date: "18/11/2021"), +// TS(id: "19816", date: "18/11/2021"), +// TS(id: "19817", date: "20/11/2021"), +// TS(id: "19818", date: "20/11/2021"), +// TS(id: "19819", date: "20/11/2021"), +// TS(id: "19820", date: "20/11/2021"), +// TS(id: "19821", date: "21/11/2021"), +// TS(id: "19822", date: "21/11/2021"), +// TS(id: "19823", date: "21/11/2021"), +// TS(id: "19827", date: "21/11/2021"), +// TS(id: "19828", date: "22/11/2021"), +// TS(id: "19829", date: "22/11/2021"), +// TS(id: "19936", date: "22/11/2021"), +// TS(id: "19935", date: "22/11/2021"), +// TS(id: "19830", date: "22/11/2021"), +// +// ] - for info in infos { + for id in ids { sleep(1) - downloadWSOPResults(tournamentInfo: info) + downloadWSOPResults(id: id) } // for i in 19728...19732 { @@ -135,17 +139,16 @@ class Downloader { } - fileprivate static func downloadWSOPResults(tournamentInfo: TS) { + fileprivate static func downloadWSOPResults(id: String) { - print("Importing tournament \(tournamentInfo.id)") - - guard let url = URL(string: "https://www.wsop.com/tournaments/results/?aid=2&grid=4865&tid=\(tournamentInfo.id)&rr=5") else { + print("Importing tournament \(id)") + guard let url = URL(string: "https://www.wsop.com/tournaments/results/?aid=2&grid=4943&tid=\(id)&rr=5") else { return } let realm = try! Realm() do { try realm.write { - self.downloadWSOPResults(url: url, date: tournamentInfo.date) + self.downloadWSOPResults(url: url) } } catch { print("error = \(error)") @@ -153,7 +156,7 @@ class Downloader { } - fileprivate static func downloadWSOPResults(url: URL, date: String, currentTournament: Tournament? = nil) { + fileprivate static func downloadWSOPResults(url: URL, currentTournament: Tournament? = nil) { let realm = try! Realm() @@ -177,20 +180,32 @@ class Downloader { let tour = realm.create(Tournament.self) tournament = tour + //

Sunday, July 17, 2022 to Sunday, July 17, 2022

if let name = infos.slice(from: "

", to: "

") { tour.name = name - tour.date = Formatter.basicDate.date(from: date) ?? Date() + let fullDatesString = infos.slice(from: "

", to: "

") + let fullDates = fullDatesString?.components(separatedBy: " to ") + + if let endString = fullDates?.last, let end = Formatter.longDate.date(from: endString) { + tour.date = end + } else { + print("Using now for date") + tour.date = Date() + } + if let strNumber = name.slice(from: "Event #", to: ":"), let number = nf.number(from: strNumber) { tour.number = number.intValue } print("#\(tour.number) \(name)") - + if name.contains("6-Handed") { tour.tableSize = 6 + } else if name.contains("7-Handed") { + tour.tableSize = 7 } else if name.contains("8-Handed") { tour.tableSize = 8 - } else if name.contains("Heads-Up") { + } else if name.contains("Heads-Up") || name.contains("Heads Up") { tour.tableSize = 2 } @@ -302,7 +317,7 @@ class Downloader { let components = pages[i].components(separatedBy: "'") if let urlString = components.first, let url = URL(string: "https://www.wsop.com\(urlString)") { - self.downloadWSOPResults(url: url, date: date, currentTournament: tournament) + self.downloadWSOPResults(url: url, currentTournament: tournament) } } } diff --git a/TournamentStats/utils/Game.swift b/TournamentStats/utils/Game.swift index 8731041..b3b4844 100644 --- a/TournamentStats/utils/Game.swift +++ b/TournamentStats/utils/Game.swift @@ -9,12 +9,12 @@ import Foundation enum Game : String { - case holdem = "No-Limit Hold'em" + case holdem = "Hold'em" case omaha = "Pot-Limit Omaha" var label: String { switch self { - case .holdem: return "NL Hold'em" + case .holdem: return "Hold'em" case .omaha: return "PL Omaha" } }