r/SideProject 的后续问题询问如何按新近度过滤 Reddit 需求信号。关于想要一个产品的旧帖子可能已经过时了——有人可能已经构建了它。本教程向需求扫描器添加了新近度过滤:仅显示最近 24 小时、7 天或 30 天的需求信号。
前置条件
- Scavio API 密钥
- Python 3.8+
操作指南
步骤 1: 搜索 Reddit 并按新排序
使用排序参数首先获取最近的帖子。
Python
import requests, os
from datetime import datetime, timedelta
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def search_reddit_recent(query, sort='new'):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=H,
json={'platform': 'reddit', 'query': query, 'sort': sort}).json()
return data.get('results', [])步骤 2: 按最近时间窗口过滤
将结果过滤到所需的时间窗口。
Python
def filter_by_recency(results, window='7d'):
windows = {'24h': 1, '7d': 7, '30d': 30}
days = windows.get(window, 7)
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
return recent步骤 3: 通过新近度加权对需求进行评分
最近的帖子权重更高。
Python
def score_with_recency(results):
scored = []
now = datetime.now()
for r in results:
base_score = r.get('upvotes', 0) + r.get('comments', 0) * 2
post_date = r.get('date', '')
if post_date:
try:
dt = datetime.fromisoformat(post_date.replace('Z', '+00:00'))
days_ago = (now - dt.replace(tzinfo=None)).days
recency_multiplier = max(0.1, 1.0 - (days_ago / 30))
r['demand_score'] = int(base_score * recency_multiplier)
except ValueError:
r['demand_score'] = base_score
scored.append(r)
return sorted(scored, key=lambda x: x.get('demand_score', 0), reverse=True)步骤 4: 生成新近度过滤报告
按时间窗口显示需求信号。
Python
def demand_report(idea, windows=['24h', '7d', '30d']):
results = search_reddit_recent(idea)
for window in windows:
filtered = filter_by_recency(results, window)
scored = score_with_recency(filtered)
print(f'\n--- {window} window ({len(filtered)} posts) ---')
for r in scored[:5]:
print(f' [{r.get("demand_score", 0)}] {r.get("title", "")}')
print(f' r/{r.get("subreddit", "")} | {r.get("upvotes", 0)} upvotes')
demand_report('invoice tool for freelancers')Python 示例
Python
import os, requests
from datetime import datetime, timedelta
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def recent_demand(idea, days=7):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'reddit', 'query': idea, 'sort': 'new'}).json()
cutoff = datetime.now() - timedelta(days=days)
recent = [r for r in data.get('results', []) if r.get('date', '') > cutoff.isoformat()]
print(f'{len(recent)} posts in last {days} days for "{idea}"')
return recentJavaScript 示例
JavaScript
const res = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
body: JSON.stringify({platform: 'reddit', query: idea, sort: 'new'})
});
const data = await res.json();
const cutoff = new Date(Date.now() - 7 * 86400000);
const recent = data.results?.filter(r => new Date(r.date) >= cutoff);预期输出
JSON
Reddit demand report with 24h/7d/30d windows. Each post has a recency-weighted demand score. Identifies fresh demand signals vs stale ones.