General formatting
This commit is contained in:
parent
80df9f5f69
commit
1d2872731a
51
yt-desc
51
yt-desc
|
@ -1,3 +1,4 @@
|
||||||
|
#!/bin/sh
|
||||||
##############################
|
##############################
|
||||||
# name: yt-desc
|
# name: yt-desc
|
||||||
# lisc: gnu gplv3
|
# lisc: gnu gplv3
|
||||||
|
@ -7,33 +8,37 @@
|
||||||
|
|
||||||
# Usage: yt-desc "$url/id"
|
# Usage: yt-desc "$url/id"
|
||||||
|
|
||||||
|
# STRING --> STRING
|
||||||
|
# Get the description of a YT video, from HTML.
|
||||||
|
function video_desc {
|
||||||
|
local html="$1"
|
||||||
|
|
||||||
|
echo "$html" \
|
||||||
|
| grep "action-panel-details" \
|
||||||
|
| sed 's/.*<p .*class="" >//' \
|
||||||
|
| sed 's%</p>.*%%' \
|
||||||
|
| lynx -stdin -dump \
|
||||||
|
| sed 's/^ //'
|
||||||
|
}
|
||||||
|
|
||||||
# --------------------------------------
|
# --------------------------------------
|
||||||
# invocation
|
# invocation
|
||||||
|
|
||||||
USAGE="usage: yt-desc url/id"
|
function usage {
|
||||||
|
echo "usage: yt-desc url/id"
|
||||||
if test -z "$1"
|
|
||||||
then
|
|
||||||
echo "$USAGE"
|
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
}
|
||||||
|
|
||||||
if test -n "$1"; then
|
|
||||||
if echo "$1" | grep "youtube"; then
|
|
||||||
URL="$1"
|
|
||||||
else
|
|
||||||
URL="https://www.youtube.com/watch?v=${1}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------
|
# --------------------------------------
|
||||||
# invocation <3
|
|
||||||
|
|
||||||
gendl "$URL" \
|
if test -z "$1"; then
|
||||||
| grep "action-panel-details" \
|
usage
|
||||||
| sed 's/.*<p .*class="" >//' \
|
elif echo "$1" | grep "youtube" > /dev/null; then
|
||||||
| sed 's%</p>.*%%' \
|
URL="$1"
|
||||||
| lynx -stdin -dump \
|
else
|
||||||
| sed 's/^ //'
|
URL="https://www.youtube.com/watch?v=${1}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --------------------------------------
|
||||||
|
|
||||||
|
video_desc "$(gendl "$URL")"
|
||||||
|
|
134
yt-search
134
yt-search
|
@ -1,3 +1,4 @@
|
||||||
|
#!/bin/sh
|
||||||
##############################
|
##############################
|
||||||
# name: yt-search
|
# name: yt-search
|
||||||
# lisc: gnu gplv3
|
# lisc: gnu gplv3
|
||||||
|
@ -12,8 +13,7 @@
|
||||||
|
|
||||||
# NUMBER NUMBER --> NUMBER
|
# NUMBER NUMBER --> NUMBER
|
||||||
# Well, subtraction. Y'know...
|
# Well, subtraction. Y'know...
|
||||||
function subtract
|
function subtract {
|
||||||
{
|
|
||||||
local operated=$1
|
local operated=$1
|
||||||
local operatee=$2
|
local operatee=$2
|
||||||
echo "${1}-${2}" | bc
|
echo "${1}-${2}" | bc
|
||||||
|
@ -26,29 +26,25 @@ function subtract
|
||||||
|
|
||||||
# NIL --> STRING
|
# NIL --> STRING
|
||||||
# Print an ANSI "unbold" escape string.
|
# Print an ANSI "unbold" escape string.
|
||||||
function unbold
|
function unbold {
|
||||||
{
|
|
||||||
printf "$(tput sgr0)"
|
printf "$(tput sgr0)"
|
||||||
}
|
}
|
||||||
|
|
||||||
# STRING --> STRING
|
# STRING --> STRING
|
||||||
# Print an ANSI "bold" escape string.
|
# Print an ANSI "bold" escape string.
|
||||||
function bold
|
function bold {
|
||||||
{
|
|
||||||
printf "$(tput bold)"
|
printf "$(tput bold)"
|
||||||
}
|
}
|
||||||
|
|
||||||
# STRING --> NUMBER
|
# STRING --> NUMBER
|
||||||
# Return the length of a string
|
# Return the length of a string
|
||||||
function char_length
|
function char_length {
|
||||||
{
|
|
||||||
subtract $(echo $1 | wc -c) 1
|
subtract $(echo $1 | wc -c) 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# STRING NUMBER [STRING] --> STRING
|
# STRING NUMBER [STRING] --> STRING
|
||||||
# pad string $1 out to the minimum length $2 with padding $3 (default: "0")
|
# pad string $1 out to the minimum length $2 with padding $3 (default: "0")
|
||||||
function min_string_length
|
function min_string_length {
|
||||||
{
|
|
||||||
local string="$1"
|
local string="$1"
|
||||||
local length=$2
|
local length=$2
|
||||||
if test -z "$3"; then
|
if test -z "$3"; then
|
||||||
|
@ -69,8 +65,7 @@ function min_string_length
|
||||||
|
|
||||||
# STRING NUMBER --> STRING
|
# STRING NUMBER --> STRING
|
||||||
# get the first $2 characters in string $1
|
# get the first $2 characters in string $1
|
||||||
function char_get
|
function char_get {
|
||||||
{
|
|
||||||
local number=$2
|
local number=$2
|
||||||
local string="$1"
|
local string="$1"
|
||||||
string="$(min_string_length "$string" $number " ")"
|
string="$(min_string_length "$string" $number " ")"
|
||||||
|
@ -85,8 +80,7 @@ function char_get
|
||||||
|
|
||||||
# STRING --> STRING
|
# STRING --> STRING
|
||||||
# Pass the raw search HTML, get raw video result-lines
|
# Pass the raw search HTML, get raw video result-lines
|
||||||
function result_lines
|
function result_lines {
|
||||||
{
|
|
||||||
local search_html="$1"
|
local search_html="$1"
|
||||||
echo "$search_html" \
|
echo "$search_html" \
|
||||||
| grep "<a href=\"\/watch?v=" \
|
| grep "<a href=\"\/watch?v=" \
|
||||||
|
@ -97,16 +91,14 @@ function result_lines
|
||||||
|
|
||||||
# STRING --> STRING
|
# STRING --> STRING
|
||||||
# Return the video ID of a result_line.
|
# Return the video ID of a result_line.
|
||||||
function result_id
|
function result_id {
|
||||||
{
|
|
||||||
local result_line="$1"
|
local result_line="$1"
|
||||||
echo "$result_line" \
|
echo "$result_line" \
|
||||||
| sed 's%.*<a href="/watch?v=%%' \
|
| sed 's%.*<a href="/watch?v=%%' \
|
||||||
| sed 's%".*%%'
|
| sed 's%".*%%'
|
||||||
}
|
}
|
||||||
|
|
||||||
function result_url
|
function result_url {
|
||||||
{
|
|
||||||
local result_line="$1"
|
local result_line="$1"
|
||||||
local id="$(result_id "$result_line")"
|
local id="$(result_id "$result_line")"
|
||||||
echo "https://youtube.com/watch?v=${id}"
|
echo "https://youtube.com/watch?v=${id}"
|
||||||
|
@ -114,33 +106,23 @@ function result_url
|
||||||
|
|
||||||
# STRING --> STRING
|
# STRING --> STRING
|
||||||
# Return the title of a result-line.
|
# Return the title of a result-line.
|
||||||
function result_title
|
function result_title {
|
||||||
{
|
|
||||||
local result_line="$1"
|
local result_line="$1"
|
||||||
echo "$result_line" \
|
echo "$result_line" \
|
||||||
| sed 's%.*" title="%%' \
|
| sed 's%.*" title="%%' \
|
||||||
| sed 's%".*%%'
|
| sed 's%".*%%'
|
||||||
}
|
}
|
||||||
|
|
||||||
function result_name
|
function result_name {
|
||||||
{
|
|
||||||
local result_line="$1"
|
local result_line="$1"
|
||||||
local title="$(result_title "$result_line")"
|
local title="$(result_title "$result_line")"
|
||||||
echo "$(bold)${title}$(unbold)"
|
echo "$(bold)${title}$(unbold)"
|
||||||
}
|
}
|
||||||
|
|
||||||
function result_title_backup
|
|
||||||
{
|
|
||||||
local result_line="$1"
|
|
||||||
echo "$result_line" \
|
|
||||||
| sed 's%.*title="%%' \
|
|
||||||
| sed 's%".*%%'
|
|
||||||
}
|
|
||||||
|
|
||||||
# STRING --> STRING
|
# STRING --> STRING
|
||||||
# Return the duration of a result-line.
|
# Return the duration of a result-line.
|
||||||
function result_duration
|
function result_duration {
|
||||||
{
|
|
||||||
local result_line="$1"
|
local result_line="$1"
|
||||||
echo "$result_line" \
|
echo "$result_line" \
|
||||||
| sed 's%.*> - Duration: %%' \
|
| sed 's%.*> - Duration: %%' \
|
||||||
|
@ -149,8 +131,7 @@ function result_duration
|
||||||
|
|
||||||
# STRING --> STRING
|
# STRING --> STRING
|
||||||
# Return the .yt-lockup-meta-info <ul> of a result-line
|
# Return the .yt-lockup-meta-info <ul> of a result-line
|
||||||
function result_meta_ul
|
function result_meta_ul {
|
||||||
{
|
|
||||||
local result_line="$1"
|
local result_line="$1"
|
||||||
echo "$result_line" \
|
echo "$result_line" \
|
||||||
| sed 's%.*<ul class="yt-lockup-meta-info">%%' \
|
| sed 's%.*<ul class="yt-lockup-meta-info">%%' \
|
||||||
|
@ -159,8 +140,7 @@ function result_meta_ul
|
||||||
|
|
||||||
# STRING --> STRING
|
# STRING --> STRING
|
||||||
# Return the "Uploaded..." string of a result-line
|
# Return the "Uploaded..." string of a result-line
|
||||||
function result_uploaded
|
function result_uploaded {
|
||||||
{
|
|
||||||
local result_line="$1"
|
local result_line="$1"
|
||||||
local result_meta_ul="$(result_meta_ul "$result_line")"
|
local result_meta_ul="$(result_meta_ul "$result_line")"
|
||||||
echo "$result_meta_ul" \
|
echo "$result_meta_ul" \
|
||||||
|
@ -170,8 +150,7 @@ function result_uploaded
|
||||||
|
|
||||||
# STRING --> NUMBER
|
# STRING --> NUMBER
|
||||||
# Return the view-count of a result-line
|
# Return the view-count of a result-line
|
||||||
function result_views
|
function result_views {
|
||||||
{
|
|
||||||
local result_line="$1"
|
local result_line="$1"
|
||||||
local result_meta_ul="$(result_meta_ul "$result_line")"
|
local result_meta_ul="$(result_meta_ul "$result_line")"
|
||||||
echo "$result_meta_ul" \
|
echo "$result_meta_ul" \
|
||||||
|
@ -182,8 +161,7 @@ function result_views
|
||||||
|
|
||||||
# STRING --> STRING
|
# STRING --> STRING
|
||||||
# Format a result-line into a mediumly-pretty, one-line string~
|
# Format a result-line into a mediumly-pretty, one-line string~
|
||||||
function result_format_compact
|
function result_format_compact {
|
||||||
{
|
|
||||||
local result_line="$1"
|
local result_line="$1"
|
||||||
local title="$(char_get "$(result_name "$result_line")" 40)$(unbold)"
|
local title="$(char_get "$(result_name "$result_line")" 40)$(unbold)"
|
||||||
local id="$(result_id "$result_line")"
|
local id="$(result_id "$result_line")"
|
||||||
|
@ -193,8 +171,7 @@ function result_format_compact
|
||||||
|
|
||||||
# STRING --> STRING
|
# STRING --> STRING
|
||||||
# Format a result-line into a mediumly-pretty, one-line string~
|
# Format a result-line into a mediumly-pretty, one-line string~
|
||||||
function result_format_small
|
function result_format_small {
|
||||||
{
|
|
||||||
local result_line="$1"
|
local result_line="$1"
|
||||||
local name="$(char_get "$(result_name "$result_line")" 40)$(unbold)"
|
local name="$(char_get "$(result_name "$result_line")" 40)$(unbold)"
|
||||||
local url="$(result_url "$result_line")"
|
local url="$(result_url "$result_line")"
|
||||||
|
@ -204,8 +181,7 @@ function result_format_small
|
||||||
|
|
||||||
# STRING --> STRING
|
# STRING --> STRING
|
||||||
# Format a result-line into a mediumly-pretty, one-line string~
|
# Format a result-line into a mediumly-pretty, one-line string~
|
||||||
function result_format_medium
|
function result_format_medium {
|
||||||
{
|
|
||||||
local result_line="$1"
|
local result_line="$1"
|
||||||
local name="$(char_get "$(result_name "$result_line")" 40)$(unbold)"
|
local name="$(char_get "$(result_name "$result_line")" 40)$(unbold)"
|
||||||
local duration="$(result_duration "$result_line")"
|
local duration="$(result_duration "$result_line")"
|
||||||
|
@ -216,8 +192,7 @@ function result_format_medium
|
||||||
|
|
||||||
# STRING --> STRING
|
# STRING --> STRING
|
||||||
# Format a result-line into a pretty string~
|
# Format a result-line into a pretty string~
|
||||||
function result_format_big
|
function result_format_big {
|
||||||
{
|
|
||||||
local result_line="$1"
|
local result_line="$1"
|
||||||
local name="$(char_get "$(result_name "$result_line")" 79)$(unbold)"
|
local name="$(char_get "$(result_name "$result_line")" 79)$(unbold)"
|
||||||
local duration="$(result_duration "$result_line")"
|
local duration="$(result_duration "$result_line")"
|
||||||
|
@ -231,50 +206,45 @@ function result_format_big
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------
|
|
||||||
# cushiness, ensuring valid input, etc.
|
|
||||||
|
|
||||||
USAGE="usage: yt-search [-csmb] query"
|
|
||||||
|
|
||||||
if test -z "$1"
|
|
||||||
then
|
|
||||||
echo "$USAGE"
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
user_query="$1"
|
|
||||||
format="big"
|
|
||||||
|
|
||||||
if test -n "$2"
|
|
||||||
then
|
|
||||||
user_query="$2"
|
|
||||||
case "$1" in
|
|
||||||
"-c") format="compact" ;;
|
|
||||||
"-s") format="small" ;;
|
|
||||||
"-m") format="medium" ;;
|
|
||||||
"-b") format="big" ;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------
|
# --------------------------------------
|
||||||
# invocation <3
|
# invocation <3
|
||||||
|
|
||||||
query="$(echo "$user_query" | sed 's/ /+/g')"
|
function usage {
|
||||||
search_html="$(./gendl "https://youtube.com/results?search_query=$query")"
|
echo "usage: yt-search [-csmb] query"
|
||||||
result_lines="$(result_lines "$search_html")"
|
exit 2
|
||||||
|
}
|
||||||
|
|
||||||
|
# --------------------------------------
|
||||||
|
|
||||||
|
if test -z "$1"; then
|
||||||
|
usage
|
||||||
|
elif test -n "$2"; then
|
||||||
|
QUERY="$2"
|
||||||
|
case "$1" in
|
||||||
|
"-c") FORMAT="compact" ;;
|
||||||
|
"-s") FORMAT="small" ;;
|
||||||
|
"-m") FORMAT="medium" ;;
|
||||||
|
"-b") FORMAT="big" ;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
QUERY="$1"
|
||||||
|
FORMAT="big"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --------------------------------------
|
||||||
|
|
||||||
|
QUERY="$(echo "$QUERY" | sed 's/ /+/g')"
|
||||||
|
search_html="$(gendl "https://youtube.com/results?search_query=$QUERY")"
|
||||||
|
result_lines="$(result_lines "$search_html")"
|
||||||
|
|
||||||
IFS='
|
IFS='
|
||||||
'
|
'
|
||||||
|
|
||||||
for result in $result_lines
|
for result in $result_lines; do
|
||||||
do
|
case "$FORMAT" in
|
||||||
case "$format" in
|
"compact") result_format_compact "$result" ;;
|
||||||
"compact") result_format_compact "$result" ;;
|
"small") result_format_small "$result" ;;
|
||||||
"small") result_format_small "$result" ;;
|
"medium") result_format_medium "$result" ;;
|
||||||
"medium") result_format_medium "$result" ;;
|
"big") result_format_big "$result" ;;
|
||||||
"big") result_format_big "$result" ;;
|
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
Reference in New Issue