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

perl скрипт ices0

 

59
Otani @Otani
Есть скрипт на перле для ices, который должен брать данные о треках из базы mysql, но почему то у меня выдает ошибку при запуске ices. Может кто то сможет помочь?
Вот сам скрипт:
  1. sub ices_shutdown {
  2. print "Perl subsystem shutting down:\n";
  3. }
  4. # Function called to get the next filename to stream.
  5. # Should return a string.
  6. sub ices_get_next {
  7. #print "Perl subsystem quering for new track:\n";
  8. #return "/usr/local/etc/modules/mp3/2.mp3";
  9. use DBI;
  10. $dbh = DBI->connect('DBI:mysql:база;host=localhost', 'юзер', 'пароль'
  11. ) || die "Could not connect to database: $DBI::errstr";
  12. $sth = $dbh->prepare('SELECT name FROM mp_id3_tags WHERE строка с айди трека (она же id)=1');
  13. $sth->execute();
  14. $result = $sth->fetchrow_hashref();
  15. print "Value returned: $result->{file}\n";
  16. return $result->{file};
  17. $dbh->disconnect();
  18. }
  19. # If defined, the return value is used for title streaming (metadata)
  20. sub ices_get_metadata {
  21. use DBI;
  22. $dbh = DBI->connect('DBI:mysql:база;host=localhost', 'юзер', 'пароль'
  23. ) || die "Could not connect to database: $DBI::errstr";
  24. $sth = $dbh->prepare('SELECT name FROM mp_id3_tags WHERE строка с айди трека (она же id)=1');
  25. $sth->execute();
  26. $result = $sth->fetchrow_hashref();
  27. print "Value returned: $result->{name}\n";
  28. return $result->{name};
  29. $dbh->disconnect();
  30. #return "Artist - Title (Album, Year)";
  31. }
  32. # Function used to put the current line number of
  33. # the playlist in the cue file. If you don't care
  34. # about cue files, just return any integer.
  35. sub ices_get_lineno {
  36. return 1;
  37. }
  38. return 1;

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

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

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

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

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

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

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

0
59
Otani @Otani
  1. use DBI;
  2. use DBD::mysql;
  3. $dbh = DBI->connect('DBI:mysql:mp3_2;host=localhost', 'ices', 'пароль'
  4. ) || die "Could not connect to database: $DBI::errstr";
  5. $sth = $dbh->prepare('SELECT file FROM mp_id3_tags WHERE id=1');
  6. $sth->execute();
  7. $result = $sth->fetchrow_hashref();
  8. print "Value returned: $result->{file}\n";
  9. return $result->{file};
  10. $dbh->disconnect();
  11. }
  12. # If defined, the return value is used for title streaming (metadata)
  13. sub ices_get_metadata {
  14. use DBI;
  15. use DBD::mysql;
  16. $dbh = DBI->connect('DBI:mysql:mp3_2;host=localhost', 'ices', 'пароль'
  17. ) || die "Could not connect to database: $DBI::errstr";
  18. $sth = $dbh->prepare('SELECT name FROM mp_id3_tags WHERE id=1');
  19. $sth->execute();
  20. $result = $sth->fetchrow_hashref();
  21. print "Value returned: $result->{name}\n";
  22. return $result->{name};
  23. $dbh->disconnect();
  24. #return "Artist - Title (Album, Year)";
  25. }

итого:
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: `}'

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

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

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

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

код тот же

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

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

код тот же

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

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

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

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

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

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

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

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

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

0





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

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