编写 Alfred 脚本成就达成

date
Jul 14, 2023
slug
AlfredWorkFlows
status
Published
tags
碎碎念
summary
type
Post
notion image
以前我总想自己写一个 Alfred 的脚本,但是苦于没有找到合适的资料,根本不知道如何入门。
现在 Chatgpt + 沉浸式翻译 完美解决问题。
驱动我做这件事情的还得是 Apple 公司,之前 macOS M1 版本的默认的 PHP 版本是可以使用 Alfred 的脚本的,我的很多脚本都是从网上搜来的,现在 macOS 直接把低版本的 PHP 废弃了,相应的 Alfred 脚本也不能使用了,我在经历了几天的痛苦之后,实在受不了了,就花了点时间用 Chatgpt + 沉浸式翻译,写出来了一个自己的 Alfred 的脚本,而且由于脚本本身不难写,难的是和 Alfred 之间的交互。现在这一步的秘密也被我搞通了,后面就是各种需求了。
完成之后,回头看,发现脚本和 Alfred 之间的交互也并不难,只是一个 JSON 而已,但是苦于之前不知道,一直在原地转圈。
刚才完成的脚本是:
  • 输入 now ,返回一个当前的秒时间戳
  • 输入具体的秒级时间戳,将其格式化并输出
 
#!/usr/bin/env python3

import datetime
import sys
import json
import time


result_array = []

def main(useTime):
    result_item = {}
    # get current time
    now = datetime.datetime.now()
    if useTime != -1:
        ts = int(useTime)
        dt = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(ts))
        result_item['title'] = str(dt)
        result_item['arg'] = str(dt)
        result_array.append(result_item)
        print(json.dumps({'items': result_array}))

        return
    ts = int(time.time())
    result_item['title'] = str(ts)
    result_item['subtitle'] = str(now)
    result_item['arg'] = str(ts)
    result_array.append(result_item)
    print(json.dumps({'items': result_array}))


# run main function 2023-07-14 16:46:42.801999
if __name__ == '__main__':
    args = sys.argv
    if len(args) > 1:
        if args[1] == 'now':
            main(-1)
        else:
            main((args[1]))
和 Alfred 交互的 JSON 格式为:
{
  "items": [
    {
      "uid": "desktop",
      "type": "file",
      "title": "Desktop",
      "subtitle": "~/Desktop",
      "arg": "~/Desktop",
      "autocomplete": "Desktop",
      "icon": {
        "type": "fileicon",
        "path": "~/Desktop"
      }
    },
    {
      "valid": false,
      "uid": "flickr",
      "title": "Flickr",
      "icon": {
        "path": "flickr.png"
      }
    },
    {
      "uid": "image",
      "type": "file",
      "title": "My holiday photo",
      "subtitle": "~/Pictures/My holiday photo.jpg",
      "autocomplete": "My holiday photo",
      "icon": {
        "type": "filetype",
        "path": "public.jpeg"
      }
    },
    {
      "valid": false,
      "uid": "alfredapp",
      "title": "Alfred Website",
      "subtitle": "https://www.alfredapp.com/",
      "arg": "alfredapp.com",
      "autocomplete": "Alfred Website",
      "quicklookurl": "https://www.alfredapp.com/",
      "mods": {
        "alt": {
          "valid": true,
          "arg": "alfredapp.com/powerpack",
          "subtitle": "https://www.alfredapp.com/powerpack/"
        },
        "cmd": {
          "valid": true,
          "arg": "alfredapp.com/powerpack/buy/",
          "subtitle": "https://www.alfredapp.com/powerpack/buy/"
        }
      },
      "text": {
        "copy": "https://www.alfredapp.com/ (text here to copy)",
        "largetype": "https://www.alfredapp.com/ (text here for large type)"
      }
    }
  ]
}
2023-07-18 更新
提供一些常用的 Workflow,均是在原有的 php 的基础上改的,作者信息保留在包里,其中 TimestampPy.alfredworkflow 是我自己写的,原作者的不小心删了。
2023-07-26 更新,原作者信息保留在包里
 

© Craig Hart 2021 - 2025