如何利用Release ID判断Discogs发行是否存在其他版本?
解决Discogs发行版本检测问题:读取CSV并判断Other Versions存在性
原代码的核心问题
- 未处理无Master页的发行:直接通过
data['master_id']取值会触发KeyError,比如发行ID 8749474这类没有Master页的条目 - 缺少CSV读取逻辑:未实现从本地CSV批量读取Release ID的功能
- 版本判断逻辑不准确: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
相关产品推荐
相关产品推荐

