定时抓取招聘信息推送到飞书机器人-v1.1.0

版本v1.0.0 实现中发现一些问题:

  • 发送给飞书的招聘列表 20 条,且格式很难抓住重点,阅读十分不友好
  • 推送策略不及时、重复的问题,每天定时推送 20 条,难免会有重复的,因为招聘网站更新的职位可能没多少。每天推送一次,及时性就很差

为了解决上面的问题,就有了 v1.1.0 版本:

  • 每隔 5分钟 执行一次,只推送 之前5分钟内 创建的招聘信息。
  • 飞书推送消息的格式改为: 消息卡片 ,且每条信息单独发送一条消息。

实现

  • 定时执行策略实际使用 4分钟 执行一次,而推送消息范围是 5分钟 内的, v2ex 的酷工作默认查询排序是按照最后回复时间进行排序的,所以排在前面的是有最新回复内容的,但是对于招聘信息,目前只关注发送的时间节点就行了,所以通过在详细页面获取发布时间,然后对比执行时间与发布时间的差值是否在 5分钟内 ,为了防止执行启动期间的数据丢失,所以使用 4分钟 执行一次,而非 5分钟 执行一次。
  • 实现中发现消息格式比较复杂,假如使用 struct 定义太麻烦,也不够灵活,所以引入了模版,通过模版文件构造飞书消息。后续其他需要复杂格式的数据体也都容易构造了。(需要注意飞书的消息格式内容需要进行转义或者去掉一些字符,不然会导致格式错误推送消息失败的问题。)
{
  "msg_type": "interactive",
  "card": {
    "config": {
      "wide_screen_mode": true
    },
    "elements": [
      {
        "tag": "div",
        "text": {
          "content": "_发布时间:_**{{.PublishTime}}**",
          "tag": "lark_md"
        }
      },
      {
        "tag": "hr"
      },
      {
        "tag": "div",
        "text": {
          "content": {{.Content}},
          "tag": "lark_md"
        }
      },
      {
        "tag": "hr"
      },
      {
        "actions": [
          {
            "tag": "button",
            "text": {
              "content": "原文链接",
              "tag": "plain_text"
            },
            "type": "default",
            "url": "{{.Url}}"
          }
        ],
        "tag": "action"
      }
    ],
    "header": {
      "template": "turquoise",
      "title": {
        "content": "{{.Num}}.  {{.Title}}",
        "tag": "plain_text"
      }
    }
  }
}
飞书消息卡片的模版
  • 另外为了防止多个条目同一批次发送时,不容易分辨,所以添加了发布时间以及序号在消息中。在时间处理这块需要注意的是 Github Action 定时执行的时区问题, v2ex 抓取的数据条目中的日期是东八区的时间,所以对比的时候要先进行同时区转换再进行比较。
GitHub - lyf-coder/job-opportunity-reminder at v1.1.0
爬取招聘网站上的招聘信息,然后推送到飞书等通讯工具. Contribute to lyf-coder/job-opportunity-reminder development by creating an account on GitHub.