]>
jfr.im git - irssi-scripts.git/blob - listenbrainz.pl
a5d3cb4be85c5c2885adcec6e99eee9ba570cc6d
2 # CC0 https://creativecommons.org/publicdomain/zero/1.0/
8 use vars
qw( $VERSION %IRSSI ) ;
10 my $have_uri_escape = eval { require URI
:: Escape
; URI
:: Escape-
> import ( 'uri_escape' ); 1 ; };
11 unless ( $have_uri_escape ) {
12 sub _uri_escape_char
{
13 '%' . uc ( unpack ( 'H*' , $_ [ 0 ]));
16 $_ [ 0 ] =~ s/([^a-zA-Z0-9._~-])/_uri_escape_char($1)/ger ;
20 use JSON qw
/decode_json/ ;
22 my $ua = LWP
:: UserAgent-
> new ;
25 $ua -> agent ( "irssi+listenbrainz.pl/ $VERSION " );
27 authors
=> "John Runyon" ,
28 name
=> "listenbrainz" ,
29 description
=> "A now-playing-script which uses ListenBrainz" ,
31 url
=> 'https://jfr.im/git/' ,
32 contact
=> 'git @jfr .im'
35 sub cmd_listenbrainz
{
36 my ( $username , $server , $witem ) = @_ ;
37 if (! length $username ) {
38 $username = Irssi
:: settings_get_str
( 'listenbrainz_username' );
40 if (! length $username ) {
41 Irssi
:: print ( ' %R >> %n ' . $IRSSI { name
}. ': No username specified.' );
45 my $url = "https://api.listenbrainz.org/1/user/" . uri_escape
( $username ) . "/playing-now" ;
46 my $req = HTTP
:: Request-
> new ( 'GET' , $url );
48 my $res = $ua -> request ( $req );
49 if ( $res -> is_success ) {
50 my $data = decode_json
( $res -> content );
51 my %track = %{ $data ->{ payload
}{ listens
}[ 0 ]{ track_metadata
} };
52 my $s = sprintf ( Irssi
:: settings_get_str
( 'listenbrainz_format' ), $username , $track { track_name
}, $track { artist_name
}, $track { release_name
}, $track { additional_info
}{ media_player
} // $track { additional_info
}{ listening_from
});
53 $witem -> command ( "say $s " );
55 print "ListenBrainz request Failed!" ;
56 if ( Irssi
:: settings_get_bool
( 'listenbrainz_debug' )) {
59 print $res -> status_line ;
66 if ( Irssi
:: settings_get_bool
( 'listenbrainz_alias_np' )) {
71 Irssi
:: settings_add_bool
( 'listenbrainz' , 'listenbrainz_debug' , 0 ); # Output info when an error occurs?
72 Irssi
:: settings_add_bool
( 'listenbrainz' , 'listenbrainz_alias_np' , 1 ); # Should /np work as an alias for /listenbrainz? Set to OFF if also using lastfm.pl.
73 Irssi
:: settings_add_str
( 'listenbrainz' , 'listenbrainz_username' , '' ); # Default username when none is supplied
74 # Output format - 1: username, 2: track, 3: artist, 4: album, 5: player
75 Irssi
:: settings_add_str
( 'listenbrainz' , 'listenbrainz_format' , ' %1$s playing %2$s by %3$s ( %4$s ) (from %5$s )' );
77 Irssi
:: command_bind
( 'listenbrainz' , 'cmd_listenbrainz' , 'listenbrainz' );
78 Irssi
:: command_bind
( 'np' , 'cmd_np' , 'listenbrainz' );
79 Irssi
:: print ( ' %G >> %n ' . $IRSSI { name
}. ' ' . $VERSION . ' loaded' );