corz.org text viewer..
[currently viewing: /public/linux/usr/local/bin/signux.sh - raw]
#!/bin/bash
#
#    signux  ..the ampsig update script for Linux..  http://ampsig.com
#
#    needs the "xmms-infopipe" plugin for the XMMS media player..
#    http://www.beastwithin.org/users/wwwwolf/code/xmms/infopipe.html
#    some Linux systems have it pre-installed.
#
#    Also works with Beep Media Player, if you apply this patch to info-pipe before compiling..
#    http://www.beastwithin.org/users/wwwwolf/code/xmms/xmms-infopipe-1.3-for-beepmp.patch.gz
#
#    info-pipe creates a "named pipe" [/tmp/xmms-info] with textual song info which we parse and send
#    to our ampsig via cURL. this script expects you to have cURL properly installed (most *nix systems do)

#    put it in a cron and run every minute or so..
#
#    # ampsig update (every minute)
#    */1 * * * * /usr/local/bin/signux > /dev/null 2>&1 
#
#    or maybe..    (same timing, but logged - crazy!)
#
#    0-59 * * * * /usr/local/bin/signux >> /var/log/cron 2>&1
#
#    or drop inside a timed loop.
#
#    have fun!
#
#    (or
#    ;o)
#
#    (c) corz.org & ampsig.com 2005 ->
#

    # basic prefs (status prefs are below)
    username="USERNAME"
    password="PASSWORD"
    url="http://mydomain.com/path/to/amp.php"
    xmms_file=/tmp/xmms-info


# are we up and running?
piping=`cat $xmms_file` >&2
if [ -s "$piping" ]; then
    printf "\nno update performed\ncouldn't locate named pipe: $xmms_file\n\n" >&2
    exit 1
fi

# if we work these out now, you can use them in your status..
bitrate=`cat $xmms_file | grep 'Current bitrate' | sed -e 's/^.*: //'`
frequency=`cat $xmms_file | grep 'Samping Frequency' | sed -e 's/^.*: //'`
song_time=`cat $xmms_file | grep '^Time' | sed -e 's/^.*: //'`
frequency=`expr $frequency / 1000`
bitrate=`expr $bitrate / 1000`


    # more prefs! ..
    play_status="${song_time}m | ${bitrate}kb/s | ${frequency}KHz"
    pause_status='paused for thought'
    stopped_status='stopped for peace'

# setup variables to send..
uTu=`cat /proc/uptime | awk 'BEGIN { FS = "." } { print $(NF-2) }'`
playing=`cat $xmms_file | grep 'Status' | sed -e 's/^.*: //'`
title=`cat $xmms_file | grep '^Title' | sed -e 's/^.*: //'`
length=`cat $xmms_file | grep '^uSecTime' | sed -e 's/^.*: //'`
length=`expr $length / 1000`
pos=`cat $xmms_file | grep '^uSecPosition' | sed -e 's/^.*: //'`
pos=`expr $pos / 1000`

# perhaps we will recompile info-pipe with album name info..
# in the absence of "album", ampsig will use "dir", so let's get that..
file_path=`cat $xmms_file | grep '^File' | sed -e 's/^: //'`
dir=`echo $file_path | awk 'BEGIN { FS = "/" } { print $(NF-1) }'`

# other stuff that's easy to get on a linux box..
puter_type=`cat /proc/cpuinfo | grep '^model name' | sed -e 's/^.*: //'`
puter_speed=`cat /proc/cpuinfo | grep 'cpu MHz' | sed -e 's/^.*: //'`
# insert favourite geek data ;o)


# what's our status?
case "$playing" in
    'Playing')
        status=$play_status
        ;;
    'Paused')
        status=$pause_status
        ;;
    'Stopped')
        status=$stopped_status
        ;;
    *)
        status='no status given'
        ;;
esac

url_encode () {
    echo "$@" | awk    '
        BEGIN {
            # with inspiration from Heiner Steven and Rick Richardson
            split ("1 2 3 4 5 6 7 8 9 A B C D E F", hexit, " ")
            hexit [0] = 0 # setup the hex values we will use..
            for (i = 1 ; i <= 255 ; ++i) ord[ sprintf ("%c", i) "" ] = i + 0
        } {
            encoded = ""
            for (i = 1 ; i <= length ($0) ; ++i) {
                c = substr ($0, i, 1)
                if ( c ~ /[a-zA-Z0-9.-]/ ) { # allow only basic chrs
                    encoded = encoded c
                } else { # encode everything else..
                    lo = ord[c] % 16
                    hi = int (ord[c] / 16);
                    encoded = encoded "%" hexit [hi] hexit [lo]
                }
            }
        #printf encoded
        }
        END {
        printf ("%s", encoded)
        }
    '
}
# if you have mawk, oawk, gawk, or whatever, use that instead. (probably symlinked)

# remember to URLencode any other "strings" you might add to the $data
title=`url_encode $title`
status=`url_encode $status`

# finally, send the ampsig update via curl POST.. (may split for different status. hmm)
data="user=$username&pass=$password&playing=$playing&uptime=$uTu&length=$length&pos=$pos&title=$title&status=$status&dir=$dir"
curl -d "$data" $url

exit 0


# alternatively, this "poor mans URLencode" would would cover most ID3 strings..
#url_encode () {
#   echo "$@" | sed -e 's/ /%20/g' -e 's/\+/%2B/g' -e 's/\&/%26/g'
#}

Welcome to corz.org!

If something isn't working, I'm probably improving it, try again in a minute. If it's still not working, please mail me!