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

Streamripper perl script

 

16
Alex149149 @Alex149149
Доброго времени суток!
Подскажите, кто пользуется Streamripper для записи потока.
Хочу использовать скрипт, который предоставляется вместе с Streamripper

#! /usr/bin/perl
###########################################################################
# This is an example script that sends external metadata to streamripper.
# It implements an external program that:
# 1) Fetches a web page
# 2) Searches the web page for the artist and title information
# 3) Sends the information to streamripper
#
# To invoke the script, do this:
# streamripper URL -E "perl fetch_external_metadata.pl META_URL"
#
# This assumes that META_URL is the URL with the artist/title information
#
# You will need perl and LWP::Simple installed to run this script.
# On unix, you install LWP::Simple as root, like this:
# perl -MCPAN -e 'install LWP::Simple';
# On windows, LWP::Simple is included in the ActiveState perl distribution.
#
# This script is in the public domain. You are free to use, modify and
# redistribute without restrictions.
###########################################################################

use LWP::Simple;

if ($#ARGV != 0) {
die "Usage: fetch_external_metadata.pl URL\n";
}
$url = $ARGV[0];

while (1) {
my $content = get $url;

if ($content =~ m/title="(.*)" artist="(.*)"/) {
$title = "TITLE=$1\n";
$artist = "ARTIST=$2\n";
$end_of_record = ".\n";
$meta_data = $title . $artist . $end_of_record;
syswrite (STDOUT, $meta_data, length($meta_data));
}
sleep (10);
}


Делаю все по инструкции в самом скрипте

streamripper URL -E "perl fetch_external_metadata.pl META_URL"


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

title="name" artist="track_artist"


но скрипт не выполняет условие:

if ($content =~ m/title="(.*)" artist="(.*)"/) {

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

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

16
Alex149149 @Alex149149
gyurgin_ пишет:

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


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

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

16
Alex149149 @Alex149149
gyurgin_ пишет:

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


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

-D /usr/name/`date +%Y-%m-%d`

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

419
gyurgin_ @gyurgin_
Alex149149 пишет:


/usr/name/2017-09-03/15:55:45 - artist - title.mp3
остановился на этом

-D /usr/name/`date +%Y-%m-%d`

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

Вот так:
-D "/usr/name/`date +%Y-%m-%d/%T` - %A - %T"
А что касается Ubuntu - в самом скрипте же есть:
perl -MCPAN -e 'install LWP::Simple' там соглашаемся на все, установятся зависимости и будет скрипт работать.

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


Вот так:
-D "/usr/name/`date +%Y-%m-%d/%T` - %A - %T"
А что касается Ubuntu - в самом скрипте же есть:
perl -MCPAN -e 'install LWP::Simple' там соглашаемся на все, установятся зависимости и будет скрипт работать.


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

419
gyurgin_ @gyurgin_
Да не может быть, можно так:
-D "/usr/name/`date +%Y-%m-%d/%H:%M:%S` - %A - %T"
или так:
-D "/usr/name/`date +%Y-%m-%d/%T` - %A - %T"
или совсем сокаращенно:
-D "/usr/name/`date +%F/%T` - %A - %T"
Пусть запишет несколько фрагментов, после переноса из incomplete время будет на месте.

16
Alex149149 @Alex149149
gyurgin_ пишет:

Да не может быть, можно так:
-D "/usr/name/`date +%Y-%m-%d/%H:%M:%S` - %A - %T"
или так:
-D "/usr/name/`date +%Y-%m-%d/%T` - %A - %T"
или совсем сокаращенно:
-D "/usr/name/`date +%F/%T` - %A - %T"
Пусть запишет несколько фрагментов, после переноса из incomplete время будет на месте.


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

perl скрипт к сожалению так и не заработал(((

perl -MCPAN -e 'install LWP::Simple'

установил с root
делал вот так

sudo streamripper URL -E "perl /путь к скрипту/fetch_external_metadata.pl **********

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

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

16
Alex149149 @Alex149149
gyurgin_ пишет:

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


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

скрипт perl "metadata.pl"

#! /usr/bin/perl
###########################################################################
# This is an example script that sends external metadata to streamripper.
# It implements an external program that:
# 1) Fetches a web page
# 2) Searches the web page for the artist and title information
# 3) Sends the information to streamripper
#
# To invoke the script, do this:
# streamripper URL -E "perl fetch_external_metadata.pl META_URL"
#
# This assumes that META_URL is the URL with the artist/title information
#
# You will need perl and LWP::Simple installed to run this script.
# On unix, you install LWP::Simple as root, like this:
# perl -MCPAN -e 'install LWP::Simple';
# On windows, LWP::Simple is included in the ActiveState perl distribution.
#
# This script is in the public domain. You are free to use, modify and
# redistribute without restrictions.
###########################################################################

use LWP::Simple;

if ($#ARGV != 0) {
die "Usage: fetch_external_metadata.pl URL\n";
}
$url = $ARGV[0];

while (1) {
my $content = get $url;

if ($content =~ m/title="(.*)" artist="(.*)"/) {
$title = "TITLE=$1\n";
$artist = "ARTIST=$2\n";
$end_of_record = ".\n";
$meta_data = $title . $artist . $end_of_record;
syswrite (STDOUT, $meta_data, length($meta_data));
}
else{
die "ERROR\n";
}
sleep (10);
}


файл для парсинга "index.php"

title="titleTest" artist="artistTest"

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

команда запуска

sudo streamripper ********** -E "perl /usr/share/doc/streamripper/examples/metadata.pl **********


и в итоге в терминале пишет

ERROR
[skipping... ] - [ 121kb]


т.е. как я понимаю, не выполняется условие вот этой строчки perl скрипта

if ($content =~ m/title="(.*)" artist="(.*)"/) {

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

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

16
Alex149149 @Alex149149
gyurgin_ пишет:

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


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

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

419
gyurgin_ @gyurgin_
Приветствую, работает, в таком виде выдает # perl fetch_external_metadata.pl **********
TITLE=Miracle (Amice Remix)
ARTIST=Julian Perretta
.
TITLE=Miracle (Amice Remix)
ARTIST=Julian Perretta
.
TITLE=She's On My Mind
ARTIST=JP Cooper
.
TITLE=She's On My Mind
ARTIST=JP Cooper
.