summaryrefslogtreecommitdiff
path: root/lf
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 /lf
downloadmsc-292678dc5037817c67e2c953012b4a84cf297475.tar.gz
Add dz (Deezer) and lf (Last.fm) tools
Diffstat (limited to 'lf')
-rwxr-xr-xlf/lfp10
-rwxr-xr-xlf/lfs19
-rwxr-xr-xlf/lfu59
3 files changed, 88 insertions, 0 deletions
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