summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Ankarström <john@ankarstrom.se>2020-11-23 23:11:33 +0100
committerJohn Ankarström <john@ankarstrom.se>2020-11-23 23:23:29 +0100
commit292678dc5037817c67e2c953012b4a84cf297475 (patch)
treeec12b4b12bf8a8e1748e66d7f9337f5e0971172b
downloadmsc-292678dc5037817c67e2c953012b4a84cf297475.tar.gz
Add dz (Deezer) and lf (Last.fm) tools
-rw-r--r--Makefile2
-rwxr-xr-xdz/dzq17
-rwxr-xr-xdz/dzs11
-rwxr-xr-xlf/lfp10
-rwxr-xr-xlf/lfs19
-rwxr-xr-xlf/lfu59
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/
diff --git a/dz/dzq b/dz/dzq
new file mode 100755
index 0000000..17615fd
--- /dev/null
+++ b/dz/dzq
@@ -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
diff --git a/dz/dzs b/dz/dzs
new file mode 100755
index 0000000..2b909a9
--- /dev/null
+++ b/dz/dzs
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Get similar songs
+
+lfu "$@" |
+xargs lfs |
+lfp |
+while read q
+do
+ dzq "$q" | head -1
+done
diff --git a/lf/lfp b/lf/lfp
new file mode 100755
index 0000000..cd21b04
--- /dev/null
+++ b/lf/lfp
@@ -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
diff --git a/lf/lfs b/lf/lfs
new file mode 100755
index 0000000..112e994
--- /dev/null
+++ b/lf/lfs
@@ -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,'
diff --git a/lf/lfu b/lf/lfu
new file mode 100755
index 0000000..415f448
--- /dev/null
+++ b/lf/lfu
@@ -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