ОсновноеRadiotalkПользовательское
Технологии вещания, софт, скрипты
7   •   Посмотреть все темы

Streamripper perl script

 

16
Alex149149 @Alex149149
Доброго времени суток!
Подскажите, кто пользуется Streamripper для записи потока.
Хочу использовать скрипт, который предоставляется вместе с Streamripper
  1.  
  2. #! /usr/bin/perl
  3. ###########################################################################
  4. # This is an example script that sends external metadata to streamripper.
  5. # It implements an external program that:
  6. # 1) Fetches a web page
  7. # 2) Searches the web page for the artist and title information
  8. # 3) Sends the information to streamripper
  9. #
  10. # To invoke the script, do this:
  11. # streamripper URL -E "perl fetch_external_metadata.pl META_URL"
  12. #
  13. # This assumes that META_URL is the URL with the artist/title information
  14. #
  15. # You will need perl and LWP::Simple installed to run this script.
  16. # On unix, you install LWP::Simple as root, like this:
  17. # perl -MCPAN -e 'install LWP::Simple';
  18. # On windows, LWP::Simple is included in the ActiveState perl distribution.
  19. #
  20. # This script is in the public domain. You are free to use, modify and
  21. # redistribute without restrictions.
  22. ###########################################################################
  23. use LWP::Simple;
  24. if ($#ARGV != 0) {
  25. die "Usage: fetch_external_metadata.pl URL\n";
  26. }
  27. $url = $ARGV[0];
  28. while (1) {
  29. my $content = get $url;
  30. if ($content =~ m/title="(.*)" artist="(.*)"/) {
  31. $title = "TITLE=$1\n";
  32. $artist = "ARTIST=$2\n";
  33. $end_of_record = ".\n";
  34. $meta_data = $title . $artist . $end_of_record;
  35. syswrite (STDOUT, $meta_data, length($meta_data));
  36. }
  37. sleep (10);
  38. }


Делаю все по инструкции в самом скрипте
  1.  
  2. streamripper URL -E "perl fetch_external_metadata.pl META_URL"


вместо "META_URL" указываю ссылку вида ********** по которой вывод информация о треке. Вот такого вида:
  1.  
  2. title="name" artist="track_artist"


но скрипт не выполняет условие:
  1.  
  2. if ($content =~ m/title="(.*)" artist="(.*)"/) {

и следовательно Streamripper не указывает TITLE и ARTIST в названии файла записи.
Я так понимаю, что вывод по ссылке ********** неверный.
Как правильно выводить данные для этого perl скрипта?

0
419
gyurgin_ @gyurgin_
Врядли кто конечно пользуется, проект давно числится в мертвых... Скрипт рабочий, регулярка самая простая, но надо соответствовать четко, то есть кроме
  1. title="" artist=""
на странице вобще ничего не должно быть.
Только на кой все это если он метаданные читает?

0
16
Alex149149 @Alex149149
gyurgin_ пишет:

Врядли кто конечно пользуется, проект давно числится в мертвых... Скрипт рабочий, регулярка самая простая, но надо соответствовать четко, то есть кроме
  1. title="" artist=""
на странице вобще ничего не должно быть.
Только на кой все это если он метаданные читает?


просто в artist встраивается еще и время трека.
на странице ничего кроме
  1. title="" artist=""

нет

Отредактировано Alex149149 - 03.09.2017
0
419
gyurgin_ @gyurgin_
Ну значит смотрите зависимости самого срипта, вобще, на какой системе все это у Вас?
И что такое "время трека"? там же есть -D pattern, все можно отформатировать.

0
16
Alex149149 @Alex149149
gyurgin_ пишет:

Ну значит смотрите зависимости самого срипта, вобще, на какой системе все это у Вас?
И что такое "время трека"? там же есть -D pattern, все можно отформатировать.


на Ubuntu.
про -D есть просто трудности у меня. не могу правильно составить вот такой вид:
  1. /usr/name/2017-09-03/15:55:45 - artist - title.mp3

остановился на этом
  1.  
  2. -D /usr/name/`date +%Y-%m-%d`

как составить дальше не пойму

0
419
gyurgin_ @gyurgin_
Alex149149 пишет:


  1. /usr/name/2017-09-03/15:55:45 - artist - title.mp3

остановился на этом
  1.  
  2. -D /usr/name/`date +%Y-%m-%d`

как составить дальше не пойму

Вот так:
  1. -D "/usr/name/`date +%Y-%m-%d/%T` - %A - %T"

А что касается Ubuntu - в самом скрипте же есть:
  1. perl -MCPAN -e 'install LWP::Simple'
там соглашаемся на все, установятся зависимости и будет скрипт работать.

Отредактировано gyurgin_ - 03.09.2017
0
16
Alex149149 @Alex149149
gyurgin_ пишет:


Вот так:
  1. -D "/usr/name/`date +%Y-%m-%d/%T` - %A - %T"

А что касается Ubuntu - в самом скрипте же есть:
  1. perl -MCPAN -e 'install LWP::Simple'
там соглашаемся на все, установятся зависимости и будет скрипт работать.


Вроде все логично написали, спасибо большое что помогаете!
Но установил LWP::Simple и скрипт так и не заработал((( Попробовал Ваш вариант pattern-а, но время в название файла не добавилось, только artist и title

0
419
gyurgin_ @gyurgin_
Да не может быть, можно так:
  1. -D "/usr/name/`date +%Y-%m-%d/%H:%M:%S` - %A - %T"

или так:
  1. -D "/usr/name/`date +%Y-%m-%d/%T` - %A - %T"

или совсем сокаращенно:
  1. -D "/usr/name/`date +%F/%T` - %A - %T"

Пусть запишет несколько фрагментов, после переноса из incomplete время будет на месте.

0
16
Alex149149 @Alex149149
gyurgin_ пишет:

Да не может быть, можно так:
  1. -D "/usr/name/`date +%Y-%m-%d/%H:%M:%S` - %A - %T"

или так:
  1. -D "/usr/name/`date +%Y-%m-%d/%T` - %A - %T"

или совсем сокаращенно:
  1. -D "/usr/name/`date +%F/%T` - %A - %T"

Пусть запишет несколько фрагментов, после переноса из incomplete время будет на месте.


Действительно, подождав немного, файлы из incomplete переместились уже с записью времени.
Спасибо Вам огромное!

perl скрипт к сожалению так и не заработал(((
  1.  
  2. perl -MCPAN -e 'install LWP::Simple'

установил с root
делал вот так
  1.  
  2. sudo streamripper URL -E "perl /путь к скрипту/fetch_external_metadata.pl **********

пробовал и /index.html и /index.txt
как думаете, никаких дополнительных команд не нужно добавлять?

0
419
gyurgin_ @gyurgin_
Ну попробуйте /usr/bin/perl, или дайте линк на Ваш скрипт, если он конечно в паблике.

0
16
Alex149149 @Alex149149
gyurgin_ пишет:

Ну попробуйте /usr/bin/perl, или дайте линк на Ваш скрипт, если он конечно в паблике.


какой день уже мучаюсь и не пойму в чем причина(

скрипт perl "metadata.pl"
  1.  
  2. #! /usr/bin/perl
  3. ###########################################################################
  4. # This is an example script that sends external metadata to streamripper.
  5. # It implements an external program that:
  6. # 1) Fetches a web page
  7. # 2) Searches the web page for the artist and title information
  8. # 3) Sends the information to streamripper
  9. #
  10. # To invoke the script, do this:
  11. # streamripper URL -E "perl fetch_external_metadata.pl META_URL"
  12. #
  13. # This assumes that META_URL is the URL with the artist/title information
  14. #
  15. # You will need perl and LWP::Simple installed to run this script.
  16. # On unix, you install LWP::Simple as root, like this:
  17. # perl -MCPAN -e 'install LWP::Simple';
  18. # On windows, LWP::Simple is included in the ActiveState perl distribution.
  19. #
  20. # This script is in the public domain. You are free to use, modify and
  21. # redistribute without restrictions.
  22. ###########################################################################
  23. use LWP::Simple;
  24. if ($#ARGV != 0) {
  25. die "Usage: fetch_external_metadata.pl URL\n";
  26. }
  27. $url = $ARGV[0];
  28. while (1) {
  29. my $content = get $url;
  30. if ($content =~ m/title="(.*)" artist="(.*)"/) {
  31. $title = "TITLE=$1\n";
  32. $artist = "ARTIST=$2\n";
  33. $end_of_record = ".\n";
  34. $meta_data = $title . $artist . $end_of_record;
  35. syswrite (STDOUT, $meta_data, length($meta_data));
  36. }
  37. else{
  38. die "ERROR\n";
  39. }
  40. sleep (10);
  41. }


файл для парсинга "index.php"
  1.  
  2. title="titleTest" artist="artistTest"

больше ничего этот файл не содержит (ни html, ни body)

команда запуска
  1.  
  2. sudo streamripper ********** -E "perl /usr/share/doc/streamripper/examples/metadata.pl **********


и в итоге в терминале пишет
  1.  
  2. ERROR
  3. [skipping... ] - [ 121kb]


т.е. как я понимаю, не выполняется условие вот этой строчки perl скрипта
  1.  
  2. if ($content =~ m/title="(.*)" artist="(.*)"/) {

а пути и команды в терминале прописаны верно

0
419
gyurgin_ @gyurgin_
Я же предложил вариант покажите выдачу срипта как он есть, дайте адрес - хуже от этого не будет, - верно?

0
16
Alex149149 @Alex149149
gyurgin_ пишет:

Я же предложил вариант покажите выдачу срипта как он есть, дайте адрес - хуже от этого не будет, - верно?


сорри, за долгий ответ
вот вывод скрипта **********

0
16
Alex149149 @Alex149149
походу не работает регулярка((((

0
419
gyurgin_ @gyurgin_
Приветствую, работает, в таком виде выдает
  1. # perl fetch_external_metadata.pl **********
  2. TITLE=Miracle (Amice Remix)
  3. ARTIST=Julian Perretta
  4. .
  5. TITLE=Miracle (Amice Remix)
  6. ARTIST=Julian Perretta
  7. .
  8. TITLE=She's On My Mind
  9. ARTIST=JP Cooper
  10. .
  11. TITLE=She's On My Mind
  12. ARTIST=JP Cooper
  13. .

0





Согласие на обработку данных на нашем сайте

Продолжая просматривать страницу, вы соглашаетесь с использованием файлов «Cookie» и с Политикой конфиденциальности «Privacy».
Наверху или внизу страницы вы можете изменить валюту и язык по умолчанию. Английская версия сайта ещё находится в доработке и доступна не полностью.