You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用Release ID判断Discogs发行是否存在其他版本?

解决Discogs发行版本检测问题:读取CSV并判断Other Versions存在性

原代码的核心问题

  1. 未处理无Master页的发行:直接通过data['master_id']取值会触发KeyError,比如发行ID 8749474这类没有Master页的条目
  2. 缺少CSV读取逻辑:未实现从本地CSV批量读取Release ID的功能
  3. 版本判断逻辑不准确:Master的versions列表包含当前发行本身,直接判断长度>1会把当前发行也算入

可行解决方案代码

import requests
import time
import csv

# Discogs API基础地址
API_URL = "https://api.discogs.com"
# 必须添加用户代理(Discogs API强制要求,避免被限制)
HEADERS = {"User-Agent": "YourAppName/1.0 (+yourcontactinfo)"}

def check_other_versions(release_id):
    # 请求发行详情
    release_response = requests.get(f"{API_URL}/releases/{release_id}", headers=HEADERS)
    if release_response.status_code != 200:
        print(f"Release {release_id}: 请求失败,状态码 {release_response.status_code}")
        return None
    
    release_data = release_response.json()
    master_id = release_data.get("master_id")
    
    # 无Master页的情况直接判定无Other Versions
    if not master_id:
        print(f"Release {release_id}: 无Other Versions及Master页")
        return 0
    
    # 请求Master版本列表
    master_response = requests.get(f"{API_URL}/masters/{master_id}/versions", headers=HEADERS)
    if master_response.status_code != 200:
        print(f"Release {release_id}: 获取Master版本失败,状态码 {master_response.status_code}")
        return None
    
    versions_data = master_response.json()
    total_versions = len(versions_data.get("versions", []))
    # 减去当前发行本身,得到真实的Other Versions数量
    other_versions_count = total_versions - 1
    
    if other_versions_count > 0:
        print(f"Release {release_id}: 有 {other_versions_count} 个Other Versions")
    else:
        print(f"Release {release_id}: 无Other Versions")
    return other_versions_count

# 读取本地CSV文件(假设CSV包含名为'release_id'的列)
def read_release_ids_from_csv(csv_path):
    release_ids = []
    with open(csv_path, mode='r', encoding='utf-8') as file:
        reader = csv.DictReader(file)
        for row in reader:
            try:
                release_id = int(row['release_id'].strip())
                release_ids.append(release_id)
            except (ValueError, KeyError):
                print(f"忽略无效行:{row}")
    return release_ids

if __name__ == "__main__":
    # 替换为你的CSV文件路径
    csv_file_path = "your_release_ids.csv"
    release_ids = read_release_ids_from_csv(csv_file_path)
    
    for rid in release_ids:
        check_other_versions(rid)
        # 遵守Discogs API速率限制(建议每秒不超过1次请求)
        time.sleep(1)

关键细节说明

  • 避免KeyError:用release_data.get("master_id")替代直接索引,当无Master页时返回None,不会触发报错
  • API合规性:必须添加User-Agent请求头,Discogs API强制要求,否则会被拒绝请求
  • 错误处理:检查每个API请求的状态码,处理请求失败的情况
  • 版本计数准确:Master的versions列表包含当前发行,所以用总数量减1得到真实的Other Versions数量
  • CSV读取容错:自动处理无效行(比如非数字的Release ID、列名不匹配)

内容的提问来源于stack exchange,提问作者Gruso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 10:50:14