#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use Music::Tag; use WWW::Mechanize; my $url = 'http://www.machinaesupremacy.com/masusite/flacmusic.html'; my $bot = WWW::Mechanize->new( agent => 'ELinks/0.12', autocheck => 1, ); $bot->get($url); my $root = "machinae_supremacy"; mkdir $root if not -d $root; for my $link ($bot->links) { if ($link->url =~ m! files/ (.+?)_compilation # Album /flac/ (\d+)-machinae_supremacy-(.+?) # Track \.flac !x) { my $album = fix($1); my $track = $2; my $title = fix($3); my $dir = "$root/$album"; mkdir $dir if not -d $dir; my $filename = "$dir/$track".'_'."$title.flac"; my $url = $link->url_abs->as_string; # Download the file print "Downloading '".$url."'\n"; $bot->get($url, ":content_file" => $filename); # Tag the file properly my $info = Music::Tag->new($filename, {}, "FLAC"); $info->get_tag(); $info->strip_tag; $info->artist('Machinae Supremacy'); $info->album(fix_tag($album)); $info->genre('Bitpop'); $info->track($track); $info->title(fix_tag($title)); $info->set_tag; $info->close; } } sub fix { my ($str) = @_; for ($str) { s/(\w)/\l$1/g; tr/ \-'./____/; } return $str; } sub fix_tag { my ($str) = @_; for ($str) { s/_(\w)/ \u$1/g; s/^(\w)/\u$1/; } return $str; }