chanfasf commited on
Commit
40002fc
·
1 Parent(s): d5bab4d

Fix: prioritize real API data over demo data on startup

Browse files
Files changed (1) hide show
  1. backend/app/main.py +48 -7
backend/app/main.py CHANGED
@@ -1,4 +1,5 @@
1
  import os
 
2
  from contextlib import asynccontextmanager
3
  from pathlib import Path
4
 
@@ -18,6 +19,8 @@ from app.api.tasks import router as tasks_router
18
  from app.api.ai import router as ai_router
19
  from app.scheduler.jobs import run_scheduled_crawl
20
 
 
 
21
  Base.metadata.create_all(bind=engine)
22
 
23
  scheduler = BackgroundScheduler()
@@ -45,13 +48,51 @@ def _auto_seed_if_empty():
45
  try:
46
  count = db.query(Video).count()
47
  if count == 0:
48
- from app.demo.seed import generate_demo_data
49
- from app.analyzers.viral import ViralAnalyzer
50
- from app.analyzers.revenue import RevenueAnalyzer
51
- n = generate_demo_data(db)
52
- if n > 0:
53
- ViralAnalyzer(db).calculate_viral_scores()
54
- RevenueAnalyzer(db).batch_estimate_revenue()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  except Exception:
56
  pass
57
  finally:
 
1
  import os
2
+ import logging
3
  from contextlib import asynccontextmanager
4
  from pathlib import Path
5
 
 
19
  from app.api.ai import router as ai_router
20
  from app.scheduler.jobs import run_scheduled_crawl
21
 
22
+ logger = logging.getLogger(__name__)
23
+
24
  Base.metadata.create_all(bind=engine)
25
 
26
  scheduler = BackgroundScheduler()
 
48
  try:
49
  count = db.query(Video).count()
50
  if count == 0:
51
+ seeded = False
52
+
53
+ if settings.YOUTUBE_API_ENABLED:
54
+ try:
55
+ from app.crawlers.youtube import YouTubeCrawler
56
+ from app.analyzers.viral import ViralAnalyzer
57
+ from app.analyzers.revenue import RevenueAnalyzer
58
+
59
+ crawler = YouTubeCrawler()
60
+ videos = crawler.get_trending_videos(region_code="US", max_results=50)
61
+ if videos:
62
+ crawler.save_videos_to_db(videos, db)
63
+ ViralAnalyzer(db).calculate_viral_scores()
64
+ RevenueAnalyzer(db).batch_estimate_revenue()
65
+ seeded = True
66
+ logger.info(f"使用 YouTube API 获取了 {len(videos)} 条真实数据")
67
+ except Exception as e:
68
+ logger.warning(f"YouTube API 获取失败: {e}")
69
+
70
+ if settings.TIKHUB_ENABLED and not seeded:
71
+ try:
72
+ from app.crawlers.tiktok import TikTokCrawler
73
+ from app.analyzers.viral import ViralAnalyzer
74
+ from app.analyzers.revenue import RevenueAnalyzer
75
+
76
+ crawler = TikTokCrawler(tikhub_api_key=settings.TIKHUB_API_KEY)
77
+ videos = crawler.get_trending_videos(count=50)
78
+ if videos:
79
+ crawler.save_videos_to_db(videos, db)
80
+ ViralAnalyzer(db).calculate_viral_scores()
81
+ RevenueAnalyzer(db).batch_estimate_revenue()
82
+ seeded = True
83
+ logger.info(f"使用 TikHub API 获取了 {len(videos)} 条真实数据")
84
+ except Exception as e:
85
+ logger.warning(f"TikHub API 获取失败: {e}")
86
+
87
+ if not seeded:
88
+ from app.demo.seed import generate_demo_data
89
+ from app.analyzers.viral import ViralAnalyzer
90
+ from app.analyzers.revenue import RevenueAnalyzer
91
+ n = generate_demo_data(db)
92
+ if n > 0:
93
+ ViralAnalyzer(db).calculate_viral_scores()
94
+ RevenueAnalyzer(db).batch_estimate_revenue()
95
+ logger.info(f"使用演示数据: {n} 条")
96
  except Exception:
97
  pass
98
  finally: