V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
hillerliao
V2EX  ›  分享创造

免装单词 App,在 iPhone 锁屏随机显示单词

  •  1
     
  •   hillerliao · 15 天前 · 1547 次点击

    亲爱的朋友们,你是否曾经为背单词而烦恼?是否觉得用手机时有很多零碎时间没有利用上?

    今天,我要给大家带来一个神奇的方法——免装单词 App ,在 iPhone 锁屏随机显示单词!这样,你每天解锁手机的时候,都能顺便瞟一眼单词,日积月累,词汇量自然水涨船高!

    有些背单词软件可能有提供这种功能,但通常有一些问题:单词列表不受自己控制,显示的内容无法自定义,搞不好还收费。

    今天我就来给大家介绍一种免费实现自定义锁屏单词小组件的办法。

    需要的工具

    • iPhone ;
    • Scriptable

    Scriptable 是一款 iOS 应用程序,允许用户使用 JavaScript 自动化构建和自定义桌面或锁屏小部件。

    得益于优秀的 Scriptable (苹果应用商店的开发者工具类排名前十),我们只需要写一点简单的基于 JavaScript 的脚本,就能干很多事情。

    脚本代码

    借助 ChatGPT ,把需求描述一番,很快就有了如下脚本:

    // 指定 RSS 源的 URL
    const url = "https://politepol.com/fd/f1NYOd8OAcsA.xml";
    
    // 使用 fetch 来获取 RSS 数据
    let req = new Request(url);
    let rssData = await req.loadString();
    
    // 输出 RSS 数据到日志
    console.log(rssData);
    
    // 使用正则表达式解析 RSS 中的内容,ChatGPT 给的参考代码中变量名为 title ,这里实际选择读取摘要。
    let titles = [];
    let regex = /<description>(.*?)<\/description>/g;
    let match;
    while ((match = regex.exec(rssData)) !== null) {
        titles.push(match[1]);
    }
    
    // 创建一个 Widget 展示 RSS 摘要
    let widget = new ListWidget();
    widget.backgroundColor = new Color("#1a1a1a");
    
    // 如果解析到的摘要为空,显示占位符
    if (titles.length === 0) {
        let placeholder = widget.addText("No RSS data available");
        placeholder.textColor = Color.white();
        placeholder.font = Font.systemFont(12);
    } else {
        // 添加 RSS 摘要到 Widget
        for (let i = 0; i < Math.min(titles.length, 3); i++) {
            let title = titles[i];
            let text = widget.addText(title);
            text.textColor = Color.white();
            text.font = Font.systemFont(12);
            widget.addSpacer(4);
        }
    }
    
    // 设置 Widget 定期刷新,设为 30 分钟。
    widget.refreshAfterDate = new Date(Date.now() + 1000 * 60 * 30);
    
    // 预览 Widget
    if (config.runsInWidget) {
        Script.setWidget(widget);
    } else {
        widget.presentMedium();
    }
    
    Script.complete();
    
    

    具体代码是什么意思,我们就不用管太多了,只需要注意替换数据源地址就行。上述示例的 RSS 地址 https://politepol.com/fd/f1NYOd8OAcsA.xml 系通过名为 politepol 的网页生成 RSS 服务将 https://pyrss.vercel.app/word/jlpt2页面的日语 N2 单词转换而成。如果想要英文单词,请联系我。

    你可以在 Scriptable 上先运行脚本以验证数据是否获取成功,然后再进行下一步的设置。

    设置为锁屏组件

    接下来,开始编辑锁屏界面。添加 Scriptable 小组件,并选取刚才添加到 Scriptable 的脚本,即告完成。

    更多可能

    也可以把小组件钉在手机桌面上。相比锁屏界面,桌面组件效果对样式要求更高,可以通过修改脚本中的样式代码让桌面小组件变得更加漂亮。

    此外,不仅仅是单词,天气、热搜、格言、倒数日之类的小组件,都可以借助 Scriptable 实现,核心就是换个数据和显示样式,本质都一样。只要你有想法,借助 ChatGPT 大概率能实现,一次不行,再试一次。

    如果觉得这篇文章有意思,对你有启发,欢迎点个赞。

    11 条回复    2024-10-09 21:16:55 +08:00
    kuihua
        1
    kuihua  
       15 天前 via iPhone
    可以分享下英语的吗,想试试
    whitecosm0s
        2
    whitecosm0s  
       15 天前
    我可以明确告诉你这种学习方式没有任何效果,但还是支持你的实践精神
    russ44
        3
    russ44  
       15 天前
    很 coolokok
    jstony
        4
    jstony  
       15 天前
    挺酷的,仅此而已,哈哈。
    jpyl0423
        5
    jpyl0423  
       15 天前
    虽然学单词用不上,不过这个软件 Scriptable 还挺有意思的,感觉能做其他的事情
    clintme
        6
    clintme  
       15 天前
    我之前也打算弄这么一个东西
    CHEN1016
        7
    CHEN1016  
       15 天前
    添加到锁屏需要 IOS18 吗,我在 17 锁屏小组件找不到这个 App
    hillerliao
        8
    hillerliao  
    OP
       15 天前
    @CHEN1016 应该不需要,锁屏小组件功能 ios18 以前就有。
    Jackyxiaoc
        9
    Jackyxiaoc  
       13 天前
    能不能有办法实现 不背单词就解锁不了手机。
    GeorgeShrek
        10
    GeorgeShrek  
       12 天前 via iPhone
    @kuihua 同求英语!谢谢
    GeorgeShrek
        11
    GeorgeShrek  
       4 天前 via iPhone
    @hillerliao #8 英语怎么弄,大佬教教我!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3158 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:22 · PVG 20:22 · LAX 05:22 · JFK 08:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.