ОсновноеRadiotalkПользовательское
Общие вопросы по интернет радио вещанию
6   •   Посмотреть все темы

Perl + LastFM

 

6245
Тарас @tarasian666
Есть простой способ скроблить на ластфм perl скриптом что угодно и откуда угодно (почти)
К примеру такую фитчу можно прикрутить даже к ices, ezstream и тп

Для начала нужно установить Net::LastFM::Submission, можно скачать отсюда ********** (кстате там сразу описание) и инсталировать по инструкции внутри,
лично я установил через cpan

сам код

use Net::LastFM::Submission;

my $submit = Net::LastFM::Submission->new(
'user' => 'XXX',
'password' => 'YYY',
);

$submit->handshake;

$submit->submit(
'artist' => 'Artist name',
'title' => 'Track title',
'time' => time - 10*60, # 10 minutes ago
);

$submit->now_playing(
'artist' => 'Artist name',
'title' => 'Track title',
);


там где user password все понятно, $submit->handshake проходим авторизацию - жмем ластфм руку ))

$submit->submit будет отображать что проиграно 10*60 то есть 10 минут назад
$submit->now_playing будет отображать что играет сейчас, но использовать только эту функцию не получиться, так как без предыдущей песня пропадет из списка через минуту

'Artist name' и 'Track title' меняем везде на свою переменную
также не мешало б поставить кодировку, у меня все в utf-8 поэтому 'enc' => 'utf-8' в submit и now_playing

и можно этот кусок кода вставить например в ices.pm но есть пару НО

если поставить это до вывода трека скриптом то может быть задержка, поставить после вывода - вещалка может не дожидатся окончания выполнения скрипта и отрубить после получения трека, хотя в ices может будет ждать, сам проверял это в liquidsoap

Тем не менее, лучше скрипт дергать в бекграунде например такой строчкой в основном скрипте

exec("/home/ls/lastfm.pl 'исполнитель' 'песня' & >/dev/null");


lastfm.pl тогда выглядит так

#!/usr/bin/perl

use Net::LastFM::Submission;

my ($lfm_a, $lfm_t) = @ARGV;

if ($lfm_a){
$submit = Net::LastFM::Submission->new(
'user' => 'логин',
'password' => 'пароль',
'enc' => 'utf-8',
);

$submit->handshake;

$submit->submit(
'artist' => $lfm_a,
'title' => $lfm_t,
'time' => time - 5*60,
'enc' => 'utf-8',
);

$submit->now_playing(
'artist' => $lfm_a,
'title' => $lfm_t,
'enc' => 'utf-8',
);
}


$submit->now_playing впринципе можно не использовать, так как это для realtime

Можем вообще в крон засунуть чтоб он парсил историю или еще что.

Конечно же можно обойтись без Net::LastFM::Submission написав скрипт чуть побольше, но об этом как нибуть позже )