From 292678dc5037817c67e2c953012b4a84cf297475 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Mon, 23 Nov 2020 23:11:33 +0100 Subject: Add dz (Deezer) and lf (Last.fm) tools --- Makefile | 2 ++ dz/dzq | 17 +++++++++++++++++ dz/dzs | 11 +++++++++++ lf/lfp | 10 ++++++++++ lf/lfs | 19 +++++++++++++++++++ lf/lfu | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 118 insertions(+) create mode 100644 Makefile create mode 100755 dz/dzq create mode 100755 dz/dzs create mode 100755 lf/lfp create mode 100755 lf/lfs create mode 100755 lf/lfu 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 -- cgit v1.2.3