|
本文为 其乐用户(UID:207400) 发布的原创文章,转摘前请联系该用户获得许可
本帖最后由 207400 于 2024-3-19 22:59 编辑
效果如下,例如将爽哥的Steam帐号作为主帐号与其他用户对比
- 开始加载 ywwuyi
- 开始加载 magic_vs
- 开始加载 St4ck
- 主账号拥有的游戏共 2607 个
- 共同拥有的游戏共 1225 个
- 主账号拥有的游戏,但没有在其他账号拥有,共 1382 个
- 其他账号拥有的游戏,但没有在主账号拥有,共 5188 个
- 用户:Magic / magic_vs
- 用户拥有的游戏共 3333 个
- 共同拥有的游戏共 786 个
- 主账号拥有的游戏,但没有在此账号拥有,共 1821 个
- 此账号拥有的游戏,但没有在主账号拥有,共 2547 个
- 用户:St4ck / St4ck
- 用户拥有的游戏共 5046 个
- 共同拥有的游戏共 978 个
- 主账号拥有的游戏,但没有在此账号拥有,共 1629 个
- 此账号拥有的游戏,但没有在主账号拥有,共 4068 个
复制代码
图一乐,众所周知游戏数量不代表游戏质量
> 用法及代码 唯一指定链接 Gist
用法:修改代码中的这两个变量,然后 python xxx.py 运行
- USER_MAIN = ["ywwuyi"]
- USERS = ["magic_vs", "St4ck"]
复制代码
代码,可能后面有更新了不会在这里更,点击显示 - from typing import Dict, List
- import xml.etree.ElementTree as ET
- from dataclasses import dataclass
- import urllib.request
- import urllib.parse
- import re
- import json
- # 填写个人资料链接中的最后一段
- # 例如 https://steamcommunity.com/profiles/76561145141919810 中的 76561145141919810
- # 或者 https://steamcommunity.com/id/abcdefg 中的 abcdefg
- # 主用户名
- USER_MAIN = ["abcdefg"]
- # 要比较的好友用户名
- USERS = ["user1", "user2", "user3"]
- @dataclass
- class Game:
- appID: int
- name: str
- storeLink: str
- def to_dict(self):
- return {"appID": self.appID, "name": self.name, "storeLink": self.storeLink}
- @classmethod
- def from_dict(cls, data):
- return cls(**data)
- @dataclass
- class User:
- userID: str
- userName: str
- games: List[Game]
- def to_dict(self):
- return {
- "userID": self.userID,
- "userName": self.userName,
- "games": [game.to_dict() for game in self.games],
- }
- @classmethod
- def from_dict(cls, data):
- games = [Game.from_dict(game_data) for game_data in data["games"]]
- return cls(data["userID"], data["userName"], games)
- Users: Dict[str, User] = {}
- def get_api_url(userID):
- API_BASE = "https://steamcommunity.com/"
- API_BASE_SUFFIX = "/games?tab=all&xml=1"
- if re.match(r"([^\/][0-9]{16,})", userID):
- return API_BASE + "profiles/" + userID + API_BASE_SUFFIX
- else:
- return API_BASE + "id/" + userID + API_BASE_SUFFIX
- def save_cache(user: User):
- with open(f"{user.userID}.json", "w", encoding="utf-8") as f:
- json.dump(user.to_dict(), f, ensure_ascii=False, indent=4)
- def load_cache(userID):
- try:
- with open(f"{userID}.json", "r", encoding="utf-8") as f:
- user_data = json.load(f)
- return User.from_dict(user_data)
- except:
- return None
- for user in USER_MAIN + USERS:
- print(f"开始加载 {user}")
- _user = User(user, "", [])
- _user_cache = load_cache(user)
- if _user_cache is not None:
- _user = _user_cache
- else:
- user_api_url = get_api_url(user)
- # print(f"请求地址:{user_api_url}")
- with urllib.request.urlopen(user_api_url) as response:
- xml_string = response.read().decode("utf-8")
- # 解析XML字符串
- root = ET.fromstring(xml_string)
- # 提取用户名
- _user.userName = root.find("steamID").text
- games = root.findall(".//game")
- if len(games) == 0:
- print(f"没有找到游戏信息,跳过 {user}")
- USERS.remove(user)
- continue
- # 提取appID和name
- for game in root.findall(".//game"):
- app_id = int(game.find("appID").text)
- name = game.find("name").text
- store_link = game.find("storeLink").text
- # print("appID:", app_id)
- # print("name:", name)
- _user.games.append(Game(app_id, name, store_link))
- save_cache(_user)
- Users[user] = _user
- set_main_games = {game.appID for user in USER_MAIN for game in Users[user].games}
- set_others_games = {game.appID for user in USERS for game in Users[user].games}
- print()
- print(f"主账号拥有的游戏共 {len(set_main_games)} 个")
- duplicated_games = set_main_games & set_others_games
- # print(f"共同拥有的游戏:{duplicated_games}")
- print(f"共同拥有的游戏共 {len(duplicated_games)} 个")
- main_minus_others = set_main_games - set_others_games
- # print(f"主账号拥有的游戏,但没有在其他账号拥有:{main_minus_others}")
- print(f"主账号拥有的游戏,但没有在其他账号拥有,共 {len(main_minus_others)} 个")
- others_minus_main = set_others_games - set_main_games
- # print(f"其他账号拥有的游戏,但没有在主账号拥有:{others_minus_main}")
- print(f"其他账号拥有的游戏,但没有在主账号拥有,共 {len(others_minus_main)} 个")
- # print(Users)
- for user in USERS:
- print()
- print(f"用户:{Users[user].userName} / {user}")
- set_games = {game.appID for game in Users[user].games}
- print(f"用户拥有的游戏共 {len(set_games)} 个")
- duplicated_games = set_main_games & set_games
- # print(f"共同拥有的游戏:{duplicated_games}")
- print(f"共同拥有的游戏共 {len(duplicated_games)} 个")
- main_minus_others = set_main_games - set_games
- # print(f"主账号拥有的游戏,但没有在其他账号拥有:{main_minus_others}")
- print(f"主账号拥有的游戏,但没有在其他账号拥有,共 {len(main_minus_others)} 个")
- others_minus_main = set_games - set_main_games
- # print(f"其他账号拥有的游戏,但没有在主账号拥有:{others_minus_main}")
- print(f"其他账号拥有的游戏,但没有在主账号拥有,共 {len(others_minus_main)} 个")
复制代码
|
1、转载或引用本网站内容,必须注明本文网址:https://keylol.com/t940489-1-1。如发文者注明禁止转载,则请勿转载
2、对于不当转载或引用本网站内容而引起的民事纷争、行政处理或其他损失,本网站不承担责任
3、对不遵守本声明或其他违法、恶意使用本网站内容者,本网站保留追究其法律责任的权利
4、所有帖子仅代表作者本人意见,不代表本社区立场
|