From 31c76d056faaad63a47c14a1cd75db90c7817771 Mon Sep 17 00:00:00 2001 From: Harshith Date: Wed, 9 Jun 2021 17:55:23 +0530 Subject: [PATCH] initial commit --- README.md | 19 ++++++ anime-cli | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 196 insertions(+) create mode 100644 README.md create mode 100755 anime-cli diff --git a/README.md b/README.md new file mode 100644 index 0000000..ef255ac --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +# ani-cli + +A cli to browser and watch anime. + +This tool scrapes the site [gogoanime](https://gogoanime.vc). + +If certain episode is downloadable then mpv would be used to play that episode. +If downloadable link not available the user would be prompted to open the +stream in browser. + +## Usage + + ani-cli + +## Dependencies + +* curl +* sed +* mpv diff --git a/anime-cli b/anime-cli new file mode 100755 index 0000000..2cc1450 --- /dev/null +++ b/anime-cli @@ -0,0 +1,177 @@ +#!/bin/sh + +# dependencies: sed curl + +prog="ani-cli" + +help_text () { + while IFS= read line; do + printf "%s\n" "$line" + done <<-EOF + USAGE: $prog + EOF +} + + +die () { + printf "%s\n" "$*" >&1 + exit 1 +} + +search_anime () { + # get anime name along with its id + search=$1 + titlepattern=' + s_^[[:space:]]*/{ + s/.*href="([^"]*)".*/\1/p + q + }') + + curl -s "$dpage_url" | + sed -n -E ' + /^[[:space:]]*href="([^"]*\.mp4)".*/{ + s/^[[:space:]]*href="([^"]*\.mp4)".*/\1/p + q + } + ' +} + +##################### +## Anime selection ## +##################### + +case $1 in + -h|--help) + help_text + exit 0 + ;; +esac + +[ -z "$*" ] && { help_text ; die "Search query not provided"; } + +query="$*" +search_results=$(search_anime "$query") + +[ -z "$search_results" ] && die "No search results found" + +# Creating menu + +count=1 +while read anime_id; do + printf "[%d] %s\n" "$count" "$anime_id" + count=$((count+1)) +done </dev/null || die "Invalid number entered" + +count=1 +while read anime_id; do + if [ $count -eq $choice ]; then + selection_id=$anime_id + break + fi + count=$((count+1)) +done </dev/null || die "Invalid number entered" + + +while :; do + + if [ $ep_choice -lt 1 ] || [ $ep_choice -gt $last_ep_number ]; then + die "Episode out of range" + fi + + printf "Getting data for episode %d\n" $ep_choice + + video_url=$(get_links "$selection_id" "$ep_choice") + + case $video_url in + *stream*) + BROWSER=${BROWSER:-firefox} + printf "Downloadable mp4 not found, stream on browser?[y/N] " + read choice + case $choice in + [yY]) setsid -f $BROWSER "$video_url" >/dev/null 2>&1 + ;; + *) + exit 0 + ;; + esac + ;; + *) + setsid -f mpv "$video_url" >/dev/null 2>&1 + ;; + esac + + printf "\nCurrently playing %s episode %d/%d\n" "$selection_id" $ep_choice $last_ep_number + printf "[n] next episode\n" + printf "[p] previous episode\n" + printf "[q] exit\n" + printf "Enter choice: " + read choice + case $choice in + n) + ep_choice=$((ep_choice+1)) + ;; + p) + ep_choice=$((ep_choice-1)) + ;; + q) + exit 0;; + *) + die "invalid choice" + ;; + esac +done +