为了一滴醋,包了一顿饺子 -- V2EX 自动换头像脚本 - 开源 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Wxh16144
V2EX    分享创造

为了一滴醋,包了一顿饺子 -- V2EX 自动换头像脚本 - 开源

  •  
  •   Wxh16144
    Wxh16144 2025 年 12 月 31 日 1664 次点击

    我做了一个定期自动修改 V2EX 头像的油猴脚本,开源,文末有链接。

    缘起

    前几天摸鱼逛 v2ex, 看完几个热帖后,一阵空虚。盯着自己的头像发呆(用了站内之前很火的丑丑头像)

    突然产生了一个想法:丑丑头像有那么多随机生成的风格,如果能每天自动换一个,不仅每天都有新鲜感,还能顺便给身份增加一点“神秘感”。

    简单调研后发现,V2EX 的官方 API 并没有提供修改头像的接口。不过,在观察 setting/avatar 页面时,我发现可以直接通过 POST 请求上传头像。于是我尝试让 DeepSeek 帮我写了一个简单的浏览器控制台脚本,测试发现确实可行。

    deepseek

    脚本还是扩展

    前面到这里其实已经够用了,js 丢 Gist 想用的时候复制粘贴到控制台运行一下就足够了,但是前面说了摸鱼把帖子都看完了,两句话让 AI 写了一个 js 脚本后,又没事干了。继续空虚...

    我开始设想:能不能把这个功能分享给更多人?如果要做成工具,就需要更多的自定义选项,比如:设置更新频率、选择头像来源、记录历史等。

    通常这类需求会做成浏览器插件,但考虑到核心功能仅仅是修改头像,做成插件未免有些大材小用,于是我最终选择了 油猴脚本( Tampermonkey ) 作为载体。

    在设计设置页面时,我产生了一个更通用的想法:将其定位为一个 UI toolkit。通过一套通用的配置 UI ,让用户可以轻松设置每日头像的信息。这样,这套逻辑不仅能用于 V2EX ,后续也可以扩展到知乎、微博、掘金等更多社区平台。

    UI Toolkit 的实现

    为了保证工具的易用性与扩展性,用 Vite + Preact + Zustand + TailwindCSS 构建了一个轻量化的设置页面,支持多种类型的设置项,并将其发布到了 npm 上。

    写油猴脚本的时候只需要将 UI 包以 @require 的形式引入即可。随后将 UI 注册到全局 window 对象上,方便油猴脚本调用。

    效果图:

    后端支撑 (Avatar Server)

    原“丑丑头像”作者提供的是 GitHub Pages 静态站点,缺乏方便脚本直接调用的 API 。为了解决图片来源问题,我在站内搜索到了 t/1042483 这篇帖子。

    作者用 nextjs 写了一个头像服务器,提供了 api 能力,非常方便。但是后面我想自己本地部署发现没有提供 docker 之类的部署方式。于是我参考作者的代码,用 koa 重写了一部分逻辑。

    其实一开始也是奔着部署在腾讯的 edgeone serverless 上,才用了 koa ,不过因为域名备案也就作罢,用 GitHub actions 构建镜像到 Docker hub 上。还是用传统容器的方式部署在腾讯云服务器上。用 nginx 做反向代理。

    以上,nodejs 写的头像服务貌似还有性能问题,后续有时间再优化吧。

    效果图:

    V2EX 油猴脚本

    有了前面的铺垫,油猴脚本本身的实现就变得非常纯粹:主要逻辑是获取生成的头像图片,然后将其上传至 V2EX ,并注册几个方便用户操作的菜单项。

    总结

    从萌发想法到最终落地,前后大概花了一周的时间。整个过程有些“本末倒置”:为了写一个简单的油猴脚本,我先去开发了一套 UI Toolkit ,又去搭了一个后端服务。

    本身白嫖了 GitHub Copilot Pro 服务,月底了还剩很多高级请求没用,刚好这次派上用场。大部分代码还是 ai 帮我写的,节省了不少时间。

    整体来说,还是挺有意思的一个项目。后续有时间会继续完善这个脚本,拓展到其他平台头像的修改。

    顺便提一句,每日头像不一定是丑丑头像合集,也可以是其他头像生成服务,可以到 http://dicebear.com/styles 看看。

    相关链接

    特别鸣谢

    第 1 条附言    2025 年 12 月 31 日
    评论区有人提到浏览器扩展,其实一开始我也纠结是扩展还是油猴脚本, 我选择后者是因为,有很多人其实是反感拓展的,因为不能直接看到 js 脚本。(包括我自己)

    一开始也想将这个每日头像功能提 PR 到 V2EX Polish ,像每日签到那样集成进去。

    不过有 ai 加持,写一个浏览器扩展也不复杂,都提供给大家选择就好了。

    好多想法其实还没落地,趁 2025 年末先发出来大家看看,后面元旦可能偷懒就不去做了 2333 ~
    第 2 条附言    2025 年 12 月 31 日
    最新版本 `0.0.1-alpha.3` 已经实现 “一周心情表” 头像组了.

    内置了评论区提到的打工猫抽象模版

    也支持本地选择图片,自己编排一周 7 天的头像了。

    ![]( )

    玩得愉快,明年见~
    11 条回复    2025-12-31 18:20:37 +08:00
    Ericality
        1
    Ericality  
       2025 年 12 月 31 日
    利用 https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1 连接 可以获取到对应的图片 url 其中利用"url":"/th?id=OHR.GermanyNewYear_ZH-CN9155122755_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp" 字段 可以拼接到 bing.com 获取当前的壁纸 那是不是可以调用这个 api 将图片源换成 bing 壁纸 hhhh
    lns04226
        2
    lns04226  
       2025 年 12 月 31 日
    好用,做到了真正匿名化,要是 V2 可以改名字也免费就好了,每天都是一个匿名身份/div>
    Wxh16144
        3
    Wxh16144  
    OP
       2025 年 12 月 31 日
    下一步做一个每周 7 天 7 张图的功能,把那个 “今天周五” 塞头像里面。周五看到格外兴奋了

    igugedaili
        4
    igugedaili  
       2025 年 12 月 31 日   1
    申请 OP 给 2Libra.com 安排一下。OP 今天注册发 2 个帖子或 5 个评论的话还能领取「种子用户」徽章。

    注册用我的邀请,我能获得 500 金币,你可以额外获得 1000 金币。
    https://2libra.com/auth/signup/89PPLFI02
    hellodigua
        5
    hellodigua  
       2025 年 12 月 31 日   1
    @Wxh16144 你可以把 momo 头像也加入里面,这样大家统一用一个头像,也很有意思
    Wxh16144
        6
    Wxh16144  
    OP
       2025 年 12 月 31 日   1
    @hellodigua momo 只有一种样式,如果也有 api 可以随机调用就好了。还是先安排 "一周好心情头像" , 小红书作者:呼噜噜^

    oppoic
        7
    oppoic  
       2025 年 12 月 31 日
    浏览器插件更好,本地开发,用开发者模式加载到浏览器即可。我的私人需求都放到一个插件里了:



    油猴脚本的麻烦和不利于推广的地方在于:要先安装油猴这个插件
    CSGO
        8
    CSGO  
       2025 年 12 月 31 日
    这么说,我倒想让 Stema 头像每天换,是否可行?
    xh16144
        9
    Wxh16144  
    OP
       2025 年 12 月 31 日
    @CSGO 不如直接本地写 shell 脚本,然后用 crontab 每天更新一下。

    我这个脚本的形式主要还是要人去每天打开网站然后去修改头像。
    igugedaili
        10
    igugedaili  
       2025 年 12 月 31 日
    @Wxh16144 #6 这组头像好,要是微信 QQ 啥的也能支持就好了
    igugedaili
        11
    igugedaili  
       2025 年 12 月 31 日
    @oppoic #7 这个麻烦的地方在于,要单独下载扩展,并且让用户以开发者模式加载扩展,不管是信任问题还是后续更新都不好办,对用户来说成本更高了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2255 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 01:17 PVG 09:17 LAX 17:17 JFK 20:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86