From 0a76b7239781e6e0cb77169302219e6566b6c4d3 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Sun, 30 Jan 2011 11:12:00 +0100 Subject: Move example eventcmd scripts to own directory --- contrib/eventcmd-examples/dmenu.pl | 47 ++++++++++++++++++++++++ contrib/eventcmd-examples/eventcmd.sh | 38 +++++++++++++++++++ contrib/eventcmd-examples/rbot.rb | 50 +++++++++++++++++++++++++ contrib/eventcmd-examples/scrobble.py | 69 +++++++++++++++++++++++++++++++++++ 4 files changed, 204 insertions(+) create mode 100755 contrib/eventcmd-examples/dmenu.pl create mode 100755 contrib/eventcmd-examples/eventcmd.sh create mode 100755 contrib/eventcmd-examples/rbot.rb create mode 100755 contrib/eventcmd-examples/scrobble.py (limited to 'contrib/eventcmd-examples') diff --git a/contrib/eventcmd-examples/dmenu.pl b/contrib/eventcmd-examples/dmenu.pl new file mode 100755 index 0000000..194e1a7 --- /dev/null +++ b/contrib/eventcmd-examples/dmenu.pl @@ -0,0 +1,47 @@ +#!/usr/bin/perl + +# Copyright (c) 2011 +# Juan C. Muller + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +use strict; +use warnings; + +# Use this script to be able to use change-station-dmenu.sh as +# event_command = $HOME/.config/pianobar/dmenu.pl + +# (taken from https://github.com/jcmuller/pianobar-notify) + +if (my $action = shift @ARGV) +{ + if ($action eq 'songstart') + { + my $stations = '/tmp/pianobar_stations'; + open(my $fh, ">$stations") or die "Couldn't open $stations for writing: $!"; + + while () + { + print $fh "$1. $2\n" if (/station(\d+)=(.+)$/); + } + + close($fh); + } +} + diff --git a/contrib/eventcmd-examples/eventcmd.sh b/contrib/eventcmd-examples/eventcmd.sh new file mode 100755 index 0000000..81dee3a --- /dev/null +++ b/contrib/eventcmd-examples/eventcmd.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# create variables +while read L; do + k="`echo "$L" | cut -d '=' -f 1`" + v="`echo "$L" | cut -d '=' -f 2`" + export "$k=$v" +done < <(grep -e '^\(title\|artist\|album\|stationName\|pRet\|pRetStr\|wRet\|wRetStr\|songDuration\|songPlayed\|rating\|coverArt\|stationCount\|station[0-9]*\)=' /dev/stdin) # don't overwrite $1... + +case "$1" in +# songstart) +# echo 'naughty.notify({title = "pianobar", text = "Now playing: ' "$title" ' by ' "$artist" '"})' | awesome-client - +# echo "$title -- $artist" > $HOME/.config/pianobar/nowplaying +# # or whatever you like... +# ;; + +# songfinish) +# # scrobble if 75% of song have been played, but only if the song hasn't +# # been banned +# if [ -n "$songDuration" ] && +# [ $(echo "scale=4; ($songPlayed/$songDuration*100)>50" | bc) -eq 1 ] && +# [ "$rating" -ne 2 ]; then +# # scrobbler-helper is part of the Audio::Scrobble package at cpan +# # "pia" is the last.fm client identifier of "pianobar", don't use +# # it for anything else, please +# scrobbler-helper -P pia -V 1.0 "$title" "$artist" "$album" "" "" "" "$((songDuration/1000))" & +# fi +# ;; + + *) + if [ "$pRet" -ne 1 ]; then + echo "naughty.notify({title = \"pianobar\", text = \"$1 failed: $pRetStr\"})" | awesome-client - + elif [ "$wRet" -ne 1 ]; then + echo "naughty.notify({title = \"pianobar\", text = \"$1 failed: Network error: $wRetStr\"})" | awesome-client - + fi + ;; +esac + diff --git a/contrib/eventcmd-examples/rbot.rb b/contrib/eventcmd-examples/rbot.rb new file mode 100755 index 0000000..abdac05 --- /dev/null +++ b/contrib/eventcmd-examples/rbot.rb @@ -0,0 +1,50 @@ +#!/usr/bin/ruby + +# pianobar event script to make rbot send currently playing song to an IRC +# channel + +# Copyright (c) 2010 +# Matthew M. Boedicker + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +# for setting up rbot-remote see rbot/bin/rbot-remote + +# add this script to ~/.config/pianobar/config by adding +# event_command = /home/user/.config/pianobar/rbot.rb + +# make sure these are quoted correctly for popen +rbot_remote = '/home/user/src/rbot/bin/rbot-remote' +rbot_user = 'remote' +rbot_password = 'secret' +channel = '#current' + +event = ARGV.first + +if event == 'songstart' + d = {} + + STDIN.each_line { |line| d.store(*line.chomp.split('=', 2)) } + + IO.popen("#{rbot_remote} -u #{rbot_user} -p #{rbot_password} -d '#{channel}'", + 'w') do |p| + p.write("now playing \"#{d['title']}\" by \"#{d['artist']}\"") + end + +end diff --git a/contrib/eventcmd-examples/scrobble.py b/contrib/eventcmd-examples/scrobble.py new file mode 100755 index 0000000..51e19c2 --- /dev/null +++ b/contrib/eventcmd-examples/scrobble.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python + +""" +Last.fm scrobbling for Pianobar, the command-line Pandora client. + +Copyright (c) 2011 +Jon Pierce + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Dependencies: +1) https://github.com/PromyLOPh/pianobar/ +2) http://python.org/ +3) http://code.google.com/p/pylast/ +4) http://www.last.fm/api/account + +Installation: +1) Copy this script and pylast.py to the Pianobar config directory, ~/.config/pianobar/, and make sure this script is executable +2) Supply your own Last.fm credentials below +3) Update Pianobar's config file to use this script as its event_command +""" + +import sys +import time + +API_KEY = "################################" +API_SECRET = "################################" +USERNAME = "########" +PASSWORD = "########" +THRESHOLD = 50 # the percentage of the song that must have been played to scrobble + +def main(): + + event = sys.argv[1] + lines = sys.stdin.readlines() + fields = dict([line.strip().split("=", 1) for line in lines]) + + # fields: title, artist, album, songDuration, songPlayed, rating, stationName, pRet, pRetStr, wRet, wRetStr + artist = fields["artist"] + title = fields["title"] + song_duration = int(fields["songDuration"]) + song_played = int(fields["songPlayed"]) + + # events: songstart, songfinish, ??? + if event == "songfinish" and 100.0 * song_played / song_duration > THRESHOLD: + song_started = int(time.time() - song_played / 1000.0) + import pylast + network = pylast.LastFMNetwork(api_key = API_KEY, api_secret = API_SECRET, username = USERNAME, password_hash = pylast.md5(PASSWORD)) + network.scrobble(artist = artist, title = title, timestamp = song_started) + +if __name__ == "__main__": + main() + -- cgit v1.2.3