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

perl скрипт ices0

 

59
Otani @Otani
Есть скрипт на перле для ices, который должен брать данные о треках из базы mysql, но почему то у меня выдает ошибку при запуске ices. Может кто то сможет помочь?
Вот сам скрипт:
sub ices_shutdown {
print "Perl subsystem shutting down:\n";
}

# Function called to get the next filename to stream.
# Should return a string.
sub ices_get_next {
#print "Perl subsystem quering for new track:\n";
#return "/usr/local/etc/modules/mp3/2.mp3";
use DBI;
$dbh = DBI->connect('DBI:mysql:база;host=localhost', 'юзер', 'пароль'
) || die "Could not connect to database: $DBI::errstr";
$sth = $dbh->prepare('SELECT name FROM mp_id3_tags WHERE строка с айди трека (она же id)=1');
$sth->execute();
$result = $sth->fetchrow_hashref();
print "Value returned: $result->{file}\n";
return $result->{file};

$dbh->disconnect();




}

# If defined, the return value is used for title streaming (metadata)
sub ices_get_metadata {

use DBI;
$dbh = DBI->connect('DBI:mysql:база;host=localhost', 'юзер', 'пароль'
) || die "Could not connect to database: $DBI::errstr";
$sth = $dbh->prepare('SELECT name FROM mp_id3_tags WHERE строка с айди трека (она же id)=1');
$sth->execute();
$result = $sth->fetchrow_hashref();
print "Value returned: $result->{name}\n";
return $result->{name};

$dbh->disconnect();

#return "Artist - Title (Album, Year)";
}

# Function used to put the current line number of
# the playlist in the cue file. If you don't care
# about cue files, just return any integer.
sub ices_get_lineno {
return 1;
}

return 1;

В таблице следующие строки:
ID filename audio_bitrate playtime_seconds artist title album genre
Думаю что в них указано - все ясно (в filename - полный путь к файлу)

6245
Тарас @tarasian666
use DBI;
use DBD::mysql;
и это впихнуть можно только один раз в sub ices_init также подключиться достаточно один раз к базе в том же init.
Если я не ошибаюсь скрипт запускается не каждый раз, а один раз при запуске ices дальше дергаються только функции, так что и дергать базу можно лишь раз при get_next, а в get_metadata просто вывести другие переменные уже из полученого массива в get_next

для проверки синтаксиса и тп необязательно запускать ices, можно сам скрипт

59
Otani @Otani
немного не понял ваш пост

6245
Тарас @tarasian666
use DBI;
$dbh = DBI->connect('DBI:mysql:база;host=localhost'.....

а надо
use DBI;
use DBD::mysql;
и тогда уже $dbh = DBI->connect('DBI:mysql:база;host=localhost'.....

и не нужно в каждой функции наново подключаться к базе

59
Otani @Otani
use DBI;
use DBD::mysql;
$dbh = DBI->connect('DBI:mysql:mp3_2;host=localhost', 'ices', 'пароль'
) || die "Could not connect to database: $DBI::errstr";
$sth = $dbh->prepare('SELECT file FROM mp_id3_tags WHERE id=1');
$sth->execute();
$result = $sth->fetchrow_hashref();
print "Value returned: $result->{file}\n";
return $result->{file};

$dbh->disconnect();
}

# If defined, the return value is used for title streaming (metadata)
sub ices_get_metadata {

use DBI;
use DBD::mysql;
$dbh = DBI->connect('DBI:mysql:mp3_2;host=localhost', 'ices', 'пароль'
) || die "Could not connect to database: $DBI::errstr";
$sth = $dbh->prepare('SELECT name FROM mp_id3_tags WHERE id=1');
$sth->execute();
$result = $sth->fetchrow_hashref();
print "Value returned: $result->{name}\n";
return $result->{name};

$dbh->disconnect();

#return "Artist - Title (Album, Year)";
}

итого:
root@radio:~# /usr/local/etc/modules/ices.pm
/usr/local/etc/modules/ices.pm: line 7: sub: command not found
Warning: unknown mime-type for "Perl subsystem Initializing:\n" -- using "application/octet-stream"
Error: no such file "Perl subsystem Initializing:\n"
/usr/local/etc/modules/ices.pm: line 9: return: can only `return' from a function or sourced script
/usr/local/etc/modules/ices.pm: line 10: syntax error near unexpected token `}'
/usr/local/etc/modules/ices.pm: line 10: `}'

59
Otani @Otani
и да, смогу ли я на такой системе реализовать стол заказов?

6245
Тарас @tarasian666
запускать надо perl /usr/local/etc/modules/ices.pm ведь в начале файла не указано что это за скрипт

реализовать возможно

59
Otani @Otani
root@radio:~# perl /usr/local/etc/modules/ices.pm
Can't return outside a subroutine at /usr/local/etc/modules/ices.pm line 61.

код тот же

Отредактировано Otani - 09.10.2011
6245
Тарас @tarasian666
это еще нормально ) пробуй в ices

59
Otani @Otani
DEBUG: Interpreting [ices_get_next]
DBD::mysql::st execute failed: Unknown column 'file' in 'field list' at /usr/local/etc/modules/ices.pm line 28.
DBD::mysql::st fetchrow_hashref failed: fetch() without execute() at /usr/local/etc/modules/ices.pm line 29.
Value returned:
DEBUG: perl [ices_get_next] returned 1 values, last []
DEBUG: Done interpreting [ices_get_next]
Playlist file name is empty, shutting down.
DEBUG: Interpreting [ices_shutdown]
Perl subsystem shutting down:
DEBUG: perl [ices_shutdown] returned 1 values, last [1]
DEBUG: Done interpreting [ices_shutdown]
Ices Exiting...

код тот же

6245
Тарас @tarasian666
ошибка mysql запроса или неправильно создана таблица

59
Otani @Otani
а что может быть не правильно создано в таблице:
данные мускулу указаны правильно

6245
Тарас @tarasian666
Unknown column 'file' in 'field list

59
Otani @Otani
ну дак я же айди колонку указываю, не путь к треку

6245
Тарас @tarasian666
line 28
покажи что там

59
Otani @Otani
$dbh = DBI->connect('DBI:mysql:mp3_2;host=localhost', 'пользователь', 'пароль'
) || die "Could not connect to database: $DBI::errstr";
$sth = $dbh->prepare('SELECT file FROM mp_id3_tags WHERE id=1');
$sth->execute();
$result = $sth->fetchrow_hashref();

6245
Тарас @tarasian666
говорит что в таблице нет столбца file
копай куда-то туда, еще пробуй вместо одинарных кавычек использовать двойные

59
Otani @Otani
дак выборка идет же из столбца id... видимо нужно указать столбец с путем к файлу?

6245
Тарас @tarasian666
судя по скрипту данные тянутся з столбца file где id ранво 1