diff --git a/caa (1).sh b/caa (1).sh new file mode 100644 index 0000000..a8835e8 --- /dev/null +++ b/caa (1).sh @@ -0,0 +1,87 @@ +#!/bin/bash + +PRINTER_DEVICE="/dev/usb/lp0" # 热敏打印机设备路径 + +# ESC/POS 指令部分 +ESC=$(echo -e "\x1b") # ESC 字符 +RESET="${ESC}@" +BOLD_ON="${ESC}E\x01" +BOLD_OFF="${ESC}E\x00" +CENTER="${ESC}a\x01" +LEFT_ALIGN="${ESC}a\x00" +DOUBLE_HEIGHT="${ESC}!\x10" # 双倍高度 +DOUBLE_WIDTH="${ESC}!\x20" # 双倍宽度 +NORMAL_SIZE="${ESC}!\x00" +CUT_PAPER="${ESC}i" # 切纸指令 + + +# 定义目标URL +URL="https://www.caanet.org.cn/news.mx?id=3" +LAST_URL_FILE="/volume2/docker/last_full_url.txt" + +# 使用curl抓取网页内容 +page_content=$(curl -s "$URL") + +# 使用htmlq调用htmlq根据CSS选择器提取第一条条目的标题和相对网址 +title=$(echo "$page_content" | /volume2/docker/htmlq '#AjaxList > li:nth-child(1) > a' --text) +relative_url=$(echo "$page_content" | /volume2/docker/htmlq '#AjaxList > li:nth-child(1) > a' --attribute href) + +# 拼接完整网址 +full_url="https://www.caanet.org.cn/$relative_url" + +# 检查文件是否存在,如果不存在则创建 +if [ ! -f "$LAST_URL_FILE" ]; then + touch "$LAST_URL_FILE" +fi + +# 读取文件中上次的URL +last_url=$(cat "$LAST_URL_FILE") + +# 比较full_url和上次的URL +if [ "$full_url" == "$last_url" ]; then + echo "条目未更新,不输出内容。" +else + + # 使用curl抓取条目详情页内容 + details_content=$(curl -s "$full_url") + + # 调用htmlq根据CSS选择器提取内容,并截取“截稿时间”向后的25个字 + deadline_info=$(echo "$details_content" | /volume2/docker/htmlq '#contentWap > div.page_r' --text | sed -n 's/.*截稿时间\([^截稿时间]*\)\(.\{0,512\}\).*/\1\2/p') + + # 输出结果 + echo "标题: $title" + echo "相对网址: $relative_url" + echo "完整网址: $full_url" + echo "截稿时间: $deadline_info" + deadline="截稿时间""$deadline_info" + + # 格式化打印内容 + + # 重置打印机状态 + echo -ne "$RESET" > "$PRINTER_DEVICE" + + # 打印五行空白 + echo -e "\n\n\n" > "$PRINTER_DEVICE" + + # 打印居中的加粗标题,双倍高度和宽度 + echo -ne "$CENTER$BOLD_ON$DOUBLE_HEIGHT$DOUBLE_WIDTH" > "$PRINTER_DEVICE" + echo "$title" | iconv -f UTF-8 -t GBK > "$PRINTER_DEVICE" + echo -ne "$RESET" > "$PRINTER_DEVICE" # 复位到正常大小和状态 + + # 打印左对齐的描述 + echo -ne "$LEFT_ALIGN$NORMAL_SIZE" + echo -e "\n" > "$PRINTER_DEVICE" + echo -ne "$full_url" > "$PRINTER_DEVICE" + echo -e "\n" > "$PRINTER_DEVICE" + echo "$(echo "$deadline" | iconv -f UTF-8 -t GBK)" > "$PRINTER_DEVICE" + echo -ne "$RESET" # 复位打印机状态 + + # 打印五行空白 + echo -e "\n\n\n\n\n" > "$PRINTER_DEVICE" + + # 切纸 + echo -ne "$CUT_PAPER" > "$PRINTER_DEVICE" + + # 更新文件中的URL + echo "$full_url" > "$LAST_URL_FILE" +fi \ No newline at end of file diff --git a/escpos-debug.sh b/escpos-debug.sh new file mode 100644 index 0000000..6b6834d --- /dev/null +++ b/escpos-debug.sh @@ -0,0 +1,107 @@ +#!/bin/bash + +# 配置部分 +RSS_URL="https://www.appinn.com/feed/" # 替换为你的RSS源地址 +LAST_CHECK_FILE="/volume2/Material/last_check.txt" # 用于存储上次检查的时间戳 +PRINTER_DEVICE="/dev/usb/lp0" # 热敏打印机设备路径 + +# ESC/POS 指令部分 +ESC=$(echo -e "\x1b") # ESC 字符 +RESET="${ESC}@" +BOLD_ON="${ESC}E\x01" +BOLD_OFF="${ESC}E\x00" +CENTER="${ESC}a\x01" +LEFT_ALIGN="${ESC}a\x00" +DOUBLE_HEIGHT="${ESC}!\x10" # 双倍高度 +DOUBLE_WIDTH="${ESC}!\x20" # 双倍宽度 +NORMAL_SIZE="${ESC}!\x00" +CUT_PAPER="${ESC}i" # 切纸指令 + +# 指定日期格式 +START_DATE="2024-09-01T00:00:00Z" # 替换为指定的起始时间(UTC格式) +echo "初始查询时间:$START_DATE" + +# 获取上次查询时间 +if [ -f "$LAST_CHECK_FILE" ]; then + LAST_CHECK=$(cat "$LAST_CHECK_FILE") +else + LAST_CHECK="$START_DATE" +fi +echo "上次查询时间:$LAST_CHECK" + +# 下载RSS源 +RSS_CONTENT=$(curl -s "$RSS_URL") +echo "RSS源内容下载完成,长度:${#RSS_CONTENT}" + +# 将RSS内容转换为单行 +#SINGLE_LINE_RSS_CONTENT=$(echo "$RSS_CONTENT" | tr -d '\n' | tr -d '\r' | tr -s ' ') + +# 提取 , <pubDate>, 和 <description> 的内容 +mapfile -t TITLE_ARRAY < <(echo "$RSS_CONTENT" | grep -oE '<title>[^<]+' | sed -e 's/<\/\?title>//g') +mapfile -t PUBDATE_ARRAY < <(echo "$RSS_CONTENT" | grep -oE '[^<]+' | sed -e 's/<\/\?pubDate>//g') +mapfile -t DESCRIPTION_ARRAY < <(echo "$RSS_CONTENT" | grep -oE '.+' | sed -e 's/<\/\?description>//g' -e 's///g') +#TITLE_ARRAY=($(echo "$RSS_CONTENT" | grep -oE '[^<]+' | sed 's/<[^>]*>//g')) +#PUBDATE_ARRAY=($(echo "$RSS_CONTENT" | grep -oE '[^<]+' | sed 's/<[^>]*>//g')) +#DESCRIPTION_ARRAY=($(echo "$RSS_CONTENT" | grep -oE '[^<]+' | sed -e 's/<[^>]*>//g')) + +# 获取数组的长度(假设每个数组长度相同) +ITEM_COUNT=${#TITLE_ARRAY[@]} + +for (( i=0; i<$ITEM_COUNT; i++ )); do + t=$i+1 + TITLE="${TITLE_ARRAY[$t]}" + PUB_DATE="${PUBDATE_ARRAY[$i]}" + DESCRIPTION="${DESCRIPTION_ARRAY[$t]}" + + echo "处理一个新项目..." + echo "项目发布日期:$PUB_DATE" + echo "项目标题:$TITLE" + echo "项目描述(前180字):$(echo "$DESCRIPTION" | cut -c1-180)" + + # 将发布时间转为Unix时间戳 + CLEAN_PUB_DATE=$(echo "$PUB_DATE" | sed 's/,//') + PUB_DATE_TIMESTAMP=$(date -d "$CLEAN_PUB_DATE" +%s 2>/dev/null) + + if [ -z "$PUB_DATE_TIMESTAMP" ]; then + echo "日期解析失败,跳过该项目。" + continue + fi + + LAST_CHECK_TIMESTAMP=$(date -d "$LAST_CHECK" +%s) + + echo "项目发布时间戳:$PUB_DATE_TIMESTAMP" + echo "上次查询时间戳:$LAST_CHECK_TIMESTAMP" + + # 如果发布时间比上次查询时间更新,则抓取内容 + if [ "$PUB_DATE_TIMESTAMP" -gt "$LAST_CHECK_TIMESTAMP" ]; then + # 格式化打印内容 + { + # 重置打印机状态 + echo -ne "$RESET" + + # 打印居中的加粗标题,双倍高度和宽度 + echo -ne "$CENTER$BOLD_ON$DOUBLE_HEIGHT$DOUBLE_WIDTH" + echo "$TITLE" | iconv -f UTF-8 -t GBK + echo -ne "$RESET" # 复位到正常大小和状态 + + # 打印左对齐的描述,仅前180个字符 + echo -ne "$LEFT_ALIGN$NORMAL_SIZE" + echo "$(echo "$DESCRIPTION" | iconv -f UTF-8 -t GBK)" + echo -ne "$RESET" # 复位打印机状态 + + # 打印五行空白 + echo -e "\n\n\n\n\n" + + # 切纸 + echo -ne "$CUT_PAPER" + + } > "$PRINTER_DEVICE" + echo "项目打印完成。" + else + echo "项目未更新,无需打印。" + fi +done + +# 更新查询时间 +date -u +"%Y-%m-%dT%H:%M:%SZ" > "$LAST_CHECK_FILE" +echo "查询时间已更新为:$(cat "$LAST_CHECK_FILE")" diff --git a/htmlq (2) b/htmlq (2) new file mode 100644 index 0000000..42fdb2e Binary files /dev/null and b/htmlq (2) differ