r/SideProject 帖子要求提供一个工具,可以使用新近度过滤器检查 Reddit 需求。本教程将该工具构建为 REST API:它包装了 Scavio 的 Reddit 端点,添加了可配置的新近度窗口(1d、7d、30d),并对需求强度进行评分。部署它,您就有了一个可重用的验证端点。
前置条件
- Scavio API 密钥
- Python 3.8+ 与 FastAPI
- 服务用 uvicorn
操作指南
步骤 1: 设置 FastAPI 项目
具有一个端点的最小 API。
Python
from fastapi import FastAPI, Query
from pydantic import BaseModel
from datetime import datetime, timedelta
import requests, os
app = FastAPI(title='Reddit Demand API')
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
class DemandResult(BaseModel):
query: str
window: str
post_count: int
demand_score: int
top_posts: list步骤 2: 构建需求端点
具有新近度过滤器参数的单个端点。
Python
@app.get('/demand', response_model=DemandResult)
async def check_demand(
query: str,
window: str = Query('7d', regex='^(1d|7d|30d)$')
):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=H,
json={'platform': 'reddit', 'query': query, 'sort': 'new'}).json()
results = data.get('results', [])
# Filter by recency
days = {'1d': 1, '7d': 7, '30d': 30}[window]
cutoff = datetime.now() - timedelta(days=days)
recent = []
for r in results:
post_date = r.get('date', '')
if post_date:
try:
dt = datetime.fromisoformat(post_date.replace('Z', '+00:00'))
if dt.replace(tzinfo=None) >= cutoff:
recent.append(r)
except ValueError:
continue
# Score demand
score = sum(r.get('upvotes', 0) + r.get('comments', 0) * 2 for r in recent)
return DemandResult(
query=query, window=window, post_count=len(recent),
demand_score=score,
top_posts=[{'title': r.get('title', ''), 'upvotes': r.get('upvotes', 0),
'subreddit': r.get('subreddit', ''), 'url': r.get('url', '')}
for r in recent[:10]])步骤 3: 添加批量验证端点
一次检查多个想法。
Python
@app.post('/demand/batch')
async def batch_demand(queries: list[str], window: str = '7d'):
results = []
for q in queries:
result = await check_demand(q, window)
results.append(result)
# Sort by demand score descending
results.sort(key=lambda x: x.demand_score, reverse=True)
return results步骤 4: 运行服务器
使用 uvicorn 启动 API。
Bash
# Install: pip install fastapi uvicorn requests
# Run: uvicorn demand_api:app --reload --port 8000
#
# Test: curl 'http://localhost:8000/demand?query=invoice+tool&window=7d'
#
# Cost: each demand check = 1 Scavio query = $0.005Python 示例
Python
# Full demand API server:
# pip install fastapi uvicorn requests
# uvicorn demand_api:app --port 8000
#
# GET /demand?query=crm+for+freelancers&window=7d
# POST /demand/batch with ["idea1", "idea2", "idea3"]
#
# Each check: 1 query = $0.005 via ScavioJavaScript 示例
JavaScript
// Call the demand API from JS:
const res = await fetch('http://localhost:8000/demand?query=invoice+tool&window=7d');
const data = await res.json();
console.log(`Demand score: ${data.demand_score}, Posts: ${data.post_count}`);预期输出
JSON
REST API at /demand with recency filtering (1d/7d/30d) and demand scoring. Batch endpoint for validating multiple ideas. Each query costs $0.005.