parent
0b132b950d
commit
a17ad3824a
|
@ -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
|
|
@ -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 ' ')
|
||||||
|
|
||||||
|
# 提取 <title>, <pubDate>, 和 <description> 的内容
|
||||||
|
mapfile -t TITLE_ARRAY < <(echo "$RSS_CONTENT" | grep -oE '<title>[^<]+</title>' | sed -e 's/<\/\?title>//g')
|
||||||
|
mapfile -t PUBDATE_ARRAY < <(echo "$RSS_CONTENT" | grep -oE '<pubDate>[^<]+</pubDate>' | sed -e 's/<\/\?pubDate>//g')
|
||||||
|
mapfile -t DESCRIPTION_ARRAY < <(echo "$RSS_CONTENT" | grep -oE '<description>.+</description>' | sed -e 's/<\/\?description>//g' -e 's/<!\[CDATA\[//g' -e 's/]]>//g')
|
||||||
|
#TITLE_ARRAY=($(echo "$RSS_CONTENT" | grep -oE '<title>[^<]+</title>' | sed 's/<[^>]*>//g'))
|
||||||
|
#PUBDATE_ARRAY=($(echo "$RSS_CONTENT" | grep -oE '<pubDate>[^<]+</pubDate>' | sed 's/<[^>]*>//g'))
|
||||||
|
#DESCRIPTION_ARRAY=($(echo "$RSS_CONTENT" | grep -oE '<description>[^<]+</description>' | 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")"
|
Loading…
Reference in New Issue