你只需要配置好自己的bark推送密钥(当然可以自建bark 服务器端更安全),企业微信密钥,以及tgbot token还有tg id等相关,订阅源地址可以改成自己需要的,服务器定期执行,由于论坛这些帖子频率很高,我设置5分钟执行,每执行一次会在root目录下修改sent_links.txt,第一次执行会新建这个txt,主要目的是为了不让他重复发送。

另外我今天早上正在尝试一种零成本的方法(毕竟sh脚本还是需要服务器)去实现也就是部署在cloudflare workers或者pages的形式部署,但一直失败,也是说一下失败的思路吧,我先打算pages去执行xml解析并获取rss订阅源的最新内容,把sent_links.txt存储在cloudflare kv空间,然后实现不断的读取和增减操作,然后再用cloudflare pages去curl推送更新内容,之后也是一直报错,之后我想直接把shell脚本和sent_links.txt都放在GitHub仓库中,然后让cf pages去执行shell脚本,调用GitHub Api去实现不断的读取和增减操作达到更新sent_links.txt,在调用api还是出现问题,希望有熟悉cloudflare workers的佬友在有空的情况下能写一个cf大善人版本的,我也会继续尝试滴!

关于企业微信机器人key获取,tgbot token获取,我在下面贴几个链接,大家自己参考或者自行网上搜索
https://github.com/kxs2018/xiaoym/blob/main/获取企业微信群机器人key.md

https://www.cnblogs.com/xiangdongsheng/p/17261841.html

#!/bin/bash# 配置rss_urls=(    "https://rss.nodeseek.com"  # RSS 源地址    "https://rss-hub-lzhzones-projects.vercel.app/thepaper/featured"    "https://rsshub.rssforever.com/zaobao/realtime/china"    "https://linuxdorss.longpink.com/top.xml")bark_url="https://api.day.app/your_key/"  # Bark 推送 URLwechat_url="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_key"  # 企业微信 WebHook URLtelegram_bot_token="bot_token"  # Telegram Bot Tokentelegram_chat_id="Chat ID"  # Telegram Chat IDsent_links_file="/root/sent_links.txt"  # 已发送链接存储文件max_wechat_messages=20  # 企业微信每分钟最大推送数sleep_interval=60       # 延迟时间,秒wechat_count=0          # 已发送企业微信消息计数max_first_run_posts=20  # 第一次运行时的最大推送条数max_links_per_feed=100  # 每个订阅源保留的最大链接数# 检查依赖工具for cmd in curl jq xmlstarlet; do    if ! command -v "$cmd" &> /dev/null; then        echo "错误:未找到 $cmd,请先安装"        exit 1    fidone# 创建 sent_links_file 如果不存在if [[ ! -f "$sent_links_file" ]]; then    touch "$sent_links_file"    echo "创建 sent_links.txt 文件"    first_run=trueelse    first_run=falsefi# 读取已发送链接到一个数组中declare -A sent_linksif [[ -s "$sent_links_file" ]]; then    while IFS='|' read -r rss_url link; do        # 跳过空行        [[ -z "$rss_url" || -z "$link" ]] && continue        sent_links["$rss_url"]+="$link "    done < "$sent_links_file"else    echo "sent_links.txt 中未找到历史链接"fi# 用于去除HTML标签的函数strip_tags() {    echo "$1" | sed 's/<[^>]*>//g' | tr -d '\r'}# 获取 RSS 并汇总更新内容发送for rss_url in "${rss_urls[@]}"; do    echo "正在从 $rss_url 获取 RSS 源"    xml=$(curl -s --connect-timeout 10 --max-time 20 "$rss_url")        # 检查是否成功获取 RSS 数据    if [[ -z "$xml" ]]; then        echo "无法获取 $rss_url 的 RSS 数据,跳过"        continue    fi    titles=($(echo "$xml" | xmlstarlet sel -t -m "//item" -v "title" -n | tr -d '\r'))    links=($(echo "$xml" | xmlstarlet sel -t -m "//item" -v "link" -n | tr -d '\r'))    descriptions=($(echo "$xml" | xmlstarlet sel -t -m "//item" -v "description" -n | tr -d '\r'))    posts_sent=0    updated_links=()    telegram_message=""    bark_message=""    wechat_message=""    update_count=0    # 从最新的帖子开始处理,汇总更新内容    for ((i=0; i<${#links[@]}; i++)); do        link="${links[$i]}"        # 如果该链接已发送过,跳过当前链接        if [[ "${sent_links[$rss_url]}" =~ "$link" ]]; then            echo "链接 $link 已发送,跳过"            continue        fi        # 检查首次运行的最大推送限制        if [[ "$first_run" = true && $posts_sent -ge $max_first_run_posts ]]; then            echo "首次运行推送限制已达:已处理 $posts_sent 条消息"            break        fi        title="${titles[$i]}"        description=$(strip_tags "${descriptions[$i]}")  # 过滤掉所有HTML标签        ((update_count++))        # 构建 Telegram 消息(HTML 格式,标题加粗,链接可点击)        telegram_message+="$update_count. <b>$title</b>\n<a href=\"$link\">$link</a>\n$description\n\n"        # 构建 Bark 和企业微信消息(纯文本格式)        bark_message+="$update_count. $title\n$link\n$description\n\n"        wechat_message+="$update_count. $title\n$link\n$description\n\n"        updated_links+=("$link")        ((posts_sent++))    done    # 如果有更新,发送汇总消息    if [[ $update_count -gt 0 ]]; then        echo "为 $rss_url 找到 $update_count 条更新,发送汇总消息"        # 发送到 Bark        echo "发送到 Bark: $rss_url 的更新"        payload=$(jq -n --arg body "$bark_message" --arg title "RSS 更新: $rss_url" '{body: $body, title: $title, badge: 1, category: "myNotificationCategory", sound: "minuet.caf", icon: "https://day.app/assets/images/avatar.jpg", group: "test"}')        curl -s -X POST -H 'Content-Type: application/json; charset=utf-8' -d "$payload" "$bark_url"        # 发送到 Telegram        echo "发送到 Telegram: $rss_url 的更新"        curl -s -X POST "https://api.telegram.org/bot$telegram_bot_token/sendMessage" \            -d chat_id="$telegram_chat_id" \            -d text="<b>RSS 更新: $rss_url</b>\n\n$telegram_message" \            -d parse_mode="HTML" \            --connect-timeout 10 \            --max-time 20        # 发送到企业微信        echo "发送到企业微信: $rss_url 的更新"        wechat_payload=$(jq -n --arg text "RSS 更新: $rss_url\n\n$wechat_message" '{msgtype: "text", text: {content: $text}}')        response=$(curl -s -X POST -H "Content-Type: application/json" -d "$wechat_payload" "$wechat_url")        errcode=$(echo "$response" | jq -r '.errcode')        if [[ "$errcode" -eq 45009 ]]; then            echo "企业微信消息限制已达上限,暂停 $sleep_interval 秒..."            sleep "$sleep_interval"            wechat_count=0            # 重试发送企业微信消息            response=$(curl -s -X POST -H "Content-Type: application/json" -d "$wechat_payload" "$wechat_url")        fi        ((wechat_count++))        # 如果企业微信消息超过限制,延迟发送        if (( wechat_count >= max_wechat_messages )); then            echo "企业微信消息限制已达上限,暂停 $sleep_interval 秒..."            sleep "$sleep_interval"            wechat_count=0        fi    else        echo "没有新的更新内容需要发送 for $rss_url"    fi    # 更新链接记录    if [[ ${#updated_links[@]} -gt 0 ]]; then        # 保留最新的链接,并限制数量        all_links=(${updated_links[@]} ${sent_links[$rss_url]})        all_links=(${all_links[@]:0:$max_links_per_feed})        sent_links["$rss_url"]="${all_links[@]}"        # 将更新后的链接保存到文件        > "$sent_links_file"        for url in "${!sent_links[@]}"; do            for link in ${sent_links[$url]}; do                echo "$url|$link" >> "$sent_links_file"            done        done    fidoneecho "RSS 源处理完成"