Implement "top all" command
This commit is contained in:
@@ -18,6 +18,9 @@ let PreferredNowTPS: UInt64 = 10
|
||||
/// Limit to request a short query
|
||||
let PreferredShortsTPS: UInt64 = 5
|
||||
|
||||
/// Limit to request a top query
|
||||
let PreferredTopTPS: UInt64 = 5
|
||||
|
||||
/// How many seconds does 1 day have?
|
||||
let SecondsForOneDay: TimeInterval = 60 * 60 * 24
|
||||
|
||||
@@ -162,7 +165,7 @@ extension KissConsole {
|
||||
print("wrote \(fileUrl.lastPathComponent) with \(candles.count)")
|
||||
return true
|
||||
} catch {
|
||||
print("\(error)")
|
||||
print(error)
|
||||
return false
|
||||
}
|
||||
}
|
||||
@@ -185,7 +188,7 @@ extension KissConsole {
|
||||
|
||||
let result = try await account!.getHolyday(baseDate: day)
|
||||
do {
|
||||
var olds = try [HolidyResult.OutputDetail].readCsv(fromFile: KissConsole.holidayUrl)
|
||||
let olds = try [HolidyResult.OutputDetail].readCsv(fromFile: KissConsole.holidayUrl)
|
||||
if let output = result.output {
|
||||
/// Merge current holidays and new holidays
|
||||
var recents = output.map { $0 }
|
||||
|
||||
@@ -38,6 +38,7 @@ class KissConsole {
|
||||
|
||||
// 랭킹
|
||||
case top = "top"
|
||||
case topAll = "top all"
|
||||
|
||||
// 매매
|
||||
case buy = "buy"
|
||||
@@ -91,7 +92,7 @@ class KissConsole {
|
||||
switch self {
|
||||
case .quit, .loginMock, .loginReal:
|
||||
return false
|
||||
case .logout, .top, .buy, .buyCheck, .sell, .cancel, .modify:
|
||||
case .logout, .top, .topAll, .buy, .buyCheck, .sell, .cancel, .modify:
|
||||
return true
|
||||
case .openBag:
|
||||
return true
|
||||
@@ -206,6 +207,7 @@ class KissConsole {
|
||||
case .loginReal: await onLogin(isMock: false)
|
||||
case .logout: await onLogout()
|
||||
case .top: await onTop(args)
|
||||
case .topAll: onTopAll()
|
||||
|
||||
case .buy: await onBuy(args)
|
||||
case .buyCheck: await onBuyCheck(args)
|
||||
@@ -323,7 +325,7 @@ extension KissConsole {
|
||||
print("resume \(isMock ? "mock login": "real login") expired at \(expiredAt)")
|
||||
}
|
||||
} catch {
|
||||
print("\(error)")
|
||||
print(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -357,7 +359,7 @@ extension KissConsole {
|
||||
print("Success")
|
||||
}
|
||||
} catch {
|
||||
print("\(error)")
|
||||
print(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -369,7 +371,7 @@ extension KissConsole {
|
||||
account = nil
|
||||
print("Success")
|
||||
} catch {
|
||||
print("\(error)")
|
||||
print(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -402,11 +404,41 @@ extension KissConsole {
|
||||
try output.writeCsv(toFile: fileUrl, localized: localized)
|
||||
print("wrote \(fileUrl.lastPathComponent) with \(output.count)")
|
||||
} catch {
|
||||
print("\(error)")
|
||||
print(error)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private func onTopAll() {
|
||||
let belongs: [BelongClassCode] = [.averageVolume, .volumeIncreaseRate, .averageVolumeTurnoverRate, .transactionValue, .averageTransactionValueTurnoverRate]
|
||||
|
||||
for belong in belongs {
|
||||
let option = RankingOption(divisionClass: .all, belongClass: belong)
|
||||
let semaphore = DispatchSemaphore(value: 0)
|
||||
Task {
|
||||
do {
|
||||
let curDate = Date()
|
||||
let rank = try await account!.getVolumeRanking(option: option)
|
||||
guard let output = rank.output else {
|
||||
print("Error \(rank.messageCode) \(rank.message)")
|
||||
return
|
||||
}
|
||||
|
||||
let fileUrl = KissConsole.topProductsUrl(belong, date: curDate)
|
||||
try output.writeCsv(toFile: fileUrl, localized: localized)
|
||||
print("wrote \(fileUrl.lastPathComponent) with \(output.count)")
|
||||
try await Task.sleep(nanoseconds: 1_000_000_000 / PreferredTopTPS)
|
||||
} catch {
|
||||
print(error)
|
||||
}
|
||||
semaphore.signal()
|
||||
}
|
||||
semaphore.wait()
|
||||
}
|
||||
print("FINISHED")
|
||||
}
|
||||
|
||||
|
||||
private func onBuy(_ args: [String]) async {
|
||||
guard args.count == 3 else {
|
||||
print("Missing buy paramters: buy (PNO) (PRICE) (QUANTITY)")
|
||||
@@ -440,7 +472,7 @@ extension KissConsole {
|
||||
print("Failed \(result.resultCode) \(result.messageCode) \(result.message)")
|
||||
}
|
||||
} catch {
|
||||
print("\(error)")
|
||||
print(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -469,7 +501,7 @@ extension KissConsole {
|
||||
print("Failed \(result.resultCode) \(result.messageCode) \(result.message)")
|
||||
}
|
||||
} catch {
|
||||
print("\(error)")
|
||||
print(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -507,7 +539,7 @@ extension KissConsole {
|
||||
print("Failed \(result.resultCode) \(result.messageCode) \(result.message)")
|
||||
}
|
||||
} catch {
|
||||
print("\(error)")
|
||||
print(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -544,7 +576,7 @@ extension KissConsole {
|
||||
print("Failed \(result.resultCode) \(result.messageCode) \(result.message)")
|
||||
}
|
||||
} catch {
|
||||
print("\(error)")
|
||||
print(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -576,7 +608,7 @@ extension KissConsole {
|
||||
print("wrote \(fileUrl.lastPathComponent) with \(amounts.count)")
|
||||
}
|
||||
} catch {
|
||||
print("\(error)")
|
||||
print(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -915,7 +947,7 @@ extension KissConsole {
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
print("\(error)")
|
||||
print(error)
|
||||
}
|
||||
return shopItems
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ private func test_login_get_volume_ranking() async {
|
||||
///
|
||||
credential = try KissCredential(isMock: isMock)
|
||||
} catch {
|
||||
print("\(error)")
|
||||
print(error)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ private func test_login_get_volume_ranking() async {
|
||||
print("\(result)")
|
||||
}
|
||||
} catch {
|
||||
print("\(error)")
|
||||
print(error)
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -62,7 +62,7 @@ private func test_json_result() {
|
||||
print("\(result)")
|
||||
}
|
||||
catch {
|
||||
print("\(error)")
|
||||
print(error)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
2
bin/data
2
bin/data
Submodule bin/data updated: 239afe4f22...1117afa184
Reference in New Issue
Block a user