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

Perl + LastFM

 

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

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

сам код
  1.  
  2. use Net::LastFM::Submission;
  3. my $submit = Net::LastFM::Submission->new(
  4. 'user' => 'XXX',
  5. 'password' => 'YYY',
  6. );
  7. $submit->handshake;
  8. $submit->submit(
  9. 'artist' => 'Artist name',
  10. 'title' => 'Track title',
  11. 'time' => time - 10*60, # 10 minutes ago
  12. );
  13. $submit->now_playing(
  14. 'artist' => 'Artist name',
  15. 'title' => 'Track title',
  16. );


там где 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

Тем не менее, лучше скрипт дергать в бекграунде например такой строчкой в основном скрипте
  1.  
  2. exec("/home/ls/lastfm.pl 'исполнитель' 'песня' & >/dev/null");


lastfm.pl тогда выглядит так
  1.  
  2. #!/usr/bin/perl
  3. use Net::LastFM::Submission;
  4. my ($lfm_a, $lfm_t) = @ARGV;
  5. if ($lfm_a){
  6. $submit = Net::LastFM::Submission->new(
  7. 'user' => 'логин',
  8. 'password' => 'пароль',
  9. 'enc' => 'utf-8',
  10. );
  11. $submit->handshake;
  12. $submit->submit(
  13. 'artist' => $lfm_a,
  14. 'title' => $lfm_t,
  15. 'time' => time - 5*60,
  16. 'enc' => 'utf-8',
  17. );
  18. $submit->now_playing(
  19. 'artist' => $lfm_a,
  20. 'title' => $lfm_t,
  21. 'enc' => 'utf-8',
  22. );
  23. }


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

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

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

0