This commit is contained in:
doms9 2025-10-06 13:14:05 -04:00
parent a464341f16
commit 00000d9795

View file

@ -17,8 +17,21 @@ get_status() {
[[ "$url" != http* ]] && return [[ "$url" != http* ]] && return
for attempt in $(seq 1 "$RETRY_COUNT"); do for attempt in $(seq 1 "$RETRY_COUNT"); do
response=$(curl -sL -A "$UA" -o /dev/null --max-time 10 -w "%{http_code}" "$url" 2>&1) response=$(
curl -skL \
-A "$UA" \
-H "Accept: */*" \
-H "Accept-Language: en-US,en;q=0.9" \
-H "Accept-Encoding: gzip, deflate, br" \
-H "Connection: keep-alive" \
-o /dev/null \
--max-time 15 \
-w "%{http_code}" \
"$url" 2>&1
)
[[ "$response" =~ ^[0-9]+$ ]] && break [[ "$response" =~ ^[0-9]+$ ]] && break
sleep 1 sleep 1
done done
@ -28,7 +41,9 @@ get_status() {
else else
echo "| $channel | Curl error | \`$url\` |" >>"$STATUSLOG" echo "| $channel | Curl error | \`$url\` |" >>"$STATUSLOG"
fi fi
echo "FAIL" >>"$STATUSLOG" echo "FAIL" >>"$STATUSLOG"
return return
fi fi
@ -36,25 +51,29 @@ get_status() {
case "$status_code" in case "$status_code" in
200) 200)
if ! curl -sL -A "$UA" --max-time 5 "$url" | head -c 1 | grep -q '.'; then if ! curl -skL -A "$UA" --max-time 5 "$url" | head -c 1 | grep -q '.'; then
echo "| $channel | Empty body (404) | \`$url\` |" >>"$STATUSLOG" echo "| $channel | Empty body (404) | \`$url\` |" >>"$STATUSLOG"
echo "EMPTY" >>"$STATUSLOG" echo "EMPTY" >>"$STATUSLOG"
else else
echo "PASS" >>"$STATUSLOG" echo "PASS" >>"$STATUSLOG"
fi fi
;; ;;
4* | 5*) 4* | 5*)
echo "| $channel | HTTP Error ($status_code) | \`$url\` |" >>"$STATUSLOG" echo "| $channel | HTTP Error ($status_code) | \`$url\` |" >>"$STATUSLOG"
echo "FAIL" >>"$STATUSLOG" echo "FAIL" >>"$STATUSLOG"
;; ;;
*) *)
if [[ "$status_code" == "000" ]]; then if [[ "$status_code" == "000" ]]; then
echo "| $channel | Connection timed out (000) | \`$url\` |" >>"$STATUSLOG" echo "| $channel | Connection timed out (000) | \`$url\` |" >>"$STATUSLOG"
else else
echo "| $channel | Unknown status ($status_code) | \`$url\` |" >>"$STATUSLOG" echo "| $channel | Unknown status ($status_code) | \`$url\` |" >>"$STATUSLOG"
fi fi
echo "FAIL" >>"$STATUSLOG" echo "FAIL" >>"$STATUSLOG"
;; ;;
esac esac
} }
@ -72,11 +91,13 @@ check_links() {
if [[ "$line" == \#EXTINF* ]]; then if [[ "$line" == \#EXTINF* ]]; then
name=$(echo "$line" | sed -n 's/.*tvg-name="\([^"]*\)".*/\1/p') name=$(echo "$line" | sed -n 's/.*tvg-name="\([^"]*\)".*/\1/p')
[[ -z "$name" ]] && name="Channel $channel_num" [[ -z "$name" ]] && name="Channel $channel_num"
elif [[ "$line" =~ ^https?:// ]]; then elif [[ "$line" =~ ^https?:// ]]; then
while (($(jobs -r | wc -l) >= MAX_JOBS)); do sleep 0.2; done while (($(jobs -r | wc -l) >= MAX_JOBS)); do sleep 0.2; done
get_status "$line" "$name" & get_status "$line" "$name" &
((channel_num++)) ((channel_num++))
fi fi
done < <(cat "$base_file") done < <(cat "$base_file")
wait wait
@ -85,6 +106,7 @@ check_links() {
write_readme() { write_readme() {
local passed redirected empty failed local passed redirected empty failed
passed=$(grep -c '^PASS$' "$STATUSLOG") passed=$(grep -c '^PASS$' "$STATUSLOG")
empty=$(grep -c '^EMPTY$' "$STATUSLOG") empty=$(grep -c '^EMPTY$' "$STATUSLOG")
failed=$(grep -c '^FAIL$' "$STATUSLOG") failed=$(grep -c '^FAIL$' "$STATUSLOG")