diff options
author | John Ankarström <john@ankarstrom.se> | 2020-11-23 23:11:33 +0100 |
---|---|---|
committer | John Ankarström <john@ankarstrom.se> | 2020-11-23 23:23:29 +0100 |
commit | 292678dc5037817c67e2c953012b4a84cf297475 (patch) | |
tree | ec12b4b12bf8a8e1748e66d7f9337f5e0971172b | |
download | msc-292678dc5037817c67e2c953012b4a84cf297475.tar.gz |
Add dz (Deezer) and lf (Last.fm) tools
-rw-r--r-- | Makefile | 2 | ||||
-rwxr-xr-x | dz/dzq | 17 | ||||
-rwxr-xr-x | dz/dzs | 11 | ||||
-rwxr-xr-x | lf/lfp | 10 | ||||
-rwxr-xr-x | lf/lfs | 19 | ||||
-rwxr-xr-x | lf/lfu | 59 |
6 files changed, 118 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d931ea0 --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +install: + install dz/* lf/* /usr/local/bin/ @@ -0,0 +1,17 @@ +#!/bin/sh + +test -z "$1" && { echo usage: $0 query 1>&2; exit 1; } +q=`printf '%s' "$1" | jq -sRr @uri` + +rm /tmp/dzq 2> /dev/null + +curl -s "https://www.deezer.com/search/$q" | +grep __DZR_APP_STATE__ | +cut -d= -f2- | +jq -r '.TRACK.data[] | .SNG_TITLE + "\n" + .ART_NAME + "\n" + .SNG_ID' 2>&- | +paste - - - | +sed 's/ */ /g' | +head -${2:-10} | +column -ts' ' | +nl -w 2 | +tee -a /tmp/dzq @@ -0,0 +1,11 @@ +#!/bin/sh + +# Get similar songs + +lfu "$@" | +xargs lfs | +lfp | +while read q +do + dzq "$q" | head -1 +done @@ -0,0 +1,10 @@ +#!/bin/sh + +# Parse Last.fm URL, print title - artist + +while read url +do + printf '%b\n' "$(printf '%s\n' "$url" | sed 's/+/ /g; s/%/\\\\x/g')" | + cut -d/ -f5,7 | + sed 's,^\(.*\)/\(.*\),\2 - \1,' +done @@ -0,0 +1,19 @@ +#!/bin/sh + +# Get similar songs from Last.fm + +usage() { echo usage: $0 base-url 1>&2; exit 1; } + +url=$1 + +# Retrieve similar songs +curl -s "$url" | +sed '/^[ ]*$/d' | +awk -F \" ' + /class="track-similar-tracks-item-name"/ { + getline; + getline; + print $2; + } +' | +sed 's,^,https://www.last.fm,' @@ -0,0 +1,59 @@ +#!/bin/sh + +# Search for track(s) on Last.fm, retrieve URL(s) + +usage() { echo usage: $0 [-a] [-f] [-m max] base-url 1>&2; exit 1; } + +# Parse options +a= +f= +m=10 +while getopts afm: o +do + case $o in + a) a=1 ;; # all + f) f=1 ;; # first + m) m=$OPTARG ;; # max + ?) usage + esac +done +shift $((OPTIND-1)) +q=$1 + +m=$((m+0)) +test $m -lt 1 && m=10 + +# Retrieve search results +tmp=/tmp/lfu.$RANDOM +curl -s -G --data-urlencode "q=$q" 'https://www.last.fm/search/tracks' | +sed '/^[ ]*$/d' | +awk -F \" ' + /class="chartlist-name"/ { + getline; + getline; + getline; + getline; + getline; + getline; + print $2; + i++; + if (i > '"$((m-1))"') exit; + } +' | +sed 's,^,https://www.last.fm,' > $tmp + +# Select/print results +if test ! -z "$a" +then + cat $tmp +elif test ! -z "$f" +then + sed 1q < $tmp +else + < $tmp lfp | nl -w2 -s'. ' > /dev/tty + read n < /dev/tty + n=$((n+0)) + test $n -lt 1 && n=1 + awk "NR == $n {print}" < $tmp +fi +rm $tmp |