feat: add fetch_news.py script to aggregate news from HN, Reddit, and GitHub

Co-authored-by: aider (deepseek/deepseek-chat) <aider@aider.chat>
This commit is contained in:
john
2026-06-20 08:15:48 +08:00
parent c4de6716f1
commit 2e5afe3bfd
+81
View File
@@ -0,0 +1,81 @@
#!/usr/bin/env python3
"""Quick news fetcher - single file, no deps needed."""
import json
import urllib.request
import ssl
import sys
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
H = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"}
def get(url):
try:
req = urllib.request.Request(url, headers=H)
with urllib.request.urlopen(req, timeout=15, context=ctx) as r:
return r.read().decode("utf-8", errors="replace")
except Exception as e:
return None
def getj(url):
d = get(url)
return json.loads(d) if d else None
def show_results():
out = []
out.append("=" * 65)
out.append(" 🔥 今 日 热 点 新 闻 — 2026年6月20日 (周六)")
out.append("=" * 65)
# 1. Hacker News
hn = getj("https://hacker-news.firebaseio.com/v0/topstories.json")
if hn:
out.append("\n 🌍 Hacker News (科技)")
out.append(" " + "" * 60)
for i, sid in enumerate(hn[:10], 1):
item = getj(f"https://hacker-news.firebaseio.com/v0/item/{sid}.json")
if item:
t = item.get("title", "")
s = item.get("score", 0)
if t:
out.append(f" {i:2d}. {t[:75]} (👍{s})")
# 2. Reddit worldnews
rd = get("https://www.reddit.com/r/worldnews/hot/.json?limit=8")
if rd:
try:
data = json.loads(rd)
out.append("\n 📰 Reddit /r/worldnews (国际新闻)")
out.append(" " + "" * 60)
for i, c in enumerate(data["data"]["children"][:8], 1):
p = c["data"]
t = p.get("title", "")
s = p.get("score", 0)
if t:
out.append(f" {i:2d}. {t[:75]} (👍{s})")
except:
pass
# 3. GitHub
gh = getj("https://api.github.com/search/repositories?q=stars:>100000&sort=stars&order=desc&per_page=10")
if gh:
out.append("\n ⭐ GitHub 超级热门开源项目")
out.append(" " + "" * 60)
for i, r in enumerate(gh.get("items", []), 1):
n = r.get("full_name", "")
s = r.get("stargazers_count", 0)
d = (r.get("description") or "")[:60]
out.append(f" {i:2d}. {n} (⭐{s})")
if d:
out.append(f" {d}")
out.append("\n" + "=" * 65)
out.append(" 数据来源: Hacker News API / Reddit / GitHub API")
out.append("=" * 65)
print("\n".join(out))
if __name__ == "__main__":
show_results()