diff --git a/tools/download-all.sh b/tools/download-all.sh index bd24314..fe01daf 100755 --- a/tools/download-all.sh +++ b/tools/download-all.sh @@ -18,13 +18,12 @@ TOOLS_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]:-$0}"; )" &> /dev/null && pwd 2> /dev/null; )"; DL_DIR="$TOOLS_DIR/downloaded" -ROOT_DIR="`dirname "$TOOLS_DIR"`" -INI_FILE="$ROOT_DIR/playlists.ini" +INI_FILE="$(dirname "$TOOLS_DIR")/playlists.ini" rm -rf "$DL_DIR" && \ mkdir -p "$DL_DIR" && \ cd "$DL_DIR" && \ - cat "`dirname "$TOOLS_DIR"`/playlists.ini" \ + cat "$INI_FILE" \ | grep -P "pls\s*=\s*'(.*)'" \ | sed "s#^pls\s*=\s*##g" \ | sed "s#'##g" \ diff --git a/tools/find-in-all.sh b/tools/find-in-all.sh index f9e5af6..a01cb77 100755 --- a/tools/find-in-all.sh +++ b/tools/find-in-all.sh @@ -17,9 +17,9 @@ ################################################# TOOLS_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]:-$0}"; )" &> /dev/null && pwd 2> /dev/null; )"; -ROOT_DIR="`dirname "$TOOLS_DIR"`" -[ ! -d "$TOOLS_DIR/downloaded" ] && echo "Error: 'tools/downloaded' directory does not exist. Run tools/download-all.sh" && exit 1 -[ ! "$(ls -A $TOOLS_DIR/downloaded)" ] && echo "Error: 'tools/downloaded' directory is empty. Run tools/download-all.sh" && exit 2 +DL_DIR="$TOOLS_DIR/downloaded" +[ ! -d "$DL_DIR" ] && echo "Error: 'tools/downloaded' directory does not exist. Run tools/download-all.sh" && exit 1 +[ ! "$(ls -A "$DL_DIR")" ] && echo "Error: 'tools/downloaded' directory is empty. Run tools/download-all.sh" && exit 2 for file in $TOOLS_DIR/downloaded/*; do $TOOLS_DIR/find-in-pls.sh "$1" "$file" done diff --git a/tools/find-in-pls.sh b/tools/find-in-pls.sh index 6a7805b..38ba69c 100755 --- a/tools/find-in-pls.sh +++ b/tools/find-in-pls.sh @@ -22,59 +22,63 @@ # ################################################# -awk ' - BEGIN { - IGNORECASE=1 - channel = ARGV[1] - playlist = ARGV[2] - found_count = 0 - found_last = 0 - regex_ch = tolower(sprintf("^#EXTINF:.+,\s*(.*%s.*)", channel)) - regex_url = "^https?:\/\/.*$" +channel="$1" +playlist="$2" +playlist_url="$playlist" +regex_ch="^#extinf:\s*-?[01]\s*.*,(.*${channel,,}.*)" +regex_url="^https?:\/\/.*$" - print "--------------------" - print "\033[20m\033[97mPlaylist:\033[0m " playlist - print "\033[20m\033[97mChannel to find:\033[0m " channel +is_downloaded=0 +download_dir="/tmp/$(date '+%s%N')" - if (playlist ~ /^http(s)?:\/\/.*/) { - parts_count = split(playlist, parts, "/") - file_name = parts[parts_count] - code = system("wget " playlist " -qO /tmp/" file_name " > /dev/null") - if (code == 0) { - print "Saved in /tmp/" file_name - } else { - print "ERROR: cannot download playlist: " playlist - exit 1 - } - playlist = "/tmp/" file_name - } +found_count=0 +found_last=0 +line_count=1 - ARGV[1] = playlist - delete ARGV[2] - print "--------------------" - } - { - sub("\r$", "", $0) # crlf -> lf - if (tolower($0) ~ tolower(regex_ch)) { - found_count++ - print "\n\033[32m" FNR " FOUND:\033[0m\t" $0 - found_last = FNR - } - if (found_last > 0) { - if (tolower($0) ~ tolower(regex_url)) { - print "\t\t" $0 - found_last = 0 - } - } - } - END { - if (found_count == 0) { - print "\033[91mNothing found\033[0m" - } else { - print "--------------------" - print "\033[20m\033[97mPlaylist:\033[0m " playlist - print "\033[20m\033[97mChannel found:\033[0m " channel - print "\033[20m\033[97mFound:\033[0m\033[32m " found_count "\033[0m" - } - } -' $1 $2 +if [[ "$playlist" =~ $regex_url ]]; then + mkdir -p "$download_dir" + cd "$download_dir" + wget "$playlist" -q > /dev/null + if [ $? -eq 0 ]; then + is_downloaded=1 + playlist="$download_dir/$(ls -1 "$download_dir")" + cd - + else + echo "ERROR: cannot download playlist: $playlist" + exit 1 + fi +fi + +echo "--------------------" +echo -e "\033[20m\033[97mChannel:\033[0m $channel" +echo -e "\033[20m\033[97mPlaylist:\033[0m $playlist_url" +echo -e "\033[20m\033[97mRegex:\033[0m $regex_ch" +echo "--------------------" + +while read line; do + if [[ "${line,,}" =~ $regex_ch ]]; then + echo -e "\n\033[32m$line_count FOUND:\033[0m\t$line" + ((found_count += 1)) + found_last=$found_count + fi + if [ $found_last -gt 0 ]; then + if [[ "${line,,}" =~ $regex_url ]]; then + echo -e "\t\t$line" + found_last=0 + fi + fi + ((line_count += 1)) +done < $playlist + +if [ $found_count -eq 0 ]; then + echo -e "\033[91mNothing found\033[0m" +else + echo "--------------------" + echo -e "\033[20m\033[97mPlaylist:\033[0m $playlist_url" + echo -e "\033[20m\033[97mChannel:\033[0m $channel" + echo -e "\033[20m\033[97mFound:\033[0m\033[32m $found_count\033[0m" +fi + +if [ $is_downloaded -eq 1 ]; then + rm -rf "$download_dir" +fi diff --git a/tools/make-pls.sh b/tools/make-pls.sh index 5c83aca..83740b7 100755 --- a/tools/make-pls.sh +++ b/tools/make-pls.sh @@ -1,4 +1,3 @@ - #!/bin/bash ################################################# @@ -20,41 +19,37 @@ # ################################################# -#SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]:-$0}"; )" &> /dev/null && pwd 2> /dev/null; )"; -SCRIPT_DIR="$(cd "$(dirname "$0")" >/dev/null 2>&1 && pwd)" -[ ! -d ./downloaded ] && echo "Error: ./downloaded directory does not exist. Run $SCRIPT_DIR/tools/download-all.sh" && exit 1 -[ ! "$(ls -A ./downloaded)" ] && echo "Error: ./downloaded directory is empty. Run $SCRIPT_DIR/tools/download-all.sh" && exit 2 +TOOLS_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]:-$0}"; )" &> /dev/null && pwd 2> /dev/null; )"; +DL_DIR="$TOOLS_DIR/downloaded" +[ ! -d "$DL_DIR" ] && echo "Error: 'tools/downloaded' directory does not exist. Run tools/download-all.sh" && exit 1 +[ ! "$(ls -A "$DL_DIR")" ] && echo "Error: 'tools/downloaded' directory is empty. Run tools/download-all.sh" && exit 2 + +channel="$1" +playlist="$2" + +regex_ch="^#extinf:\s*-?[01]\s*.*,(.*${channel,,}.*)" +regex_url="^https?:\/\/.*$" + +found_count=0 +found_last=0 + echo "#EXTM3U" echo "# Autogenerated at `date +%d.%m.%Y`" echo "# https://github.com/anthonyaxenov/iptv" echo + for file in ./downloaded/*; do - awk ' - BEGIN { - IGNORECASE=1 - "date +%Y-%m-%d" | getline date - channel = ARGV[1] - playlist = ARGV[2] - ARGV[1] = playlist - delete ARGV[2] - found_count = 0 - found_last = 0 - regex_ch = tolower(sprintf("^#EXTINF:.+,\s*(.*%s.*)", channel)) - regex_url = "^https?:\/\/.*$" - } - { - sub("\r$", "", $0) # crlf -> lf - if (tolower($0) ~ tolower(regex_ch)) { - print $0 - found_count++ - found_last = FNR - } - if (found_last > 0) { - if (tolower($0) ~ tolower(regex_url)) { - print $0 "\n" - found_last = 0 - } - } - } - ' "$1" "$file" + while read line; do + if [[ "${line,,}" =~ $regex_ch ]]; then + echo -e "$line" + ((found_count += 1)) + found_last=$found_count + fi + if [ $found_last -gt 0 ]; then + if [[ "${line,,}" =~ $regex_url ]]; then + echo -e "$line\n" + found_last=0 + fi + fi + done < $file done