调整无法获取图源导致推送失败的BUG

master
panqihua 1 year ago
parent 6a9f93d6fd
commit a0a92ddbbd
  1. 198
      pixiv/pixiv.sh

@ -1,55 +1,5 @@
#!/bin/bash
config_file=$1
if [ -z $config_file ]; then
echo 'The cache directory must be specified'
exit 1
fi
if [ ! -f $config_file ]; then
echo 'config file:$config_file not found'
exit 1
fi
if [ ! -f $(which jq) ]; then
echo 'To run this script, you need to install jq,https://stedolan.github.io/jq/'
exit 1
else
echo "jq version:$(jq --version)"
fi
if [ ! -f $(which xmlstarlet) ]; then
echo 'To run this script, you need to install xmlstarlet,http://xmlstar.sourceforge.net/docs.php'
exit 1
else
echo "xmlstarlet version:$(xmlstarlet --version)"
fi
# ==================== Config ====================
Host=$(cat $config_file | jq -r .aliyun_oss.Host)
accelerateHost=$(cat $config_file | jq -r .aliyun_oss.accelerateHost)
bucketname=$(cat $config_file | jq -r .aliyun_oss.bucketname)
AccessKeyId=$(cat $config_file | jq -r .aliyun_oss.AccessKeyId)
AccessKeySecret=$(cat $config_file | jq -r .aliyun_oss.AccessKeySecret)
db_file=$(cat $config_file | jq -r .aliyun_oss.db)
db_file_err=$db_file.err
imageParam=$(cat $config_file | jq -r .aliyun_oss.imageParam)
backup_time=$(cat $config_file | jq -r .aliyun_oss.backup_time)
error_file=$(cat $config_file | jq -r .aliyun_oss.error_file)
convertio_apikey=$(cat $config_file | jq -r .convertio.apikey)
CronitorKey=$(cat $config_file | jq -r .Cronitor.API_KEY)
CronitorJobName=$(cat $config_file | jq -r .Cronitor.JOB_NAME)
basePath=$(cat $config_file | jq -r .basePath)
if [ ! -f $basePath ]; then
mkdir -p $basePath
fi
# ================================================
cd $basePath
if [ ! -f $db_file ]; then
touch $db_file
fi
function PutObject() {
VERB="PUT"
file=$1
@ -118,12 +68,6 @@ function DeleteMultipleObjects() {
else
echo "${backup_time}天以前的图片删除失败"
fi
echo '' >$db_file
GetBucketV2 | xmlstarlet select -t -m '/ListBucketResult//Contents' -v 'Key' -n | while read line; do
if [ $line != "$error_file" ]; then
echo $line >>$db_file
fi
done
else
echo "没有${backup_time}天以前的图片需要删除"
fi
@ -139,17 +83,19 @@ function fileSizeStr() {
}
function Request() {
original_param="$1"
while true; do
echo "发送消息命令:$1"
result=$(bash -c "$1")
echo "发送消息命令:$original_param"
result=$(bash -c "$original_param")
echo "请求响应:$result"
if [ $(echo $result | jq .ok) = true ]; then
return 1
elif [ $(echo $result | jq .error_code) -eq 429 ]; then
second=$(echo $result | jq .parameters.retry_after)
echo "${second}秒后再发起请求"
sleep $second
echo "${second}后再发起请求"
Request $1
retry_result=$(Request "$original_param")
return "$retry_result"
else
echo "执行命令遇到未知错误!"
return 0
@ -157,6 +103,63 @@ function Request() {
done
}
config_file=$1
if [ -z $config_file ]; then
echo 'The cache directory must be specified'
exit 1
fi
if [ ! -f $config_file ]; then
echo 'config file:$config_file not found'
exit 1
fi
if [ ! -f $(which jq) ]; then
echo 'To run this script, you need to install jq,https://stedolan.github.io/jq/'
exit 1
else
echo "jq version:$(jq --version)"
fi
if [ ! -f $(which xmlstarlet) ]; then
echo 'To run this script, you need to install xmlstarlet,http://xmlstar.sourceforge.net/docs.php'
exit 1
else
echo "xmlstarlet version:$(xmlstarlet --version)"
fi
# ==================== Config ====================
Host=$(cat $config_file | jq -r .aliyun_oss.Host)
accelerateHost=$(cat $config_file | jq -r .aliyun_oss.accelerateHost)
bucketname=$(cat $config_file | jq -r .aliyun_oss.bucketname)
AccessKeyId=$(cat $config_file | jq -r .aliyun_oss.AccessKeyId)
AccessKeySecret=$(cat $config_file | jq -r .aliyun_oss.AccessKeySecret)
db_file=$(cat $config_file | jq -r .aliyun_oss.db)
db_file_err=$db_file.err
imageParam=$(cat $config_file | jq -r .aliyun_oss.imageParam)
backup_time=$(cat $config_file | jq -r .aliyun_oss.backup_time)
error_file=$(cat $config_file | jq -r .aliyun_oss.error_file)
convertio_apikey=$(cat $config_file | jq -r .convertio.apikey)
CronitorKey=$(cat $config_file | jq -r .Cronitor.API_KEY)
CronitorJobName=$(cat $config_file | jq -r .Cronitor.JOB_NAME)
basePath=$(cat $config_file | jq -r .basePath)
if [ ! -f $basePath ]; then
mkdir -p $basePath
fi
# ================================================
cd $basePath
if [ ! -f $db_file ]; then
touch $db_file
fi
echo '' >$db_file
GetBucketV2 | xmlstarlet select -t -m '/ListBucketResult//Contents' -v 'Key' -n | while read line; do
if [ $line != "$error_file" ]; then
echo $line >>$db_file
fi
done
telegramToken=$(cat $config_file | jq -r .telegramToken)
baseApi="https://api.telegram.org/bot$telegramToken"
chat_id=$(cat $config_file | jq .chatId)
@ -220,10 +223,10 @@ for index in $(seq 1 $length); do
egrep -o "content='{\"timestamp.*" $png_html_file | sed -e "s/content='//" | sed -e "s/..$//" >$json_file
fi
pageCount=$(jq --arg pid $pid '.illust[$pid].pageCount' $json_file)
original_url=$(jq -r --arg pid $pid '.illust[$pid].urls.original' $json_file)
small_url=$(jq -r --arg pid $pid '.illust[$pid].urls.small' $json_file)
title=$(jq -r --arg pid $pid '.illust[$pid].title' $json_file | sed -e 's/\"/\\\"/g' | sed -e 's/<//g' | sed -e 's/>//g')
title=$(bash -c "echo '$title'|$rule")
small_url=$(jq -r --arg pid $pid '.illust[$pid].urls.small' $json_file)
description=$(jq -r --arg pid $pid '.illust[$pid].description' $json_file)
userName=$(jq -r --arg pid $pid '.illust[$pid].userName' $json_file | sed -e 's/\"/\\\"/g')
userName=$(bash -c "echo '$userName'|$rule")
@ -246,13 +249,22 @@ for index in $(seq 1 $length); do
tag=$(jq -r --arg pid $pid '.illust[$pid].tags.tags[].tag' $json_file | sed -e 's/^/\\#/g' | sed ':a;N;s/\n/ /;t a;' | sed 's/"/\\"/g')
tag=$(bash -c "echo '$tag'|$rule")
original_url=$(jq -r --arg pid $pid '.illust[$pid].urls.original' $json_file)
echo -e "pageCount=$pageCount,original_url=$original_url,small_url=$small_url\n\
title=$title,description=$description,userName=$userName\n\
likeCount=$likeCount,bookmarkCount=$bookmarkCount,viewCount=$viewCount\n\
tag=$tag"
title=$title,description=$description,userName=$userName\n\
likeCount=$likeCount,bookmarkCount=$bookmarkCount,viewCount=$viewCount\n\
tag=$tag"
for page in $(seq 1 $pageCount); do
page=$((page - 1))
if [[ "$original_url" == "null" ]]; then
echo "未能找到原始图片链接"
url="https://$bucketname.$accelerateHost/$error_file?x-oss-process=image/watermark,text_$(echo "画作pid:$pid" | base64),g_center,voffset_50/watermark,text_5Zu-5rqQ5p-l5om-5aSx6LSlCg==,g_center,voffset_-50"
webp_file_name="${pid}.webp"
echo "文字水印请求url:$url,写入文件:${webp_file_name}"
curl -v $url -o $webp_file_name
media="$media,{\"type\":\"photo\",\"media\":\"attach://$webp_file_name\",\"parse_mode\":\"HTML\",\"caption\":\"$rank_info\n<a href=\\\"$artworkLink\\\">$title</a>\n<a href=\\\"https://www.pixiv.net/users/$userId\\\">$userName</a>\n$tag\"}"
else
page=0
page_original_url=$(echo $original_url | sed -e "s/p0/p$page/")
page_small_url=$(echo $small_url | sed -e"s/p0/p$page/")
original_file_name=$(echo $page_original_url | egrep -o "$pid.*")
@ -284,10 +296,11 @@ for index in $(seq 1 $length); do
echo "压缩无效,返回异常图片"
FileSize=$(fileSizeStr $compress_size)
url="https://$bucketname.$accelerateHost/$error_file?x-oss-process=image/watermark,text_$(echo "画作pid:$pid" | base64),g_north/watermark,text_$(echo 因为图片文件体积:${FileSize}不合法 | base64 | sed 's/+/-/g; s,/,_,g'),color_FF0000,y_50,g_north/watermark,text_5omA5Lul57yp55Wl5Zu-5peg5rOV5LiK5Lyg5YiwdGVsZWdyYW0=,color_FF0000,y_100,g_north/watermark,text_5bi46KeB5LqO6LaF6auY5YOP57Sg5Zu-54mH,y_150,g_north/watermark,text_5rOo5oSP77ya4oCc6aKE6KeI5Y6f5Zu-4oCd44CB4oCc5Yqg6YCf5LiL6L295Y6f5Zu-4oCd,color_008800,y_200,g_north/watermark,text_5Lul5LiK5Yqf6IO954Wn5bi45L2_55So,color_008800,y_250,g_north"
echo "文字水印请求url:$url"
echo "文字水印请求url:$url,写入文件:${webp_file_name}"
curl -v $url -o $webp_file_name
else
echo $result | jq .data.output.url | xargs curl -v -o $webp_file_name
echo "压缩图片写入文件:${webp_file_name}"
original_file_name=$webp_file_name
fi
break
@ -321,34 +334,33 @@ for index in $(seq 1 $length); do
fi
fi
if [ $page -eq 0 ]; then
info_file=$original_file_name.info
curl -v -o $info_file https://$bucketname.$Host/$original_file_name?x-oss-process=image/info
FileSize=$(fileSizeStr $(cat $info_file | jq -r .FileSize.value))
ImageHeight=$(cat $info_file | jq -r .ImageHeight.value)
ImageWidth=$(cat $info_file | jq -r .ImageWidth.value)
media="$media,{\"type\":\"photo\",\"media\":\"attach://$webp_file_name\",\"parse_mode\":\"HTML\",\"caption\":\"$rank_info\n<a href=\\\"$artworkLink\\\">$title</a>\n<a href=\\\"https://www.pixiv.net/users/$userId\\\">$userName</a>\n$tag\n原图分辨率:${ImageWidth}X${ImageHeight}(宽X高),文件体积:$FileSize,<a href=\\\"https://$bucketname.$Host/$original_file_name\\\">预览原图</a> <a href=\\\"https://$bucketname.$accelerateHost/$original_file_name\\\">加速下载原图</a>\"}"
fileList="$fileList -F $webp_file_name=@$webp_file_name"
fileCount=$((fileCount + 1))
fileSize=$(du $webp_file_name | awk '{print $1}')
echo "fileCount=$fileCount"
fi
if [[ $fileCount -eq $maxFileCount ]]; then
Request "curl -v -F chat_id=$chat_id $fileList -F media='[$(echo $media | cut -c 2-)]' $baseApi/sendMediaGroup"
if [ $(echo $?) -eq 1 ]; then
sleep $sleepImage
text="以上作品日榜排名分别是 #排名${start_rank}_${end_rank} #rank${start_rank}_${end_rank} ,点击作品可以查看pid/标题/画师/tag信息."
else
text="#排名${start_rank}_${end_rank} #rank${start_rank}_${end_rank} 作品上传失败,请联系管理员"
fi
info_file=$original_file_name.info
curl -v -o $info_file https://$bucketname.$Host/$original_file_name?x-oss-process=image/info
FileSize=$(fileSizeStr $(cat $info_file | jq -r .FileSize.value))
ImageHeight=$(cat $info_file | jq -r .ImageHeight.value)
ImageWidth=$(cat $info_file | jq -r .ImageWidth.value)
media="$media,{\"type\":\"photo\",\"media\":\"attach://$webp_file_name\",\"parse_mode\":\"HTML\",\"caption\":\"$rank_info\n<a href=\\\"$artworkLink\\\">$title</a>\n<a href=\\\"https://www.pixiv.net/users/$userId\\\">$userName</a>\n$tag\n原图分辨率:${ImageWidth}X${ImageHeight}(宽X高),文件体积:$FileSize,<a href=\\\"https://$bucketname.$Host/$original_file_name\\\">预览原图</a> <a href=\\\"https://$bucketname.$accelerateHost/$original_file_name\\\">加速下载原图</a>\"}"
Request "curl -v -d chat_id=$chat_id -d text=\"$text\" $baseApi/sendMessage"
fi
fileList="$fileList -F $webp_file_name=@$webp_file_name"
fileCount=$((fileCount + 1))
echo "fileCount=$fileCount"
fileList=''
media=''
fileCount=0
if [[ $fileCount -eq $maxFileCount ]]; then
Request "curl -v -F chat_id=$chat_id $fileList -F media='[$(echo $media | cut -c 2-)]' $baseApi/sendMediaGroup"
if [ $(echo $?) -eq 1 ]; then
sleep $sleepImage
text="以上作品日榜排名分别是 #排名${start_rank}_${end_rank} #rank${start_rank}_${end_rank} ,点击作品可以查看pid/标题/画师/tag信息."
else
text="#排名${start_rank}_${end_rank} #rank${start_rank}_${end_rank} 作品上传失败,请联系管理员"
fi
done
Request "curl -v -d chat_id=$chat_id -d text=\"$text\" $baseApi/sendMessage"
fileList=''
media=''
fileCount=0
fi
done
next_expected_at=$(curl -v https://cronitor.io/api/monitors/$CronitorJobName -u $CronitorKey:'' | jq .next_expected_at)

Loading…
Cancel
Save