Skip to content

BALLFiN/DataCollector

Repository files navigation

๐Ÿ“ˆ ์ฃผ์‹ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘๊ธฐ

๐ŸŽฏ ์ฃผ์š” ํŠน์ง•

  • โœ… MongoDB BarbellAI.Stock์— ์ €์žฅ
  • โœ… ์˜์—…์ผ ๊ธฐ์ค€ ์ •ํ™•ํ•œ ๊ฒฐ์ธก ๋ฐ์ดํ„ฐ ์ฒดํฌ
  • โœ… ์„ค์ • ๊ฐ€๋Šฅํ•œ ์ฒดํฌ ๊ธฐ๊ฐ„

๐Ÿš€ ์„ค์น˜ ๋ฐฉ๋ฒ•

1. ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜

pip install requests pymongo pandas schedule python-dotenv

2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— .env ํŒŒ์ผ ์ƒ์„ฑ:

APP_KEY=์‹ค์ œ_๋ฐœ๊ธ‰๋ฐ›์€_API_ํ‚ค
APP_SECRET=์‹ค์ œ_๋ฐœ๊ธ‰๋ฐ›์€_API_์‹œํฌ๋ฆฟ
MONGO_URI=mongodb://localhost:27017/

3. MongoDB ์‹คํ–‰

# MongoDB ์‹คํ–‰ (Windows)
mongod

# MongoDB ์‹คํ–‰ (macOS/Linux)
sudo systemctl start mongod

๐Ÿ“Š ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

๐ŸŽฎ 1. ๋Œ€ํ™”ํ˜• ์‹คํ–‰ (์ถ”์ฒœ)

python simple_collector.py

๋ฉ”๋‰ด ์„ ํƒ:

  • 1: ์ดˆ๊ธฐ ์„ค์ • (์ฒ˜์Œ ํ•œ ๋ฒˆ๋งŒ)
  • 2: ์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘
  • 3: ๊ฒฐ์ธก ๋ฐ์ดํ„ฐ ํ™•์ธ
  • 4: ๊ฒฐ์ธก ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ
  • 5: ๋ฐ์ดํ„ฐ ํ˜„ํ™ฉ ๋ณด๊ธฐ
  • 6: ์„ค์ • ๋ณด๊ธฐ

โšก 2. ๋ช…๋ น์–ด ์‹คํ–‰

python manual_tools.py setup      # ์ดˆ๊ธฐ ์„ค์ •
python manual_tools.py collect    # ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘
python manual_tools.py check      # ๊ฒฐ์ธก ํ™•์ธ
python manual_tools.py fix        # ๊ฒฐ์ธก ๋ณต๊ตฌ
python manual_tools.py status     # ํ˜„ํ™ฉ ๋ณด๊ธฐ
python manual_tools.py settings   # ์„ค์ • ๋ณด๊ธฐ

๐Ÿค– 3. ์ž๋™ ์Šค์ผ€์ค„๋Ÿฌ

python run_scheduler.py

์ž๋™ ์‹คํ–‰:

  • ๋งค์ผ 09:15 โ†’ ์ผ๋ด‰ ์ˆ˜์ง‘
  • ๋งค์ฃผ ์›”์š”์ผ 09:15 โ†’ ์ฃผ๋ด‰ ์ˆ˜์ง‘
  • ๋งค์›” 1์ผ 09:15 โ†’ ์›”๋ด‰ ์ˆ˜์ง‘
  • ๋งค์ผ 18:00 โ†’ ๊ฒฐ์ธก ๋ณต๊ตฌ

๐Ÿ’พ ๋ฐ์ดํ„ฐ ์ €์žฅ ์œ„์น˜

MongoDB ๊ฒฝ๋กœ:

localhost:27017
โ”œโ”€โ”€ BarbellAI (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)
    โ””โ”€โ”€ Stock (์ปฌ๋ ‰์…˜)
        โ”œโ”€โ”€ {stock_code: "005930", period: "D", date: "2025-01-15", ...}
        โ”œโ”€โ”€ {stock_code: "005930", period: "W", date: "2025-01-13", ...}
        โ””โ”€โ”€ {stock_code: "005930", period: "M", date: "2025-01-01", ...}

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ:

{
  "_id": ObjectId("..."),
  "stock_code": "005930",
  "date": ISODate("2025-01-15T00:00:00Z"),
  "period": "D",  // D: ์ผ๋ด‰, W: ์ฃผ๋ด‰, M: ์›”๋ด‰
  "open": 61000,
  "high": 62500,
  "low": 60800,
  "close": 62300,
  "volume": 15234567,
  "created_at": ISODate("2025-01-15T10:30:00Z")
}

โš™๏ธ ์„ค์ • ํŒŒ์ผ (์„ ํƒ์‚ฌํ•ญ)

config.py ํŒŒ์ผ ์ƒ์„ฑํ•˜๋ฉด ๋” ์„ธ๋ถ€ ์„ค์ • ๊ฐ€๋Šฅ:

# ์ˆ˜์ง‘ํ•  ์ข…๋ชฉ ๋ฆฌ์ŠคํŠธ
STOCK_LIST = [
    "005930",  # ์‚ผ์„ฑ์ „์ž
    "000660",  # SKํ•˜์ด๋‹‰์Šค
    # ... ์ถ”๊ฐ€ ์ข…๋ชฉ
]

# ๊ฒฐ์ธก ์ฒดํฌ ๊ธฐ๊ฐ„ (์ผ ๋‹จ์œ„)
MISSING_CHECK_DAYS = {
    "D": 90,   # ์ผ๋ด‰: ์ตœ๊ทผ 90์ผ
    "W": 365,  # ์ฃผ๋ด‰: ์ตœ๊ทผ 365์ผ
    "M": 730   # ์›”๋ด‰: ์ตœ๊ทผ 730์ผ
}

# ์ดˆ๊ธฐ ์ˆ˜์ง‘๋Ÿ‰
INITIAL_DATA_COUNT = {
    "D": 200,  # ์ผ๋ด‰: ๊ณผ๊ฑฐ 200์ผ
    "W": 100,  # ์ฃผ๋ด‰: ๊ณผ๊ฑฐ 100์ฃผ
    "M": 60    # ์›”๋ด‰: ๊ณผ๊ฑฐ 60๊ฐœ์›”
}

๐Ÿ“‹ ์™„์ „ํ•œ ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค

๐ŸŒŸ ์‹œ๋‚˜๋ฆฌ์˜ค 1: ์ฒ˜์Œ ์‹œ์ž‘

# 1. .env ํŒŒ์ผ ์ƒ์„ฑ (API ํ‚ค ์„ค์ •)
# 2. MongoDB ์‹คํ–‰
mongod

# 3. ์ดˆ๊ธฐ ์„ค์ • (ํ•œ ๋ฒˆ๋งŒ)
python simple_collector.py
# ๋ฉ”๋‰ด 1๋ฒˆ ์„ ํƒ โ†’ ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ ๋Œ€๋Ÿ‰ ์ˆ˜์ง‘

# 4. ์ž๋™ํ™” ์‹œ์ž‘
python run_scheduler.py
# โ†’ ์ดํ›„ ์ž๋™์œผ๋กœ ๋งค์ผ/๋งค์ฃผ/๋งค์›” ์ˆ˜์ง‘

๐Ÿ”ง ์‹œ๋‚˜๋ฆฌ์˜ค 2: ์„œ๋ฒ„ ์žฅ์•  ํ›„ ๋ณต๊ตฌ

# 1. ๊ฒฐ์ธก ํ™•์ธ
python manual_tools.py check

# 2. ๋ณต๊ตฌ ์‹คํ–‰
python manual_tools.py fix

# 3. ๊ฒฐ๊ณผ ํ™•์ธ
python manual_tools.py status

๐Ÿ“Š ์‹œ๋‚˜๋ฆฌ์˜ค 3: MongoDB์—์„œ ๋ฐ์ดํ„ฐ ํ™•์ธ

// MongoDB ์‰˜ ์ ‘์†
mongosh

// ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ
use BarbellAI

// ์ปฌ๋ ‰์…˜ ํ™•์ธ
show collections

// ์‚ผ์„ฑ์ „์ž ์ตœ๊ทผ ์ผ๋ด‰ 5๊ฐœ ์กฐํšŒ
db.Stock.find({stock_code: "005930", period: "D"}).sort({date: -1}).limit(5)

// ์ „์ฒด ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ ํ™•์ธ
db.Stock.countDocuments({})

๐Ÿ”ง ๋ฌธ์ œ ํ•ด๊ฒฐ

โŒ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜

  1. "APP_KEY์™€ APP_SECRET์„ .env ํŒŒ์ผ์— ์„ค์ •ํ•ด์ฃผ์„ธ์š”!"

    • .env ํŒŒ์ผ์ด ์—†๊ฑฐ๋‚˜ API ํ‚ค๊ฐ€ ์ž˜๋ชป๋จ
    • ํ•ด๊ฒฐ: .env ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ณ  ์ •ํ™•ํ•œ API ํ‚ค ์ž…๋ ฅ
  2. "MongoDB ์—ฐ๊ฒฐ ์‹คํŒจ"

    • MongoDB๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์Œ
    • ํ•ด๊ฒฐ: mongod ๋ช…๋ น์œผ๋กœ MongoDB ์‹คํ–‰
  3. "ํ† ํฐ ํš๋“ ์‹คํŒจ"

    • API ํ‚ค๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ
    • ํ•ด๊ฒฐ: ํ•œ๊ตญํˆฌ์ž์ฆ๊ถŒ์—์„œ API ํ‚ค ์žฌํ™•์ธ
  4. "๋ฐ์ดํ„ฐ ์กฐํšŒ ์‹คํŒจ"

    • API ํ˜ธ์ถœ ํ•œ๋„ ์ดˆ๊ณผ ๋˜๋Š” ์žฅ ์šด์˜ ์‹œ๊ฐ„ ์™ธ
    • ํ•ด๊ฒฐ: ์‹œ๊ฐ„์„ ๋‘๊ณ  ๋‹ค์‹œ ์‹œ๋„

๐Ÿ’ก ์„ฑ๋Šฅ ์ตœ์ ํ™”

  1. ๋น ๋ฅธ ์ฒดํฌ: config.py์—์„œ MISSING_CHECK_DAYS ๊ฐ’ ์ค„์ด๊ธฐ
  2. ์ „์ฒด ์ฒดํฌ: ๊ฐ’ ๋Š˜๋ ค์„œ ์™„์ „ํ•œ ๋ฌด๊ฒฐ์„ฑ ํ™•์ธ
  3. API ํ•œ๋„ ๊ด€๋ฆฌ: time.sleep() ๊ฐ’ ์กฐ์ ˆ

๐Ÿ“ ํŒŒ์ผ ๊ตฌ์กฐ

ํ”„๋กœ์ ํŠธ/
โ”œโ”€โ”€ .env                    # API ํ‚ค ์„ค์ • (ํ•„์ˆ˜)
โ”œโ”€โ”€ simple_collector.py     # ๋ฉ”์ธ ์ˆ˜์ง‘๊ธฐ (ํ•„์ˆ˜)
โ”œโ”€โ”€ manual_tools.py         # ๋ช…๋ น์–ด ๋„๊ตฌ (์„ ํƒ)
โ”œโ”€โ”€ simple_scheduler.py     # ์Šค์ผ€์ค„๋Ÿฌ (์„ ํƒ)
โ”œโ”€โ”€ run_scheduler.py        # ์Šค์ผ€์ค„๋Ÿฌ ์‹คํ–‰ (์„ ํƒ)
โ”œโ”€โ”€ config.py              # ์„ธ๋ถ€ ์„ค์ • (์„ ํƒ)
โ”œโ”€โ”€ requirements.txt       # ํŒจํ‚ค์ง€ ๋ชฉ๋ก
โ”œโ”€โ”€ scheduler.log          # ์Šค์ผ€์ค„๋Ÿฌ ๋กœ๊ทธ
โ””โ”€โ”€ README.md             # ์‚ฌ์šฉ ์„ค๋ช…์„œ

ํ•„์ˆ˜ ํŒŒ์ผ: .env, simple_collector.py ์„ ํƒ ํŒŒ์ผ: ๋‚˜๋จธ์ง€ (์—†์–ด๋„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋™์ž‘)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors