diff --git a/iptv-check b/iptv-check deleted file mode 100755 index 6542f5f..0000000 --- a/iptv-check +++ /dev/null @@ -1,358 +0,0 @@ -#!/bin/bash -#variables -path=$(pwd) -sname=$0 -wfile="$path/oklist.m3u" - -#setup colors -cyan='\e[0;36m' -green='\033[92m' -red='\e[1;31m' -yellow='\e[0;33m' -orange='\e[38;5;166m' - -# Check if temp directory exists -if [[ ! -d $path/temp ]] -then -mkdir "$path/temp" >/dev/null 2>&1 -fi - -# Clean any files from previous run in temp folder -rm -rf "$path/temp/*" >/dev/null 2>&1 - -# Warning is a simple message that will display every 40 checks on streams to explain user how to quit -warn() { -if [[ $i -gt $wrn ]] -then -wrn=$((wrn+40)) -else -if [[ $i == "$wrn" ]] -then -echo "" -echo -e "$red""Press CTRL+C To Stop or Abort IPTV list check" -echo "" -fi -fi -} - -#Ctrl+C Interrupt to stop the script -trap ctrl_c INT -function ctrl_c() { -if [[ -f "$path/temp/pid.tmp" ]] -then -pid=$(sed -n 1p < "$path/temp/pid.tmp") -rpid=$(ps -p "$pid" -o pid= | awk '{print$1}') -if [[ "$rpid" == "$pid" ]] -then -kill $pid >/dev/null 2>&1 -exit 1 -else -exit 1 -fi -else -exit 1 -fi - -} - -logo() { -echo -e "$green" "IPTV-Check Tool 1.0" -echo -e "$yellow" "-------------------------------------" -echo -e "$blue" "http://github.com/peterpt" -echo -e "$yellow" "-------------------------------------" -echo "" - -# checkig for wget if it is installed -which wget > /dev/null 2>&1 - if [ "$?" -eq "1" ]; then - echo -e "$red" "Wget Missing" -echo "" -echo -e "$yellow" "Try : apt-get install wget" -exit 1 -fi -} - -# The difference between writefile and writefile2 is that (writefile2) is to process the output from m3u files based in xml codes -# while function (writefile) is to process in output file the conventional m3u files without xml codes in it -function writefile2() { -if [[ -f "$wfile" ]] -then -gturlline=$(grep -n "\<$chkf\>"<$path/temp/2 | tr ":" "\n" | sed -n 1p) -stdata=$(sed -n "$gturlline p"< $path/temp/2 | awk '{$1=""; print $0}') -echo "#EXTINF:-1 ,$stdata" >> "$wfile" -echo "$chkf" >> "$wfile" -echo "" >> "$wfile" -else -echo "#EXTM3U" > "$wfile" -echo "" >> "$wfile" -gturlline=$(grep -n "\<$chkf\>"<$path/temp/2 | tr ":" "\n" | sed -n 1p) -stdata=$(sed -n "$gturlline p"< $path/temp/2 | awk '{$1=""; print $0}') -echo "#EXTINF:-1 ,$stdata" >> "$wfile" -echo "$chkf" >> "$wfile" -echo "" >> "$wfile" -fi -} - - -function writefile() { -# checks if tool already created previously an m3u file -if [[ -f "$wfile" ]] -then -#searchs for that specific url in original file and get line number -gturlline=$(grep -n "$chkf"<$path/temp/1 | tr ":" "\n" | sed -n 1p) -# This variavble will get the line number before the previous url (this is to get channel name) -defline=$((gturlline-1)) -stdata=$(sed -n "$defline p"< $path/temp/1) -echo "$stdata" >> "$wfile" -echo "$chkf" >> "$wfile" -echo "" >> "$wfile" -else -echo "#EXTM3U" > "$wfile" -echo "" >> "$wfile" -gturlline=$(grep -n "$chkf"<$path/temp/1 | tr ":" "\n" | sed -n 1p) -defline=$((gturlline-1)) -stdata=$(sed -n "$defline p"< $path/temp/1) -echo "$stdata" >> "$wfile" -echo "$chkf" >> "$wfile" -echo "" >> "$wfile" -fi -} - -# Function for m3u files with xml content -function xmlproc() { - -# Find http links only and delete all the other xml codes in the file , this works with many tests i did , but it may need more filtering for m3u files with more xml funtions in it -grep -F "http" <$path/temp/1 | sed 's///g' | sed 's/^.*http/http/' | sed 's/&.*|//' | sed -e 's/\(.ts\).*\(=\)/\1\2/' | sed 's/=/ /g' | sed "s~~ ~g" > $path/temp/2 -srvnmb=$(wc -l "$path/temp/2" | awk '{print$1}') -rm -rf "$path/temp/stream" >/dev/null 2>&1 -rm -rf "$path/temp/pid.tmp" >/dev/null 2>&1 -echo "" -echo -e "$red""Press CTRL+C To Stop or Abort IPTV list check" -echo "" -for i in $(seq "$srvnmb") -do -chkf=$(sed -n "${i}p" < "$path/temp/2" | awk {'print$1}') -chkurl=$(echo "$chkf" | head -c 4) -case "$chkurl" in -http|rtmp|HTTP) -wget -q "$chkf" -O "$path/temp/stream" & echo $! > "$path/temp/pid.tmp" -pid=$(sed -n 1p < "$path/temp/pid.tmp") -sleep 4 -rpid=$(ps -p "$pid" -o pid= | awk '{print$1}') -if [[ "$rpid" == "$pid" ]] -then -kill $pid -fi -if [[ ! -f "$path/temp/stream" ]] -then -echo -e "$yellow" "Error reading captured file" -else -stsz=$(wc -c "$path/temp/stream" | awk '{print$1}') -if [[ "$stsz" -le "100" ]] -then -echo -e "$green" "Link:$yellow $i$green of :$yellow$srvnmb$green is$red OFF" -else -echo -e "$green" "Link:$yellow $i$green of :$yellow$srvnmb$green is$green ON" -writefile2 -fi -fi -;; -*) -;; -esac -rm -rf "$path/temp/stream" >/dev/null 2>&1 -rm -rf "$path/temp/pid.tmp" >/dev/null 2>&1 -warn -done -if [[ "$exts" == "0" ]] -then -if [[ -f "$wfile" ]] -then -echo "" -echo -e "$green" "Job Finished" -echo "" -echo -e "$yellow" "You can find your new iptv list in :" -echo -e "$orange" "$wfile" -exit 1 -fi -else -echo "" -echo -e "$green" "Job Finished" -echo "" -echo -e "$yellow" "Your iptv list was update in :" -echo -e "$orange" "$wfile" -exit 1 -fi -} - -# Function that will download for specific time the test stream -function teststream() { -wrn="0" -# Checks if tool already created a previous m3u file -if [[ -f "$wfile" ]] -then -exts="1" -else -exts="0" -fi - -# checks if m3u file have xml content -ckf=$(grep "" <$path/temp/1) -if [[ ! -z "$ckf" ]] -then -xmlproc -fi -#checks for the http links in m3u file -glnk=$(grep -F "http" < "$path/temp/1" | sed '/EXTINF/d' | sed '/EXTM3U/d' | awk '!a[$0]++' | sed '/^$/d') - -#Write all the http links only to a new file so they can be checked ahead -echo "$glnk" | tr " " "\n" > "$path/temp/2" -# Counts how many links must be checked -srvnmb=$(wc -l "$path/temp/2" | awk '{print$1}') -# removes any previous temp pid files and stream captures from previous run -rm -rf "$path/temp/stream" >/dev/null 2>&1 -rm -rf "$path/temp/pid.tmp" >/dev/null 2>&1 -echo "" -echo -e "$red""Press CTRL+C To Stop or Abort IPTV list check" -echo "" - -# Starts the stream checks -for i in $(seq "$srvnmb") -do -chkf=$(sed -n "${i}p" < "$path/temp/2") -# To avoid errors in previous filter , it checks if the link starts with http , rtmp or HTTP -chkurl=$(echo "$chkf" | head -c 4) -case "$chkurl" in -http|rtmp|HTTP) -# start the stream download with wget , creates a file with the pid from wget -wget -q "$chkf" -O "$path/temp/stream" & echo $! > "$path/temp/pid.tmp" - -# reads current wget pid -pid=$(sed -n 1p < "$path/temp/pid.tmp") - -# 4 seconds is the time that wget will download the stream befores gets killed -sleep 4 -# checks if wget pid is still active -rpid=$(ps -p "$pid" -o pid= | awk '{print$1}') - -if [[ "$rpid" == "$pid" ]] -then -# kills wget pid -kill $pid -fi - -# checks if downlaoded stream file it is in temp directory -if [[ ! -f "$path/temp/stream" ]] -then -echo -e "$yellow" "Error reading captured file" -else -# checks the size of the stream file -stsz=$(wc -c "$path/temp/stream" | awk '{print$1}') -# In case stream file is less than 100 bytes then it is not valid -if [[ "$stsz" -le "100" ]] -then -echo -e "$green" "Link:$yellow $i$green of :$yellow$srvnmb$green is$red OFF" -else -echo -e "$green" "Link:$yellow $i$green of :$yellow$srvnmb$green is$green ON" -#file have more than 100 bytes , then it is a valid stream , goto write file fuction -writefile -fi -fi -;; -*) -;; -esac -rm -rf "$path/temp/stream" >/dev/null 2>&1 -rm -rf "$path/temp/pid.tmp" >/dev/null 2>&1 -warn -done -if [[ "$exts" == "0" ]] -then -if [[ -f "$wfile" ]] -then -echo "" -echo -e "$green" "Job Finished" -echo "" -echo -e "$yellow" "You can find your new iptv list in :" -echo -e "$orange" "$wfile" -exit 1 -fi -else -echo "" -echo -e "$green" "Job Finished" -echo "" -echo -e "$yellow" "Your iptv list was update in :" -echo -e "$orange" "$wfile" -exit 1 -fi -} - -# Case user m3u file is remote (http) then run this function -function remotef() { -# wil download the remote m3u file to temp folder and will check its size -wget "{$file}" -O "$path/temp/1" >/dev/null 2>&1 -flsz=$(wc -c "$path/temp/1" | awk '{print$1}') -if [[ "$flsz" -le "10" ]] -then -echo -e "$yellow" "The remote link is down or the file size of it" -echo -e "$yellow" " is too small to be an m3u iptv list file" -echo "" -exit 0 -fi -teststream -} - -# Local m3u file is loaded here -function localf(){ -if [[ ! -f "$file" ]] -then -echo -e "$yellow" "The file you specified does not exist" -echo -e "$yellow" "in :$green $file " -echo "" -echo -e "$yellow" "Make sure you wrote the right path of it" -exit 1 -fi -cp "$file" "$path/temp/1" >/dev/null 2>&1 -flsz=$(wc -c "$path/temp/1" | awk '{print$1}') -if [[ "$flsz" -le "10" ]] -then -echo -e "$yellow" "The file you specified is too small to be an m3u iptv file" -exit 0 -fi -teststream -} -if [[ -z $1 ]] -then -echo -e "$green" "IPTV-Check Tool 1.0" -echo -e "$yellow" "-------------------------------------" -echo -e "$blue" "http://github.com/peterpt" -echo -e "$yellow" "-------------------------------------" -echo "" -echo -e "$orange" "Example for remote list to check :" -echo -e "$green" "$0 http://someurl/somelist.m3u" -echo "" -echo -e "$orange" "Example for local list to check :" -echo -e "$green" "$0 /root/mylist.m3u" -echo "" -echo -e "$yellow" "-------------------------------------" -echo "" -exit 1 -fi -# If a null file name is not found then executes the script again deflecting wget errors to dev/null -if [[ ! -f $path/null ]] -then -echo "0" > $path/null -exec $sname $1 2>/dev/null -exit 1 -fi -# here it means that script already was loaded and restarted , so delete the null file for the next start -rm -rf $path/null >/dev/null 2>&1 -logo -file="$1" -#check if user input is a remote or local file by searching for http word in the user input variable -echo "$file" | grep "http" >/dev/null 2>&1 -if [ "$?" -eq "0" ]; then -remotef -else -localf -fi