用ai写了个emby清除播放记录的python程序

有很多播放记录,看着很烦,又不想手动删除,就用ai写了个清除的脚本 脚本如下 import requests import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') EMBY_UR...
用ai写了个emby清除播放记录的python程序
用ai写了个emby清除播放记录的python程序

有很多播放记录,看着很烦,又不想手动删除,就用ai写了个清除的脚本

脚本如下

import requests
import sys
import io

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

EMBY_URL = "填入你的emby地址"
API_KEY = "填入你的key"

def get_headers():
    return {"X-Emby-Token": API_KEY, "Content-Type": "application/json"}

def get_users():
    url = f"{EMBY_URL}/Users"
    resp = requests.get(url, headers=get_headers())
    resp.raise_for_status()
    return resp.json()

def get_continue_watching(user_id):
    url = f"{EMBY_URL}/Users/{user_id}/Items/Resume"
    resp = requests.get(url, headers=get_headers())
    resp.raise_for_status()
    data = resp.json()
    if isinstance(data, dict):
        return data.get('Items', [])
    return data

def get_played_items(user_id):
    url = f"{EMBY_URL}/Users/{user_id}/Items"
    resp = requests.get(url, headers=get_headers(), params={'Filters': 'IsPlayed'})
    resp.raise_for_status()
    data = resp.json()
    return data.get('Items', [])

def mark_unplayed(user_id, item_id):
    url = f"{EMBY_URL}/Users/{user_id}/PlayedItems/{item_id}/Delete"
    resp = requests.post(url, headers=get_headers())
    return resp.status_code in [200, 204]

def clear_playback_data(user_id, item_id):
    url = f"{EMBY_URL}/Users/{user_id}/Items/{item_id}/UserData"
    resp = requests.post(url, headers=get_headers(), json={
        'PlaybackPositionTicks': 0,
        'PlayCount': 0,
        'Played': False,
        'LastPlayedDate': None
    })
    return resp.status_code in [200, 204]

def main():
    print("=" * 50)
    print("Emby 播放记录管理工具")
    print("=" * 50)
    
    print("\n获取用户列表...")
    users = get_users()
    print(f"\n找到 {len(users)} 个用户:\n")
    
    for i, user in enumerate(users):
        print(f"  [{i+1}] {user.get('Name', '未知')}")
    
    print("\n" + "-" * 50)
    choice = input("请选择用户编号: ").strip()
    
    try:
        idx = int(choice) - 1
        if idx < 0 or idx >= len(users):
            print("无效选择!")
            return
        selected_user = users[idx]
    except ValueError:
        print("无效输入!")
        return
    
    user_id = selected_user["Id"]
    user_name = selected_user["Name"]
    
    print(f"\n已选择用户: {user_name}")
    print("-" * 50)
    
    resume_items = get_continue_watching(user_id)
    played_items = get_played_items(user_id)
    
    total_count = len(resume_items) + len(played_items)
    
    if total_count == 0:
        print("\n没有记录")
        return
    
    print("\n" + "-" * 50)
    confirm = input(f"确定清除 {user_name} 的记录? (y/n): ").strip().lower()
    
    if confirm == 'y':
        all_items = resume_items + played_items
        
        for item in all_items:
            item_id = item.get('Id')
            if item_id:
                mark_unplayed(user_id, item_id)
                clear_playback_data(user_id, item_id)
        
        print("\n记录已清除,请刷新!")
    else:
        print("\n已取消操作")

if __name__ == "__main__":
    main()

1 个帖子 - 1 位参与者

阅读完整话题

来源: linux.do查看原文