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 --- lf/lfp | 10 ++++++++++ lf/lfs | 19 +++++++++++++++++++ lf/lfu | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100755 lf/lfp create mode 100755 lf/lfs create mode 100755 lf/lfu (limited to 'lf') 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