#!/usr/bin/perl -w use strict; use warnings; use CGI; use Cwd; use Carp qw( croak ); use MP3::M3U::Parser 2.30; run(); sub run { my $output; my $cgi = CGI->new; my %opt = ( encoding => 'ISO-8859-9', # http encoding output_format => $cgi->param('xml') ? 'xml' : 'html', base_dir => getcwd || q{.}, # where are your m3u files? error => 'Invalid parameter!', ); my $target = $cgi->param('m3u') ? \&m3u : \&list; $target->( \$output, $cgi, \%opt ); my $head = $cgi->header( -type => "text/$opt{output_format}", -charset => $opt{encoding}, ); print $head . $output or croak "Can't print to STDOUT: $!"; return; } sub list { my($OUT, $cgi, $opt) = @_; my $p = $cgi->url; opendir DIR, $opt->{base_dir}; my @m3u = readdir DIR; closedir DIR; $OUT .= <<"FRAGMENT";
M3U List
FRAGMENT
foreach my $file ( sort @m3u ) {
next if $file !~ m{ [.] m3u \z }xmsi;
my $name = $file;
$name =~ s{ [.] m3u \z }{}xmsi;
my $u = qq~$p?m3u=$name~;
$OUT .= qq~[ HTML - XML ] $_~;
}
$OUT .= q~~;
return;
}
sub m3u {
my($OUT, $cgi, $opt) = @_;
my $m3u = $cgi->param('m3u') or return $opt->{error};
return $opt->{error} if $m3u =~ m{ \A A-Z_a-z_0-9 }xms;
my $file = sprintf q{%s/%s.m3u}, $opt->{base_dir}, $m3u;
return $opt->{error} if ! -e $file;
my $parser = MP3::M3U::Parser->new(-seconds => 'format');
$parser->parse($file);
$parser->export(
-encoding => $opt->{encoding},
-format => $opt->{output_format},
-drives => 'off',
-toscalar => \$OUT,
);
my $p = $cgi->url;
my $link = <<"FRAGMENT";
FRAGMENT
$OUT =~ s{}{$link}xms; return; } 1; __END__