1

Тема: perl скрипт ices0

Есть скрипт на перле для 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 - полный путь к файлу)

2

Re: perl скрипт ices0

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

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

3

Re: perl скрипт ices0

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

4

Re: perl скрипт ices0

use DBI;
$dbh = DBI->connect('DBI:mysql:база;host=localhost'.....

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

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

5

Re: perl скрипт ices0

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: `}'

6

Re: perl скрипт ices0

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

7

Re: perl скрипт ices0

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

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

8

Re: perl скрипт ices0

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 22:03:25)

9

Re: perl скрипт ices0

это еще нормально ) пробуй в ices

10

Re: perl скрипт ices0

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...

код тот же

11

Re: perl скрипт ices0

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

12

Re: perl скрипт ices0

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

13

Re: perl скрипт ices0

Unknown column 'file' in 'field list

14

Re: perl скрипт ices0

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

15

Re: perl скрипт ices0

line 28
покажи что там

16

Re: perl скрипт ices0

$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();

17

Re: perl скрипт ices0

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

18

Re: perl скрипт ices0

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

19

Re: perl скрипт ices0

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