![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
На сайте prostopleer.com есть, вроде бы, возможность скачать целиком музыкальный альбом. Но потом — сюрприз! — скачавшийся zip-файл вовсе не является ZIP-архивом: ни unzip, ни 7z не желают его открывать. Лишь всемогущий mplayer спокойно играет одну пьесу за другой.
Анализ содержимого показал: в начале архива идёт стандартная сигнатура PK♥♦ (50 4B 03 04), но за ней — имена файлов вместе с мусором и сами файлы, без какого-либо сжатия. Достать музыку из такого файла при наличии перла — легко!
Оно же — на гитхабе: https://gist.github.com/shoorick/7785185
upd/11.12.13:: Спасибо Игорю Белому
bujhm за наводку — я неделю подкинутую им музыку слушаю, до сих пор нравится и работать не мешает.
Анализ содержимого показал: в начале архива идёт стандартная сигнатура 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:: Спасибо Игорю Белому
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
no subject
Date: 2013-12-04 10:42 am (UTC)no subject
Date: 2013-12-04 10:43 am (UTC)no subject
Date: 2013-12-04 01:57 pm (UTC)no subject
Date: 2013-12-04 02:01 pm (UTC)no subject
Date: 2013-12-04 02:32 pm (UTC)no subject
Date: 2013-12-05 07:44 am (UTC)