当前位置: 首页 > article >正文

Steam Web API实战:除了查库存,你还能用Python脚本自动追踪好友的游戏成就与时长

Steam Web API实战用Python构建游戏数据分析系统Steam平台不仅是全球最大的数字游戏发行平台更是一个隐藏着海量玩家行为数据的宝库。作为一名资深游戏开发者兼数据分析师我发现许多技术爱好者仅仅将Steam Web API用于查询好友在线状态这种基础功能却忽略了它真正的潜力。本文将带你深入探索如何利用Python构建一个完整的游戏数据分析系统从基础的API调用到复杂的数据可视化解锁Steam数据的更多可能性。1. Steam Web API基础配置在开始我们的数据探索之旅前需要先完成一些基础配置工作。与大多数API服务不同Steam的认证机制相对简单但仍需注意几个关键点。首先访问Steam Web API密钥申请页面使用你的Steam账号登录后只需填写一个域名开发阶段可填写localhost即可获得API密钥。这个32位的字符串将是我们所有请求的通行证。获取好友的SteamID是另一个关键步骤。这里有个实用技巧通过Steam社区资料页的URL可以直接提取用户的64位SteamID。例如在URLhttps://steamcommunity.com/profiles/76561197960434622中末尾的数字就是我们要的ID。# 示例提取SteamID profile_url https://steamcommunity.com/profiles/76561197960434622 steam_id profile_url.split(/)[-1] # 获取76561197960434622注意根据Steam的API使用条款批量采集非好友用户数据可能违反服务协议建议仅收集已同意共享数据的好友信息。2. 核心API接口解析Steam Web API提供了数十个功能各异的接口我们重点分析几个对游戏数据分析最有价值的端点。2.1 玩家游戏库接口IPlayerService/GetOwnedGames接口能获取玩家拥有的所有游戏及其累计时长import requests def get_owned_games(api_key, steam_id): url fhttp://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key{api_key}steamid{steam_id}include_appinfo1formatjson response requests.get(url) return response.json() # 示例返回数据结构 { response: { game_count: 42, games: [ { appid: 292030, name: The Witcher 3: Wild Hunt, playtime_forever: 327, img_icon_url: abcdefg123456 } ] } }2.2 游戏成就接口ISteamUserStats/GetPlayerAchievements可以查询玩家在特定游戏中的成就获取情况def get_achievements(api_key, steam_id, app_id): url fhttp://api.steampowered.com/ISteamUserStats/GetPlayerAchievements/v0001/?appid{app_id}key{api_key}steamid{steam_id} response requests.get(url) return response.json()2.3 好友列表接口ISteamUser/GetFriendList不仅能获取好友列表还能了解他们的在线状态def get_friend_list(api_key, steam_id): url fhttp://api.steampowered.com/ISteamUser/GetFriendList/v0001/?key{api_key}steamid{steam_id}relationshipfriend response requests.get(url) return response.json()3. 构建游戏数据分析系统有了这些基础接口我们可以开始构建更复杂的数据分析功能。下面是一个完整的系统设计方案。3.1 数据采集模块首先设计一个稳定的数据采集模块定期获取并存储好友游戏数据import sqlite3 from datetime import datetime def init_database(): conn sqlite3.connect(steam_data.db) c conn.cursor() c.execute(CREATE TABLE IF NOT EXISTS game_records (id INTEGER PRIMARY KEY AUTOINCREMENT, steam_id TEXT, game_id INTEGER, game_name TEXT, playtime INTEGER, record_date TEXT)) conn.commit() conn.close() def save_game_data(steam_id, game_data): conn sqlite3.connect(steam_data.db) c conn.cursor() today datetime.now().strftime(%Y-%m-%d) for game in game_data[response][games]: c.execute(INSERT INTO game_records (steam_id, game_id, game_name, playtime, record_date) VALUES (?, ?, ?, ?, ?), (steam_id, game[appid], game[name], game[playtime_forever], today)) conn.commit() conn.close()3.2 数据分析模块基于采集的数据我们可以进行各种有趣的分析import pandas as pd import matplotlib.pyplot as plt def analyze_friend_games(friend_id): conn sqlite3.connect(steam_data.db) df pd.read_sql_query(f SELECT game_name, SUM(playtime) as total_time FROM game_records WHERE steam_id {friend_id} GROUP BY game_name ORDER BY total_time DESC LIMIT 5 , conn) conn.close() plt.figure(figsize(10, 6)) plt.barh(df[game_name], df[total_time]/60, colorskyblue) plt.xlabel(游戏时长(小时)) plt.title(f好友{friend_id}的游戏时长TOP5) plt.tight_layout() plt.savefig(f{friend_id}_top_games.png) return df3.3 成就追踪与比较游戏成就系统是玩家投入度的重要指标。我们可以设计一个成就比较功能def compare_achievements(player1_id, player2_id, app_id): p1_achs get_achievements(API_KEY, player1_id, app_id) p2_achs get_achievements(API_KEY, player2_id, app_id) p1_earned [a[apiname] for a in p1_achs[playerstats][achievements] if a[achieved]] p2_earned [a[apiname] for a in p2_achs[playerstats][achievements] if a[achieved]] unique_p1 set(p1_earned) - set(p2_earned) unique_p2 set(p2_earned) - set(p1_earned) print(f玩家1独有的成就({len(unique_p1)}个): {unique_p1}) print(f玩家2独有的成就({len(unique_p2)}个): {unique_p2})4. 高级应用游戏社交网络分析将上述功能组合起来我们可以构建更复杂的分析应用。例如分析你的Steam好友社交网络中的游戏偏好分布。4.1 构建游戏偏好矩阵首先收集所有好友的游戏数据def collect_friends_games(api_key, steam_id): friends get_friend_list(api_key, steam_id) all_games {} for friend in friends[friendslist][friends]: friend_id friend[steamid] games get_owned_games(api_key, friend_id) all_games[friend_id] [g[appid] for g in games[response][games]] return all_games4.2 计算游戏相似度基于收集的数据我们可以计算好友间的游戏相似度from collections import defaultdict def calculate_similarity(all_games): game_users defaultdict(list) for user, games in all_games.items(): for game in games: game_users[game].append(user) similarity_matrix defaultdict(dict) users list(all_games.keys()) for i in range(len(users)): for j in range(i1, len(users)): common_games set(all_games[users[i]]) set(all_games[users[j]]) total_games set(all_games[users[i]]) | set(all_games[users[j]]) similarity len(common_games) / len(total_games) if total_games else 0 similarity_matrix[users[i]][users[j]] similarity similarity_matrix[users[j]][users[i]] similarity return similarity_matrix4.3 可视化社交网络使用networkx库将相似度关系可视化import networkx as nx def visualize_social_network(similarity_matrix, threshold0.3): G nx.Graph() for user1 in similarity_matrix: G.add_node(user1) for user2 in similarity_matrix[user1]: if similarity_matrix[user1][user2] threshold: G.add_edge(user1, user2, weightsimilarity_matrix[user1][user2]) plt.figure(figsize(12, 12)) pos nx.spring_layout(G) nx.draw_networkx_nodes(G, pos, node_size50) nx.draw_networkx_edges(G, pos, alpha0.2) plt.title(Steam好友游戏偏好社交网络) plt.savefig(steam_social_network.png)5. 自动化通知系统的进阶实现原始的钉钉通知功能可以进一步扩展实现更智能的游戏动态追踪。5.1 游戏动态监控设计一个监控好友特定游戏动态的系统def monitor_game_activity(api_key, friend_id, game_id, check_interval3600): last_playtime 0 while True: games get_owned_games(api_key, friend_id) current_game next((g for g in games[response][games] if g[appid] game_id), None) if current_game and current_game[playtime_forever] last_playtime: playtime_diff current_game[playtime_forever] - last_playtime message f你的好友最近玩了{current_game[name]}新增时长{playtime_diff}分钟 send_dingtalk_message(message) last_playtime current_game[playtime_forever] time.sleep(check_interval)5.2 成就获取通知当好友获得特定成就时发送通知def monitor_achievements(api_key, friend_id, game_id, achievement_names): known_achievements set() while True: achievements get_achievements(api_key, friend_id, game_id) new_achievements [] for ach in achievements[playerstats][achievements]: if ach[achieved] and ach[apiname] not in known_achievements: if ach[apiname] in achievement_names: new_achievements.append(ach[name]) known_achievements.add(ach[apiname]) if new_achievements: message f你的好友获得了新成就{, .join(new_achievements)} send_dingtalk_message(message) time.sleep(3600) # 每小时检查一次在实际项目中我发现将游戏数据分析结果与自动化通知结合可以创造出许多有趣的场景。比如当好友的游戏时长突然激增时可能意味着新DLC发布或周末游戏马拉松而当多个好友同时开始玩某款游戏时可能暗示着值得关注的新游戏趋势。

相关文章:

Steam Web API实战:除了查库存,你还能用Python脚本自动追踪好友的游戏成就与时长

Steam Web API实战:用Python构建游戏数据分析系统 Steam平台不仅是全球最大的数字游戏发行平台,更是一个隐藏着海量玩家行为数据的宝库。作为一名资深游戏开发者兼数据分析师,我发现许多技术爱好者仅仅将Steam Web API用于查询好友在线状态这…...

Mac上Python调用Wind量化接口的完整避坑指南

1. Mac上Wind量化接口的特殊性 第一次在Mac上配置Wind量化接口时,我踩了不少坑。和Windows不同,Mac上的Wind生态简直像两个平行世界。Windows用户点几下鼠标就能搞定的事情,在Mac上可能要折腾大半天。最让人崩溃的是,Mac版的Wind…...

为什么顶尖AI实验室连夜调整研发优先级?SITS2026强制要求的4项新评估框架正在重写游戏规则

第一章:SITS2026发布:AGI发展路线图 2026奇点智能技术大会(https://ml-summit.org) 核心目标与战略定位 SITS2026正式确立了“三阶段、五支柱、一验证”的AGI演进框架,聚焦从当前LLM增强系统向具备自主目标建模、跨域因果推理与持续自我重构…...

工程师的桌面瘦身计划:如何为Solidworks 2021 SP5定制最小化安装(仅12G vs 22G全功能)

SolidWorks 2021 SP5精简安装指南:12GB极致瘦身方案 当你的SSD只剩下最后20GB空间,而SolidWorks完整安装需要吃掉22GB时,每个GB都变得弥足珍贵。作为从业十年的机械设计师,我经历过太多因为磁盘空间不足导致的软件崩溃——直到发现…...

别再硬编码了!用FlexSim模拟电商仓库‘多品小单’拣货的柔性配置指南

电商仓库多品小单拣货的FlexSim柔性仿真实战指南 电商仓储的核心痛点之一,就是应对"多品种、小批量"订单的拣选效率问题。传统仓库规划往往依赖经验估算和静态方案,难以适应大促期间订单结构的剧烈波动。本文将带你用FlexSim构建一个可动态调…...

Day03:Function Calling 核心

文章目录一、Function Calling 核心概念与定义1.1 技术本质与原理1.2 与传统 AI 推理的区别1.3 主要技术实现框架二、Function Calling 的核心价值与解决的问题2.1 解决知识截止问题2.2 解决实时数据获取需求2.3 解决外部动作执行问题2.4 安全性与可控性设计三、Function Calli…...

UnSHc深度解析:揭秘SHc加密脚本逆向工程核心技术

UnSHc深度解析:揭秘SHc加密脚本逆向工程核心技术 【免费下载链接】UnSHc UnSHc - How to decrypt SHc *.sh.x encrypted file ? 项目地址: https://gitcode.com/gh_mirrors/un/UnSHc 在Linux系统管理和安全审计领域,Shell脚本的保护与解密始终是…...

如何用Bulk Crap Uninstaller彻底清理Windows软件:免费高效的批量卸载工具指南

如何用Bulk Crap Uninstaller彻底清理Windows软件:免费高效的批量卸载工具指南 【免费下载链接】Bulk-Crap-Uninstaller Remove large amounts of unwanted applications quickly. 项目地址: https://gitcode.com/gh_mirrors/bu/Bulk-Crap-Uninstaller Bulk …...

终极完整指南:5分钟快速部署《Degrees of Lewdity》中文版

终极完整指南:5分钟快速部署《Degrees of Lewdity》中文版 【免费下载链接】Degrees-of-Lewdity-Chinese-Localization Degrees of Lewdity 游戏的授权中文社区本地化版本 项目地址: https://gitcode.com/gh_mirrors/de/Degrees-of-Lewdity-Chinese-Localization …...

vue基于springboot成人自考本科远程教育网站设计与实现

目录同行可拿货,招校园代理 ,本人源头供货商功能模块分析考试与评估功能后台管理功能技术实现要点扩展功能建议项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块分析 用户模块 …...

ncmdump终极指南:3步轻松解密网易云音乐NCM格式,实现跨平台播放自由

ncmdump终极指南:3步轻松解密网易云音乐NCM格式,实现跨平台播放自由 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器使用而烦恼吗?ncmdump是一…...

ssm社区物业信息管理系统小程序(文档+源码)_kaic

系统实现登录模块的实现系统的登录窗口是用户的入口,用户只有在登录成功后才可以进入访问。通过在登录提交表单,后台处理判断是否为合法用户,进行页面跳转,进入系统中去。登录合法性判断过程:用户输入账号和密码后&…...

BGP选路深度解析:当Next Hop遇上IGP开销,如何避免网络中的“不对称路由”?

BGP选路深度解析:当Next Hop遇上IGP开销,如何避免网络中的“不对称路由”? 在复杂的多自治系统(AS)网络环境中,BGP路由选择往往被视为网络工程师手中的瑞士军刀。但鲜为人知的是,这把"军刀…...

别再死记硬背了!用立创EDA+Excel,手把手教你搭建个人电子元器件库(附避坑清单)

电子工程师的元器件管理革命:从零散笔记到智能数据库 在电子设计领域,元器件管理一直是个令人头疼的问题。打开任何一位硬件工程师的电脑,你可能会发现数十个命名混乱的Excel表格、散落在各处的PDF规格书,以及一堆随手记录的纸质笔…...

Obsidian页面美化全攻略:自定义行间距与页面宽度,打造舒适阅读体验

Obsidian视觉调优实战:从行间距到页面宽度的沉浸式写作体验设计 在数字笔记工具百花齐放的今天,Obsidian凭借其本地优先、双向链接和高度可定制的特性,已经成为知识工作者的首选工具之一。但默认的界面设计往往难以满足长时间写作和阅读的需求…...

从TM1到TM9:手把手教你用Wireshark和商用路测软件分析LTE空口传输模式切换

LTE传输模式深度解析:从TM1到TM9的技术演进与实战应用 引言 在移动通信领域,LTE传输模式(TM)的灵活切换是提升网络性能的关键技术之一。作为网络优化工程师,深入理解不同传输模式的特点及适用场景,能够帮助我们更精准地诊断网络问…...

职业深度解析:Data Alignment Specialist——确保多源数据语义一致性的协调者

一、职业定位(What & Why)1. 一句话定义与通俗类比专业定义:数据对齐专家负责确保来自不同来源、具备不同格式及标注标准的数据在语义、结构及时间维度上保持严格一致,从而避免模型训练过程中因数据冲突而产生学习偏差。类比解…...

职业深度解析:Synthetic Data Engineer——使AI具备“无中生有”学习能力的合成数据构建者

一、职业定位(What & Why)1. 一句话定义与通俗类比专业定义:合成数据工程师通过算法与生成模型构造人工数据,以模拟真实世界的数据分布特征。该类合成数据用于训练、测试或增强AI模型,旨在解决真实数据稀缺、涉及隐…...

职业深度解析:AI/ML Engineer——从模型设计到生产落地

摘要:本文对AI/ML工程师岗位进行系统性解构,涵盖职业定位、工作内容拆解、硬性与软性能力要求、知识体系构建、典型工作场景、就业市场现状、薪酬结构、职业发展路径、适配人群画像、进入门槛路径及常见认知误区。适合机器学习从业者、转行意向者及技术管…...

明日方舟游戏资源库:从数据解包到创意实现的完整技术指南

明日方舟游戏资源库:从数据解包到创意实现的完整技术指南 【免费下载链接】ArknightsGameResource 明日方舟客户端素材 项目地址: https://gitcode.com/gh_mirrors/ar/ArknightsGameResource 在数字内容创作领域,获取高质量游戏素材往往面临版权、…...

BilibiliDown:三步完成B站视频批量下载的完整方案

BilibiliDown:三步完成B站视频批量下载的完整方案 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bi…...

基于目标级联分析法的多微网主动配电系统自治优化经济调度算法实践:初级拉格朗日算法应用

GAMS代码:基于目标级联分析法的多微网主动配电系统自治优化经济调度 该代码并非完全复现该文献,而是参照文献 《基于目标级联分析法的多微网主动配电系统自治优化经济调度》 的目标级联分析法(ATC)的算法部分,采用初…...

告别ESP32环境配置噩梦:用Python虚拟环境一劳永逸管理ESP-IDF依赖

ESP32开发者的Python虚拟环境实战指南:彻底解决依赖冲突难题 每次打开ESP-IDF项目时,那些烦人的Python依赖报错是不是让你血压飙升?不同项目间的包版本冲突是否让你在pip install和pip uninstall之间反复横跳?作为一名长期奋战在E…...

别再凭感觉了!用Excel快速搞定外观检验员一致性(Kappa)分析,附免费模板

用Excel实现外观检验一致性分析的实战指南 在制造业的质量控制环节,外观检验的一致性直接影响产品合格率与客户满意度。传统手工计算Kappa值不仅耗时费力,还容易出错。本文将手把手教你如何用Excel搭建自动化分析模板,让质量工程师在10分钟内…...

2026奇点大会闭门报告首曝:AGI训练芯片能效比突破128TOPS/W,但83%的FPGA工程师尚未适配新指令集

第一章:2026奇点智能技术大会:AGI与硬件设计 2026奇点智能技术大会(https://ml-summit.org) AGI架构对芯片微架构的倒逼演进 本届大会首次披露了基于全栈可微分计算范式的AGI参考模型——Singularity-7B,其训练阶段要求硬件具备动态稀疏张量…...

AGI已越过“图灵阈值”?SITS2026圆桌闭门实录:92%专家确认AGI实用化落地在2026–2028年,你缺的不是算力,是认知操作系统

第一章:SITS2026圆桌:AGI与人类未来 2026奇点智能技术大会(https://ml-summit.org) 圆桌共识的核心命题 在SITS2026主会场“AGI与人类未来”圆桌中,来自OpenAI、DeepMind、中科院自动化所及欧盟AI伦理委员会的七位代表达成三项基础共识&…...

别再让NFPP背锅了!结合DHCP Snooping和DAI构建企业网防ARP欺骗完整方案

企业网络防ARP欺骗实战:DHCP Snooping与DAI的黄金组合 当企业网络规模扩大到数千用户时,ARP欺骗攻击就像潜伏在暗处的定时炸弹。许多管理员误以为开启NFPP(网络基础保护策略)就能高枕无忧,殊不知这仅仅是保护设备CPU的…...

Rust的#[repr(transparent)]包装

Rust语言中的#[repr(transparent)]属性是一个强大而低调的工具,它允许开发者在不牺牲性能的前提下,为类型系统增加更强的语义表达。对于追求零成本抽象的Rust程序员来说,这个属性是构建安全且高效代码的关键之一。本文将深入探讨它的核心原理…...

从薛定谔方程到Kohn-Sham方程:DFT核心原理与应用场景解析

1. 量子力学的起点:薛定谔方程与电子结构难题 要理解密度泛函理论(DFT)为何能成为计算材料科学的基石,我们需要回到量子力学的源头——薛定谔方程。这个1926年提出的方程描述了微观粒子的行为规律,其标准形式看起来异常…...

告别默认路径:Rust环境自定义安装与MinGW配置实战

1. 为什么需要自定义Rust安装路径? 每次重装系统后都要重新配置开发环境,这可能是很多Windows开发者最头疼的事情之一。默认情况下,Rust会把自己的工具链安装在C盘的Users目录下,这不仅占用宝贵的系统盘空间,还会在系统…...