sub get_mp3_links_from_string { my $pagecontent = shift; my @episodes; my $parser = XML::RSS::LibXML->new; # for some bizarre reason, putting curly brackets around this eval generates # syntax errors. use q// instead. eval q/ $parser->parse($pagecontent) /; if ( $@ ) { writelog "Could not parse page as XML/RSS: $@\n"; $parser = undef; } if ( $parser ) { foreach my $item (@{ $parser->{items} }) { my $ep; if ( defined $item->{enclosure} ) { if ( $ep = $item->{enclosure}{url} and $ep =~ m!$extension_regex$! ) { push @episodes, { url => $ep }; } elsif ( $ep = $item->{media}{content}{url} and $ep =~ m!$extension_regex$! ) { push @episodes, { url => $ep }; } next if not $ep; } else { next; } if ( $config{description} ) { $episodes[ $#episodes ]->{title} = $item->{title}; $episodes[ $#episodes ]->{description} = $item->{description}; } } # end for each } # end if we have a valid parse unless ( @episodes ) { writelog "Found no $config{extensions} files by parsing XML, checking via regex for any $config{extensions} links in any context\n"; my @mp3s = uniq ( $pagecontent =~ m/(http[^\s>]+$extension_regex)/gi ); return undef unless ( @mp3s ); foreach ( @mp3s ) { push @episodes, { url => $_ }; } } return \@episodes; # @mp3s; }