Steam

Steam

27 ratings
如何超快速地将你的steam游戏记录制作成Notion画廊
By kaikisen
羡慕蒸友整洁美丽的Notion画廊?你也可以拥有!
   
Award
Favorite
Favorited
Unfavorite
什么是Notion画廊
你可能在好友的个人主页看到过ta的Notion画廊(Gallery),它可能是这样的:
这样的:

















或是这样的:

简单来说,画廊是Notion的一个展示模板,而它非常适合用于游戏记录!你可以使用近乎任何想要的元素来标记游戏,并以整洁美观的卡片或表格形式呈现出来。
  • 想让陌生人/新朋友快速了解你的游戏喜好?
  • 想回顾游玩记录,但steam的信息记录太简陋,甚至找不到当初用steam玩的第一个游戏是什么?
  • 想写一些游戏随感,但发在动态中马上沉没在信息流,而发在评测中又不太合适?
  • 想细致给玩过的游戏评分定级,建立属于自己的游戏宫殿?
  • 想找个方法将其他平台的作品也展示/评价?
  • 想写一篇超长的评测结果发现steam评测居然有字数限制?(←除了你没人这样

    好奇评测的字数限制是多少?请看:https://cs2bus.com/id/30100002/recommended/1569580/
    (↑就是说没人好奇!)
——如果你对这些steam缺乏的功能感兴趣,那么这篇指南会指导你非常快捷地调用Steam API获取你的游玩记录,并将其轻松地转换为Notion画廊。

这篇指南提供了两种导入方案,第一种方便快速适合单次导入后续手动更新,第二种准备工作更多一些但可以随时更新游戏信息到notion。
如何导出Steam游玩数据
纯手搓建立Gallery是一项非常巨大的工程:除了你的打分和评测外,你还需要挨个输入游戏名、游玩时长信息、成就信息——甚至(为了美观易读)给每个游戏找一张封面图;而如果需要输入tag,则会有更多的工作量。

但幸运的是,Steam API和游戏的Steam商店界面中其实提供了大部分信息,只要使用脚本就能轻松获得。下面这篇指南中非常清晰地提供了申请并读取steam API信息的方法
https://cs2bus.com/sharedfiles/filedetails/?id=3456572637

而如果你曾使用过小黑盒、steamhunter等需要读取游玩信息的网站或app,那么它们可能已经帮你申请好了API,下一部分的申请环节跳过即可。
Steam API申请
获取API步骤:
Originally posted by Chie:

第一步 得到你的Steam API
打开这个网址:https://cs2bus.com/dev/apikey
(安全的,仅是导出数据用)
中间右侧点击“Sign in“ / "登录” 一下steam,可能需要手机app验证

登录上以后会跳转到这个界面↓
①在域名名称右边的输入框中输入localhost
②勾选“我同意Steam Web API使用条款”
③点击注册

如果有绑定了手机令牌的话,会提示“正在等待来自您 Steam 令牌手机验证器的确认”,在手机令牌上确认下即可↓

确认完之后,即可在网页端看到Steam API密钥,[/b]先复制这串密钥,后面步骤会用到(非常重要!)





第二步 得到你的steam id

这个id和你的steam好友码,steam昵称都没关系,一定要是17个数字(64位)。
来到你的个人主页,右侧点击“编辑个人资料”,在“一般” / “General” 的信息栏找到,“自定义URL”下面这个灰色网址里的17个数字就是你的id。这个id在左上角的网址其实也可以找到。
同样的,复制出来备用,可以无视下面这一步搜索ID了

如果你之前改过自定义URL
你真正的steam id在这里就会被你改的名字覆盖。需要借助外部工具显示。

前往这个SteamIO网站: https://steamid.io/
在中间输入你改的名字,点击“lookup"搜索
(比如如果你的个人主页此刻是"https://cs2bus.com/profiles/13mvp", 那你就用"13mvp”搜索
把steamID64 那17个数字复制出来备用:


------单次导入版-----
如果你不太习惯接触代码,或觉得手动更新后续条目并不麻烦,那么这个推荐你使用这个版本!单次导入版只需要你的steam id和steam api信息即可,它可以特别快速地帮你建立一个画廊框架,你也可以方便地调整条目内容。
读取steam API信息
现在你应该复制了两串关键信息:
①你的Steam Web API 密钥
②你的Steam ID (17个数字)


接下来,使用python或上面指南中的免费在线IDE来运行以下代码:
用你的steam api和 steam id替换代码中的信息并运行即可
https://github.com/kaikisen/Notion_SteamAPI/blob/main/get_steam_info.txt
https://github.com/kaikisen/Notion_SteamAPI/blob/main/get_steam_info.py
生成的 steam_games_info.csv 在代码同目录下。csv中此时应该包括【En_name、appid、游玩时长/h、最后游玩时间、已解锁成就数、总成就数、成就完成率(%)、首个成就解锁于、封面、游戏名称、tag】这些条目。



(原作者的代码已读取了足够完整的信息,我在其基础上增加了获得首个成就解锁时间、抓取游戏封面图、中文名称、商店界面tag这些信息。

以下是部分条目介绍:
  • 游戏名称:记录于Steam API的英文游戏名
  • appid:游戏唯一id,用于访问游戏商店页面
  • 中文游戏名:中文商店页面下的游戏名(当然,部分游戏名是没有翻译的)
  • 最后游玩时间:Notion用csv导入时间格式是万恶的美式时间格式MM/DD/YYYY
  • 成就首次解锁于:由于steam不记录详细的游玩时间点,尝试分析成就解锁信息来获得最接近首次游玩时间的“成就首次解锁于”信息
  • 标签:游戏商店界面的tag,代码取了前八项,可手动调整(在for tag in tag_container[:8]:处修改数字即可)
  • 封面:游戏商店界面封面图的资源链接,可直接导入Notion。

一切顺利的话,你应该已经得到了 steam_games_info.csv 这个文件——离成功只有一步之遥了!
修整表格并创建你的Notion Gallery
接下来就到了关键一步了——决定你想要怎么样的展示画廊。Notion中条目种类给了非常多的拓展空间,但无论如何,我们需要确定哪些数据是可以由刚刚生成的csv文件导入的,而哪些是需要手动输入的。

1.在创建“画廊之后”,点击“画廊视图”右侧的+号添加一个“表格”,接着就可以设定你需要的元素了!
以下是我的格式参考:

我总共设定了8项元素,游戏名称(默认项)、tag(多选)、游戏时长(数字)、上次游玩时间(日期)、封面(文件和媒体)、评分(数字)、短评(文字)、游戏状态(状态)
(我认为具体成就百分比放在这边参考不大所以删去了,当然你也可以选择设定!)

在这里,游戏名称、tag、游戏时长、上次游玩时间、封面是可以导入的信息,而评分、短评、游戏状态则是自由撰写的部分。

2.设定完毕之后,就可以修整之前生成的表格(加了封面和标签的新csv.csv)了。将表格题头按照设定的方式改名并排序,删去其他不必要的项并保存为一个新的csv文件。
(建议对原csv做好备份!)











3.导入之前最后一步,我们首先把tag的类型暂时改为【文本】,导入之后再改回来才能正确识别为tag,否则tag一行无法正确识别。

4.右上角三点-与csv合并-选择刚刚修整完毕的csv文件,导入!
大功告成~
5.(记得把tag的类型改回【多选】!)

接下来只需要一些小小的外观修改,你就可以开始清晰不紊地回顾你的游戏生涯了!

6.画廊视图右边三点-布局-卡片预览-选择封面(带链接标志的那个)即可将我们之前文件中的url读取为卡片的封面图
























7.而在属性当中则可以选择展示的标签



























-----即时更新版-----
如果你对python有一些基础,或喜欢一劳永逸、随手就能更新游戏库,那可以试试这个版本!即时更新版更多是我的自用版本,它通过api连接了notion数据库,除了首次运行建立数据库外,它每次运行都能对比steam数据和notion数据库中的数据,如果你玩了新游戏,或你的旧游戏游玩日期/游玩时长更新了,那么脚本就会帮你更新这些信息!(比较可惜的是这个版本下就只能使用我设定的条目了)

除了steam api和steam id外,运行这个版本还需要notion api以及你的notion database id。
获得notion api、database id并链接它们
获得steam api以及steam id后,我们继续申请关于notion的api信息。
申请notion api
https://www.notion.so/profile/integrations
在上面这个界面申请一个集成
为这个集成取一个名字









复制这段秘钥,这就是我们需要的notion api,先记录下来;









接着,复制你的notion链接,在网页中打开它。
你的链接格式类似于
https://www.notion.so/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX?v=YYYYYYYYYYYYYY
其中,这段32个字符的“XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”就是database id

最后一步,在notion界面的右上角三点下的连接选项中,搜索你刚刚为集成起的名字,点击并连接你的集成,万事俱备了!

确认Notion Database的标签和属性
由于这个版本的标签并不是自定义的,所以需要严格按照以下条目来设置。当然可以增设你想要的其他标签,但需要确保存在以下这些标签栏名称和对应的属性属性:
标签名称
标签属性
游戏名称
默认
tag
文本
游戏时长/h
数字
上次游玩时间
日期
成就首次解锁于
日期
成就完成率(%)
数字

(该版本不需要为封面单设标签)
编辑完看起来应该是这样的(其中评分、短评、游戏状态是不必要的项,可以自由增减调整):
读取Steam API信息并自动导入至Notion
接下来,与单次导入版一样,将代码中的四项信息(steam api、steam id、notion api、database id)设置为你自己的四项信息。

https://github.com/kaikisen/Notion_SteamAPI/blob/main/steam_notion.txt
https://github.com/kaikisen/Notion_SteamAPI/blob/main/steam-notion.py

运行即可!顺利的话你应该能看到条目源源不断地出现在你的notion中了,如果你的游戏库中游戏太多太多的话,也许会因为频繁请求报错——没关系,过会继续运行就好,代码会跳过已经导入过的条目,继续更新/增加新增的条目

运行之后将tag一栏更改为【多选】属性即可变成五颜六色的tag!
(不过每次运行程序都需要被程序改回【文本属性】后编辑…因为多选属性是没办法编辑的;而如果通过api改回为【多选】属性tag那栏就会变空白(手动改回就没关系)!很神秘、、还没想到比较好的解决方法。

-----玩的开心!-----
完成了!

接下来,除了回顾游戏库,你还可以设定不同平台的分类、设置自己的星级或推荐等级、增加一个按照你的评价排序的页面、按照游玩时间列出每年的记录、分享Gallery页面到你的Steam主页或其他社媒页面……总之,玩得开心!
15 Comments
kaikisen  [author] 14 Jul @ 5:42am 
@ºd 好耶!好强的动手能力!

(竟然是R!那很数据分析了
ºd 7 Jul @ 8:00am 
@kaikisen 你好,根据你这篇指南提供的灵感,我后面在chatGPT的帮助下整个了 用R语言抓取+上传Notion的指南 (因为懂点R),总之真的很谢谢你的这篇指南!:LIS_pixel_heart:
ºd 24 Jun @ 12:26am 
@kaikisen 发行商也提取成功啦!谢谢你的代码!:LIS_pixel_heart::gilmanlove:
kaikisen  [author] 23 Jun @ 8:05am 
哦哦是的,简单标签可以用find,像这种复杂一点路径一般用select,比如:

publisher_tag = soup.select_one('#game_highlights > div.rightcol > div > div.glance_ctn_responsive_left > div:nth-child(4) > div.summary.column > a')
publisher = publisher_tag.get_text(strip=True)

就可以得到了~希望可以帮到你
ºd 23 Jun @ 7:38am 
@kaikisen 主要还是你原本代码的功劳。我找过发行商的元素,比如这个游戏:
<div class="dev_row"><div class="subtitle column">Publisher:</div>
<div class="summary column">
<a href="https://cs2bus.com/steamstore/publisher/beamng?snr=1_5_9__2000">BeamNG</a> </div></div>
然后因为它不像开发商有一个id="developers_list",所以代码复制大失败>_<(本质还是因为不懂代码原理)
kaikisen  [author] 23 Jun @ 7:25am 
@ºd 还真是!感谢补充!不过这篇指南因为外部链接太多了一编辑我就会被steam塞口球…后来的朋友们查找steam id可以直接访问: https://cs2bus.com/steamstore/account

提取成功祝贺!好强的动手能力!
一个小tip:F12打开devtool后按Ctrl + Shift + C(或者点击左上角的小图标)就可以用鼠标直接在网页上直接定位元素,点击即可显示其在html结构中的位置~
ºd 23 Jun @ 7:11am 
@kaikisen 不怎么懂python和html,然后照着原有的代码模仿了一下,成功提取了开发商的信息,开心!但是不知怎么发行商的信息提取不了,F12看了一下也没找到发行商的class或者id,感觉还是我不懂原理的缘故:laughcat:。然后我发现steam id可以直接点击账户明细,然后那个某某某的账户下面就会显示自己的steam id
kaikisen  [author] 23 Jun @ 2:33am 
@ºd 是可以的!因为我设置了提取游戏tag的功能,所以每个游戏除了api信息还会访问一次商店界面——可以在这个环节顺便把开发商和发行商信息也抓取过来。但我最近可能没精力回顾这个项目了…
不过这个项目的代码都是可以二改的!如果有一些python和html基础的话可以试试增加这部分功能,应该不会特别困难~
ºd 23 Jun @ 2:12am 
@kaikisen 谢谢你的解答:LIS_pixel_heart:。我也觉得第一个成就解锁时间是比较接近首次游玩日期的,有个大概时间也不错。请问游戏开发商、发行商也能通过这种方式提取吗?
kaikisen  [author] 23 Jun @ 1:35am 
@ºd 是的!实际上在库中界面下拉可以看得到“xxx第一次游玩xxx”的信息,但这个信息除了在动态信息流中展示外,并不记录在api或其他通用界面上,所以很难获取到这个信息。

除了标记成就最初解锁日期外,我还考虑过标记入库/购买游戏的日期,但是考虑到很多用户应该也(和我一样)是入库不玩或者入库很久之后才拿出来清灰的…所以综合考虑了一下还是用前者来记录最初游玩的大致日期比较贴切。