Не zip

Dec 04, 2013 10:24

На сайте prostopleer.com есть, вроде бы, возможность скачать целиком музыкальный альбом. Но потом - сюрприз! - скачавшийся zip-файл вовсе не является ZIP-архивом: ни unzip, ни 7z не желают его открывать. Лишь всемогущий mplayer спокойно играет одну пьесу за другой.

Анализ содержимого показал: в начале архива идёт стандартная сигнатура PK♥♦ (50 4B 03 04), но за ней - имена файлов вместе с мусором и сами файлы, без какого-либо сжатия. Достать музыку из такого файла при наличии перла - легко!

#!/usr/bin/perl -0777 -n

=head1 DESCRIPTION

Split big pseudo zip-archive from prostopleer.com into small mp3 files.

=head1 USAGE

./split.pl big-pseudo.zip

=head1 SEE ALSO

L<< https://gist.github.com/shoorick/7785185 >>

=head1 AUTHOR

Alexander Sapozhnikov
L<< http://shoorick.ru/ >>
Lshoorick@cpan.orgE

=cut

binmode(STDIN);

my $divisor = "ID3\x04\x00";
my @chunks = split $divisor;
shift @chunks;

my $i = 1;
foreach my $chunk ( @chunks )
open(my $fh, '<', sprintf('%02d.mp3', $i++))
or die "cannot open for writing: $!";
print $fh $divisor, $chunk;
close $fh;

Оно же - на гитхабе: https://gist.github.com/shoorick/7785185

upd/11.12.13:: Спасибо Игорю Белому bujhm за наводку - я неделю подкинутую им музыку слушаю, до сих пор нравится и работать не мешает.

программизм, mp3, perl, ЖЖ, ссылка

Previous post Next post
Up