Files
abot/test/douyu_news.py
2026-01-30 14:57:53 +08:00

91 lines
3.2 KiB
Python
Raw Permalink 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.
import requests
import os
from datetime import datetime
class DouyuYubaMonitor:
def __init__(self, hash_id):
self.hash_id = hash_id
self.api_url = "https://yuba.douyu.com/wgapi/yubanc/api/feed/getUserFeedList"
self.record_file = f"last_processed_{hash_id}.txt"
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Referer": f"https://yuba.douyu.com/member/{hash_id}/main/news",
}
def get_last_id(self):
if os.path.exists(self.record_file):
with open(self.record_file, "r") as f:
return f.read().strip()
return None
def save_last_id(self, feed_id):
with open(self.record_file, "w") as f:
f.write(str(feed_id))
def fetch_and_process(self):
params = {
"filter_type": 1,
"hash_id": self.hash_id,
"limit": 10,
"offset": 0
}
try:
response = requests.get(self.api_url, headers=self.headers, params=params, timeout=10)
data = response.json()
if data.get("error") != 0:
print(f"API Error: {data.get('msg')}")
return
feed_list = data.get("data", {}).get("feed_list", [])
# 查找第一条【非置顶】动态
target_feed = None
for feed in feed_list:
if feed.get("home_feed_top") == 1:
continue
target_feed = feed
break
if not target_feed:
print("未发现有效动态(可能全是置顶)。")
return
feed_id = str(target_feed.get("feed_id"))
last_id = self.get_last_id()
# 标记检查
if feed_id == last_id:
print(f"[{datetime.now().strftime('%H:%M:%S')}] 监控中,暂无最新非置顶消息。")
return
# 提取参数拼接精准链接
# 根据你提供的样本origin 固定为 9, scode 可以从 publisher 逻辑或固定获取(通常 scode 是动态的,这里采用 feed 中的核心参数)
group_id = target_feed.get("group", {}).get("group_id", "0")
# 斗鱼 Web 端scode通常在分享链接中生成这里优先匹配你给出的格式
# 如果接口没直接给 scode可以根据业务需求固定或留空这里保留你给出的示例参数
full_url = f"https://yuba.douyu.com/feed/{feed_id}"
# 输出结果
print("\n" + "" * 50)
print(f"【提取到最新动态】")
print(f"发布时间: {datetime.fromtimestamp(int(target_feed.get('ctime'))).strftime('%Y-%m-%d %H:%M:%S')}")
print(f"正文内容: {target_feed.get('text', '')[:200]}")
print(f"精准链接: {full_url}")
print("" * 50 + "\n")
# 保存标记
self.save_last_id(feed_id)
except Exception as e:
print(f"运行异常: {e}")
if __name__ == "__main__":
# 使用你提供的 hash_id
monitor = DouyuYubaMonitor("PDAP2zEk3nwx")
monitor.fetch_and_process()