斗鱼鱼吧订阅功能
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user