feat: add social media sentiment endpoints
- /stock/{symbol}/social-sentiment -- Finnhub Reddit+Twitter sentiment
(requires premium, gracefully degrades)
- /stock/{symbol}/reddit-sentiment -- Reddit WSB/stocks/investing
mentions, upvotes, rank via ApeWisdom (free, no key)
- /discover/reddit-trending -- Top 25 trending stocks on Reddit
(free, no key)
ApeWisdom provides real-time Reddit data without API key.
Finnhub social-sentiment requires premium plan but endpoint
responds gracefully with premium_required flag.
This commit is contained in:
@@ -101,3 +101,33 @@ async def stock_upgrades(symbol: str = Path(..., min_length=1, max_length=20)):
|
||||
symbol = validate_symbol(symbol)
|
||||
data = await openbb_service.get_upgrades_downgrades(symbol)
|
||||
return ApiResponse(data=data)
|
||||
|
||||
|
||||
@router.get("/stock/{symbol}/social-sentiment", response_model=ApiResponse)
|
||||
@safe
|
||||
async def stock_social_sentiment(
|
||||
symbol: str = Path(..., min_length=1, max_length=20),
|
||||
):
|
||||
"""Social media sentiment from Reddit and Twitter (Finnhub)."""
|
||||
symbol = validate_symbol(symbol)
|
||||
data = await finnhub_service.get_social_sentiment(symbol)
|
||||
return ApiResponse(data=data)
|
||||
|
||||
|
||||
@router.get("/stock/{symbol}/reddit-sentiment", response_model=ApiResponse)
|
||||
@safe
|
||||
async def stock_reddit_sentiment(
|
||||
symbol: str = Path(..., min_length=1, max_length=20),
|
||||
):
|
||||
"""Reddit sentiment: mentions, upvotes, rank on WSB/stocks/investing (free, no key)."""
|
||||
symbol = validate_symbol(symbol)
|
||||
data = await finnhub_service.get_reddit_sentiment(symbol)
|
||||
return ApiResponse(data=data)
|
||||
|
||||
|
||||
@router.get("/discover/reddit-trending", response_model=ApiResponse)
|
||||
@safe
|
||||
async def reddit_trending():
|
||||
"""Top 25 trending stocks on Reddit (WSB, r/stocks, r/investing). Free, no key."""
|
||||
data = await finnhub_service.get_reddit_trending()
|
||||
return ApiResponse(data=data)
|
||||
|
||||
Reference in New Issue
Block a user