Check if today is holiday for stock business date
This commit is contained in:
@@ -128,7 +128,7 @@ extension Domestic {
|
||||
public typealias KResult = HolidyResult
|
||||
|
||||
public var url: String { "/uapi/domestic-stock/v1/quotations/chk-holiday" }
|
||||
public var method: Method { .post }
|
||||
public var method: Method { .get }
|
||||
|
||||
public var header: [String: String?] {
|
||||
[
|
||||
@@ -142,8 +142,8 @@ extension Domestic {
|
||||
public var body: [String: Any] {
|
||||
[
|
||||
"BASS_DT": baseDate,
|
||||
"CTX_AREA_NK": String(repeating: " ", count: 20),
|
||||
"CTX_AREA_FK": String(repeating: " ", count: 20),
|
||||
"CTX_AREA_NK": " ",
|
||||
"CTX_AREA_FK": " ",
|
||||
]
|
||||
}
|
||||
public var result: KResult? = nil
|
||||
|
||||
@@ -153,6 +153,14 @@ public struct HolidyResult: Codable {
|
||||
case output = "output"
|
||||
}
|
||||
|
||||
public func isHoliday(_ date: Date) -> Bool {
|
||||
let dateString = Date().yyyyMMdd
|
||||
guard let target = output?.first(where: { $0.baseDate == dateString }) else {
|
||||
return false
|
||||
}
|
||||
return target.businessDayOpened != .yes
|
||||
}
|
||||
|
||||
public struct OutputDetail: Codable {
|
||||
/// 기준일자
|
||||
public let baseDate: String
|
||||
|
||||
@@ -68,6 +68,7 @@ extension Date {
|
||||
components.hour = hour
|
||||
components.minute = min
|
||||
components.second = sec
|
||||
components.nanosecond = 0
|
||||
return Calendar.current.date(from: components)
|
||||
}
|
||||
|
||||
|
||||
@@ -158,6 +158,15 @@ extension KissConsole {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func checkHoliday(_ date: Date) async throws -> Bool {
|
||||
guard await KissContext.shared.targetDate.yyyyMMdd != date.yyyyMMdd else {
|
||||
return await KissContext.shared.isHoliday
|
||||
}
|
||||
let isHoliday = try await account!.getHolyday(baseDate: date).isHoliday(date)
|
||||
await KissContext.shared.updateHoliday(isHoliday, targetDate: date)
|
||||
return isHoliday
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -578,6 +578,12 @@ extension KissConsole {
|
||||
for item in all {
|
||||
let semaphore = DispatchSemaphore(value: 0)
|
||||
Task {
|
||||
let holiday = try? await checkHoliday(Date())
|
||||
if holiday == true {
|
||||
print("DONE today is holiday")
|
||||
return
|
||||
}
|
||||
|
||||
let success = await getCandle(productNo: item.shortCode)
|
||||
print("DONE \(success) \(item.shortCode)")
|
||||
semaphore.signal()
|
||||
@@ -614,6 +620,12 @@ extension KissConsole {
|
||||
for item in all {
|
||||
let semaphore = DispatchSemaphore(value: 0)
|
||||
Task {
|
||||
let holiday = try? await checkHoliday(Date())
|
||||
if holiday == true {
|
||||
print("DONE today is holiday")
|
||||
return
|
||||
}
|
||||
|
||||
let success = await getRecentCandle(productNo: item.shortCode, period: .daily, count: 250)
|
||||
print("DONE \(success) \(item.shortCode)")
|
||||
semaphore.signal()
|
||||
@@ -655,6 +667,12 @@ extension KissConsole {
|
||||
for item in all {
|
||||
let semaphore = DispatchSemaphore(value: 0)
|
||||
Task {
|
||||
let holiday = try? await checkHoliday(Date())
|
||||
if holiday == true {
|
||||
print("DONE today is holiday")
|
||||
return
|
||||
}
|
||||
|
||||
let success = await getRecentCandle(productNo: item.shortCode, period: .weekly, count: 52)
|
||||
print("DONE \(success) \(item.shortCode)")
|
||||
semaphore.signal()
|
||||
|
||||
23
KissMeConsole/Sources/KissContext.swift
Normal file
23
KissMeConsole/Sources/KissContext.swift
Normal file
@@ -0,0 +1,23 @@
|
||||
//
|
||||
// KissContext.swift
|
||||
// KissMeConsole
|
||||
//
|
||||
// Created by ened-book-m1 on 2023/06/07.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
|
||||
actor KissContext {
|
||||
static let shared = KissContext()
|
||||
|
||||
private(set) var targetDate: Date = Date(timeIntervalSince1970: 0)
|
||||
private(set) var isHoliday: Bool = false
|
||||
|
||||
private init() { }
|
||||
|
||||
func updateHoliday(_ isHolyday: Bool, targetDate: Date) {
|
||||
self.isHoliday = isHolyday
|
||||
self.targetDate = targetDate
|
||||
}
|
||||
}
|
||||
2
bin/data
2
bin/data
Submodule bin/data updated: 01238b796d...d58e84860b
@@ -10,6 +10,7 @@
|
||||
341F5ED42A0A8B9000962D48 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 341F5ED32A0A8B9000962D48 /* main.swift */; };
|
||||
341F5F052A13B82F00962D48 /* test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 341F5F042A13B82F00962D48 /* test.swift */; };
|
||||
341F5F092A1463A100962D48 /* KissConsole.swift in Sources */ = {isa = PBXBuildFile; fileRef = 341F5F082A1463A100962D48 /* KissConsole.swift */; };
|
||||
348168492A2F92AC00A50BD3 /* KissContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 348168482A2F92AC00A50BD3 /* KissContext.swift */; };
|
||||
349327F72A20E3E300097063 /* Foundation+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 349327F62A20E3E300097063 /* Foundation+Extensions.swift */; };
|
||||
349843212A242AC900E85B08 /* KissConsole+CSV.swift in Sources */ = {isa = PBXBuildFile; fileRef = 349843202A242AC900E85B08 /* KissConsole+CSV.swift */; };
|
||||
34D3680D2A280801005E6756 /* KissConsole+Candle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D3680C2A280801005E6756 /* KissConsole+Candle.swift */; };
|
||||
@@ -46,6 +47,7 @@
|
||||
341F5EDB2A0A8C4600962D48 /* KissMe.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = KissMe.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
341F5F042A13B82F00962D48 /* test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = test.swift; sourceTree = "<group>"; };
|
||||
341F5F082A1463A100962D48 /* KissConsole.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KissConsole.swift; sourceTree = "<group>"; };
|
||||
348168482A2F92AC00A50BD3 /* KissContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KissContext.swift; sourceTree = "<group>"; };
|
||||
349327F62A20E3E300097063 /* Foundation+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Foundation+Extensions.swift"; sourceTree = "<group>"; };
|
||||
3498431E2A24287600E85B08 /* KissMeConsoleTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KissMeConsoleTests.swift; sourceTree = "<group>"; };
|
||||
349843202A242AC900E85B08 /* KissConsole+CSV.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KissConsole+CSV.swift"; sourceTree = "<group>"; };
|
||||
@@ -87,6 +89,7 @@
|
||||
children = (
|
||||
341F5ED32A0A8B9000962D48 /* main.swift */,
|
||||
341F5F042A13B82F00962D48 /* test.swift */,
|
||||
348168482A2F92AC00A50BD3 /* KissContext.swift */,
|
||||
341F5F082A1463A100962D48 /* KissConsole.swift */,
|
||||
34D3680C2A280801005E6756 /* KissConsole+Candle.swift */,
|
||||
349843202A242AC900E85B08 /* KissConsole+CSV.swift */,
|
||||
@@ -178,6 +181,7 @@
|
||||
341F5F092A1463A100962D48 /* KissConsole.swift in Sources */,
|
||||
341F5F052A13B82F00962D48 /* test.swift in Sources */,
|
||||
349843212A242AC900E85B08 /* KissConsole+CSV.swift in Sources */,
|
||||
348168492A2F92AC00A50BD3 /* KissContext.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user