TradingAgents/docs/Reddit_API_Rate_Limit_Analy...

155 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Reddit API レート制限の分析と最適なデータ収集戦略
## 調査結果サマリー
### Reddit API の現在のレート制限2024年
1. **認証済みOAuthクライアント**: 100 queries per minute (QPM)
2. **非認証クライアント**: 10 QPM実質使用不可
3. **バッチサイズ**: 1リクエストで最大100アイテム取得可能
4. **レート計算方法**: 10分間の平均で計算バースト対応
5. **制限単位**: OAuth Client ID ごと(ユーザーごとではない)
### 重要な制約
- **1000件制限**: 各検索・リストで最大1000件までしか取得できない
- **過去データ制限**: 6ヶ月以上前の投稿は取得が困難
- **料金**: 無料枠を超えると $0.24 per 1,000 API calls
## データ収集量の最適化案
### 現実的なデータ収集設定
#### 1. 少量運用(推奨:初期導入・テスト用)
```
対象銘柄: 10銘柄
Global News: 各subreddit 50件/日 × 5 = 250件
Company News: 各銘柄 50件/日 × 10 = 500件
日次取得時間: 約1分
月次バックフィル30日: 約5分
```
#### 2. 中規模運用(推奨:通常運用)
```
対象銘柄: 50銘柄
Global News: 各subreddit 100件/日 × 5 = 500件
Company News: 各銘柄 50件/日 × 50 = 2,500件
日次取得時間: 約2分
月次バックフィル30日: 約21分
```
#### 3. 大規模運用S&P500等
```
対象銘柄: 500銘柄
Global News: 各subreddit 100件/日 × 5 = 500件
Company News: 各銘柄 20件/日 × 500 = 10,000件
日次取得時間: 約7分
月次バックフィル30日: 約3.5時間
```
## レート制限を考慮した実装戦略
### 1. リクエスト間隔の設定
```python
# 安全な設定
SAFE_REQUEST_INTERVAL = 0.75 # 秒80 requests/minute
# アグレッシブな設定(モニタリング必須)
AGGRESSIVE_REQUEST_INTERVAL = 0.6 # 秒100 requests/minute
# 推奨:段階的アプローチ
if total_requests < 100:
interval = 0.6 # 短時間なら高速
elif total_requests < 1000:
interval = 0.75 # 中規模は安全に
else:
interval = 1.0 # 大規模は慎重に
```
### 2. 効率的なデータ取得パターン
#### A. 日次更新(推奨)
```python
# 毎日深夜に前日分のデータを取得
# メリット: API負荷分散、安定運用
# デメリット: リアルタイム性なし
schedule.every().day.at("02:00").do(fetch_yesterday_data)
```
#### B. 複数回更新
```python
# 1日3回更新市場開始前、昼、終了後
# メリット: 準リアルタイム
# デメリット: API使用量3倍
schedule.every().day.at("08:00").do(fetch_recent_data)
schedule.every().day.at("13:00").do(fetch_recent_data)
schedule.every().day.at("17:00").do(fetch_recent_data)
```
#### C. 優先度ベース
```python
# 重要銘柄は頻繁に、その他は日次
HIGH_PRIORITY = ["AAPL", "MSFT", "NVDA", "TSLA"]
fetch_interval = {
"high": 4, # 4時間ごと
"medium": 12, # 12時間ごと
"low": 24 # 24時間ごと
}
```
### 3. エラーハンドリングとレート制限対策
```python
class RedditRateLimiter:
def __init__(self):
self.request_times = deque(maxlen=100)
self.minute_window = 60
def wait_if_needed(self):
now = time.time()
# 直近100リクエストをチェック
if len(self.request_times) == 100:
oldest = self.request_times[0]
if now - oldest < self.minute_window:
sleep_time = self.minute_window - (now - oldest) + 1
time.sleep(sleep_time)
self.request_times.append(now)
```
## 推奨構成
### 初期導入時
1. **対象**: TOP 10銘柄 + Global News
2. **頻度**: 日次更新深夜2時
3. **データ量**: 各50-100件/日
4. **所要時間**: 約1-2分/日
5. **月間API使用量**: 約1,650 calls
### 本番運用時
1. **対象**: 50銘柄 + Global News
2. **頻度**:
- 重要10銘柄: 6時間ごと
- その他40銘柄: 日次
3. **データ量**:
- 重要銘柄: 100件/回
- その他: 50件/日
4. **所要時間**: 約10分/日(分散実行)
5. **月間API使用量**: 約15,000 calls
### スケーラビリティ考慮事項
- 500銘柄以上は複数のClient IDを使用検討
- 時間帯分散(米国市場時間外を活用)
- キャッシュ活用でAPI呼び出し削減
- 増分更新(新規投稿のみ取得)
## まとめ
Reddit APIのレート制限100 QPMを考慮すると、中規模運用50銘柄程度が最もバランスが良い。データ収集量は各投稿50-100件/日が現実的で、これにより:
- 十分な市場センチメント把握が可能
- API制限内で安定運用
- 日次更新が数分で完了
- 月次バックフィルも30分以内
大規模運用500銘柄以上の場合は、優先度設定や時間分散などの工夫が必要。